大型网站架构设计-lucene 分布式扩展

2015-1-5 13:08:07     38 人阅读    

        与其他的分布式系统架构类似,基于Lucene的搜索引擎也会面临扩展的问题,单台机器难 以承受访问量不断上升的压力,不得不对其进行扩展。但是,与其他应用不同的是,搜索应用 大部分场景都能够接受一定时间的数据延迟,对于数据一致性的要求并不那么高,大部分情况 下只要能够保障数据的最终一致性,可以容忍一定时间上的数据不同步,一种扩展的方式如 图2-22所示。

 

        每个query server实例保存一份完整的索引,该索引由dump server周期性地生成,并进行 索引段的合并,索引生成好之后推送到每台query server进行替换,这样避免集群索引dump对 后端数据存储造成压力。当然,对于增量的索引数据更新,dump server可以异步地将更新推送 到每台query server,或者是query server周期性地到dump server进行数据同步,以保证数据最终的一致性。对于前端的client应用来说,通过对请求进行Hash,将请求均衡地分发到集群中 的每台服务器,使得压力能够较为均衡地分布,这样即达到了系统扩展的目的。

 

图2-22搜索引擎索引的读写分离

        索引的读/写分离解决的是请求分布的问题,而对于数据量庞大的搜索引擎来说,单机对索 引的存储能力毕竟有限。而且随着索引数量的增加,检索的速度也会随之下降。此时索引本身 已经成为系统的瓶颈,需要对索引进行切分,将索引分布到集群的各台机器上,以提高查询性 能,降低存储压力,如图2-23所示。

图2-23索引的切分

      在如图2-24所示的架构中,索引依据uniquekey%N,被切分到多台index server中进行存 储。client应用的查询请求提交到merge server,merge server将请求分发到index server进行检索,最后将查询的结果进行合并后,返回给client应用。对于全量的索引构建,可以使用dump server集群,以加快索引构建的速度,并分担存储的压力。而增量的更新请求,可以根据索引 的uniquekey取模,将索引同步到index server;为避免merge server出现单点,可以对merge server进行高可用部署。当然,索引切分的方案并非完美,可能也会带来一些问题。举例来说,假如 查询请求需要进行结果排序,当索引没有切分时很好处理,只需要按照查询指定的条件排列即 可,但是对切分后的索引来说,排序请求将被分发到每一台index server执行排序,排完以后取 topN (出于性能考虑)发送到merge server进行合并,合并后的结果与真正的结果很可能存在 偏差,这就需要在业务上进行取舍。

      有的时候,可能既面临高并发的用户访问请求,又需要对海量的数据集进行索引,这时就需 要综合上述的两种方法,即既采用索引读写分离的方式,以支撑更大的并发访问量,又采用索引 切分的方式,以解决数据量膨胀所导致的存储压力以及索引性能下降的问题,如图2-24所示。

图2-24既进行读写分离,又进行索引切分

 

       merge server与index server作为一组基本单元进行复制,而前端应用的请求通过Hash被分 发到不同的组进行处理;每一组与之前类似,使用merge server将请求分发到index server进行
索引的查询;查询的结果将在merge server进行合并,合并完以后,再将结果返回给client。

本文出自   《大型分布式网站架构设计与实践试读样章》 试读,如果感觉到对你有帮助可以去购买该书


原文地址:http://www.itmmd.com/201501/441.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

linux命令详解(26)分页查看文本 less 命令详解   上一篇
下一篇  产品经理学习笔记(17)-技术素养

精彩回复
#1楼    ; [评论人]:dd   [发表时间]:2015-1-5 14:23:52

顶顶顶

发表评论
姓名:       

《程序员app》专门为程序员量身定做!