一种基于Lucene的实时搜索服务
因为本文篇幅有限,在这里我只会着重介绍:实时性、高可用性在我们产品中的一些技术实践。
实时解决方案
在介绍我们产品方案之前,首先介绍下业内常见的实时解决方案,见图1-1实时架构图:
图1-1
该方案一般是由:
内存索引(Ram-IndexA)负责数据更新。
内存索引(Ram-IndexA)达到阀值,角色转换成待合并内存索引(Ram-IndexB),同时重新开辟一块新的内存索引(Ram-IndexA)负责新的更新写入,老的内存索引(Ram-IndexB)合并且优化到主索引中。
内存索引(Ram-IndexA)+磁盘索引(Full-IndexA)提供检索服务。
基于该方案可以带来的最大的优势是内存索引可以合并到主索引,避免了索引碎片,从而可以屏蔽全量索引重新构建和保障搜索服务的性能稳定性。但是这种方案仍然会存在以下问题: