SF1R 是一个分布式的存储搜索一体化海量数据引擎,源自 iZENECloud 团队多年的研发成果,并在商业网站上经受了严苛的考验。2014 年,iZENECloud 团队将 SF1R 以 Apache License 2 开源,希望与社区共同改进和维护。
SF1R 全称为 Search Formula 1 Revolution,是 iZENECloud 团队内部使用的搜索引擎项目代号。
SF1R 项目历史悠久,完全基于 C 语言开发,最新的 master 分支可以使用 C 11 编译。早期开发时参考了 Lucene 的索引设计并进行了改进,包括实时索引和更好的压缩手段(如 PForDelta 和 NewPFor)。
然而,在使用过程中,团队发现基于文件的 Lucene 索引在应对高并发和低延迟方面不具优势。鉴于大多数大规模搜索引擎的索引都完全放置在内存中,iZENECloud 团队为 SF1R 添加了 Zambezi 和 Suffix 两种内存索引,这两种索引都是业界最佳设计,大大提升了 SF1R 的性能。
iZENECloud 团队根据需求不断调整 SF1R,添加了众多功能,包括各种数据挖掘特性,并集成了推荐引擎,使其成为一个庞大的搜索、存储、推荐、挖掘一体化引擎,但也因此变得臃肿。
因此,在 2014 年,iZENECloud 团队对老版本的 SF1R 进行了大量裁剪,删除了数据挖掘和推荐引擎,只保留了搜索和存储功能,这就是 SF1R-Lite 项目。
目前,大多数应用都采用了 Lucene 以及基于 Lucene 的 Solr 和 Elasticsearch 等搜索解决方案。这些方案经过多年的改进,在通用化方面已经非常优秀。那么,为什么还要采用新的搜索方案 SF1R 呢?主要有以下三个原因:
- 基于 Java 的搜索方案在面临高压力场景时,由于 GC 的存在,经常会出现延迟抖动。SF1R 在实际应用中可以跑满全部 CPU(例如 16 核),并 7x24 小时不间断运行,没有上述抖动。
- SF1R 采用的两种内存索引在性能上远高于常规方案,更能满足对性能要求苛刻的应用。
- SF1R 拥有独特的优势,例如在单一节点上处理大量数据的能力。