《架构师之路:架构设计中的100个知识点》
98.搜索引擎架构与细节
产品提了一个需求:
检索的时效性,对用户体验来说很重要,必须检索出5分钟之前的新闻,1秒钟之前发布的帖子,不复杂吧?
百度为何能实时检索出5分钟之前新出的新闻?同城为何能实时检索出1秒钟之前发布的帖子?
实时搜索引擎系统架构的要点是什么?
大数据量、高并发量情况下的搜索引擎为了保证实时性,架构设计上的两个要点:
1. 索引分级;
2. dump&merge;
首先,在数据量非常大的情况下,为了保证倒排索引的高效检索效率,任何对数据的更新,并不会实时修改索引。
画外音:因为,一旦产生碎片,会大大降低检索效率。
既然索引数据不能实时修改,如何保证最新的网页能够被索引到呢?
索引分级,分为全量库、日增量库、小时增量库。

如上图所述:
1. 300亿数据在全量索引库中;
2. 1000万1天内修改过的数据在天库中;
3. 50万1小时内修改过的数据在小时库中;
当有修改请求发生时,只会操作最低级别的索引,例如小时库。

当有查询请求发生时,会同时查询各个级别的索引,将结果合并,得到最新的数据:
1. 全量库是紧密存储的索引,无碎片,速度快;
2. 天库是紧密存储,速度快;
3. 小时库数据量小,速度也快;
分级索引能够保证实时性,那么,新的问题来了,小时库数据何时反映到天库中,天库中的数据何时反映到全量库中呢?
dump&merge,索引的导出与合并,由这两个异步的工具完成:

dumper:将在线的数据导出。
merger:将离线的数据合并到高一级别的索引中去。
小时库,一小时一次,合并到天库中去;
天库,一天一次,合并到全量库中去;
这样就保证了小时库和天库的数据量都不会特别大;
如果数据量和并发量更大,还能增加星期库,月库来缓冲。
简单小结一下:
超大数据量,超高并发量,实时搜索引擎的两个架构要点:
1. 索引分级;
2. dump&merge;
知其然,知其所以然。
思路比结论更重要。
==全文完==