如何实现搜索引擎优化(《深入浅出搜索架构(上篇)》详细介绍:站内搜索引擎架构与流程)

优采云 发布时间: 2021-10-19 11:13

  如何实现搜索引擎优化(《深入浅出搜索架构(上篇)》详细介绍:站内搜索引擎架构与流程)

  一、起源

  《搜索架构介绍(一)》详细介绍:

  (1)全网搜索引擎结构及流程

  (2)网站搜索引擎结构和流程

  (3)搜索原理和核心数据结构

  本文重点介绍:

  (4)流量数据量从小到大,常见的搜索方案和架构变化

  (5)数据量、并发、扩展性计划

  只要商家有搜索需求,这篇文章一定能帮到你。

  二、检索需求的满足和架构演进

  对于任何互联网需求,都有或多或少的检索需求。以58个同城邮政业务场景为例。帖子标题和帖子内容对用户检索需求强,各个阶段的业务、流量、并发都在逐渐增加。,如何达到检索要求?

  原创舞台-LIKE

  数据可以像这样存储在数据库中:

  t_tiezi(时间,标题,内容)

  满足标题和内容的检索需求可以通过LIKE实现:

  select tid from t_tiezi where content like'%天通苑%'

  能快速满足业务需求,存在的问题也很明显:

  (1)效率低,每次都需要全表扫描,计算量大,并发高时CPU容易100%

  (2) 不支持分词

  初级阶段全文索引

  如何快速提高效率,支持分词,对原有系统架构的影响尽可能小,首先想到的就是建立全文索引:

  更改表 t_tiezi 添加全文(标题,内容)

  使用 match 和 against 来实现对索引字段的查询需求。

  全文索引可以快速满足业务中的分词需求,快速提升性能(分词倒排后,至少不是全表扫描),但也存在一些问题:

  (1) 仅适用于 MyISAM

  (2)由于全文索引利用数据库特性,搜索需求和普通CURD需求在数据库中耦合:当搜索需求并发量大时,可能会影响CURD请求;当CURD并发量大时,搜索会很慢;

  (3)数据量达到百万级别,性能还是会明显下降,查询返回时间很长,业务难以接受

  (4) 难以横向扩展

  中级-开源外部索引

  为了解决全文搜索的局限性,当数据量增加到几百万或几千万时,必须考虑外部索引。外部索引的核心思想是:索引数据与原创数据分离。前者满足搜索要求,后者满足CURD要求。使用一定的机制(双写、通知、定期重构)来保证数据的一致性。

  原来的数据可以继续用Mysql存储,外部索引怎么实现?Solr、Lucene 和 ES 都是常见的开源解决方案。

  楼主强烈推荐ES(ElasticSearch),因为Lucene虽然好,但还是有一些不足:

  (1)Lucene只是一个库。潜台词是你需要自己做服务,实现高可用/可扩展/负载均衡等复杂功能。

  (2)Lucene只支持Java,如果要支持其他语言,还是得自己做服务

  (3)Lucene不友好,这个很致命,很复杂,用户往往需要对搜索知识有深刻的理解才能理解它的工作原理,为了屏蔽它的复杂性,一种方式就是做服务你自己

  …

  …

  为了改善Lucene的各种缺点,解决方案是“封装一个界面友好的服务,屏蔽底层的复杂性”,所以ES:

  (1)ES是一个以Lucene为核心实现搜索功能并提供RESTful接口的服务

  (2)ES可以支持海量信息存储,支持高并发搜索请求

  (3)ES 支持集群,为用户屏蔽高可用/可扩展性/负载均衡等复杂特性

  目前,58到家以ES为核心,实现了自己的搜索服务平台,通过平台上的简单配置即可实现业务端的搜索需求。

  搜索服务数据量最大的“接口耗时数据采集”需求约7亿;并发量最大的“经纬度、地理位置搜索”需求,平均在线并发量在600左右,压测数据并发量在6000左右。

  结论:ES完全可以满足10亿数据量、5k吞吐的常见搜索业务需求。强烈推荐。

  高级阶段自主研发的搜索引擎

  当数据量进一步增加,达到10亿、100亿数据;并发量也进一步增加,达到每秒10万的吞吐量;当商业个性也逐渐增多时,就需要自主研发搜索引擎,实现定制化的搜索内核。

  三、数据量、并发、扩展性计划

  到了定制化自研搜索引擎阶段,设计重点是超大数据量和超高并发。为了满足“无限容量、无限并发”的需求,架构设计需要以“可扩展性”为核心,力求做到:增加机器可扩展(数据量+并发)。

  58同城自主研发的搜索引擎E-search的初步*敏*感*词*如下:

  

  (1) 上层代理(粉色)是访问集群,是一个对外的入口,接受搜索请求。它的无状态性可以保证代理集群的性能可以通过增加更多的机器来扩展。

  (2) 中层合并(浅蓝色)是一个逻辑集群,主要用于实现搜索合并,以及评分排序。业务相关的排名是在这一层实现的,它的无状态也可以保证机器的增加可以实现 扩展合并集群的性能

  (3)底层searcher(深红色大框)是检索集群,服务和索引数据部署在同一台机器上,服务启动时可以将索引数据加载到内存中,请求访问时从内存中加载数据,访问速度很快

  (3.1)为了满足数据容量的可扩展性,将索引数据横向划分。通过增加分区数,可以无限扩展性能。如上图所示,搜索者分为4组

  (3.2)为了满足单条数据的性能可扩展性,同一条数据是冗余的。理论上如果增加机器,性能可以无限扩展。如图在上图中,每组搜索者冗余了 2 个份额

  通过这种设计,真正可以增加机器的数量来承载更多的数据并响应更高的并发。

  四、总结

  为了满足搜索业务的需求,随着数据量和并发量的增长,搜索架构一般会经历几个阶段:

  (1)原创舞台-LIKE

  (2)初始阶段全文索引

  (3)中级-开源外部索引

  (4)高级阶段自主研发的搜索引擎

  您的搜索架构在哪里?数据量,并发,好经验,欢迎分享?

  五、 下一章预览

  实时搜索引擎的核心技术,站长发布一个新网页,15分钟后谷歌怎么找回。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线