《Elastic Stack 实战手册》——四、应用实践——4.1 企业搜索应用场景 ——4.1.5.Elasticsearch在搜索引擎构建中的实践 (上) https://developer.aliyun.com/article/1226299
业务模板
1、背景:针对批量部署及其他的数据使用需要,会存在很多公用的模板和脚本,Elasticsearch 中的版本控制等较差,随着时间的推移会产生很多因为版本不同而带来的结果差异。
2、实现:我们维护了包括索引模板、搜索模板、各类 ingest processor 和 script 等的中央仓库,统一进行维护和升级。
3、优势:统一管理各类公用配置保证所有集群的配置保持一致。
4、劣势:统一的基础配置需要各集群叠加个性化、高优先级配置进行配置覆盖,才能满足不同集群中个性化的数据需要。
统一数据处理算子
1、背景:不同数据结构大致一致,仅存在少量不同字段,但是每个业务维护自己的召回、排序服务可能会带来大量的资源浪费。
2、实现:统一基础数据模板、召回、排序服务,配合个性化数据结构、召回排序逻辑。
3、优势:对于基础的,大体相似的逻辑进行公共抽象、统一维护,减少了服务的开发、迭代的资源需求,通过各业务方个性化的数据、策略调整,满足不同业务方个性化的数据需求。
4、劣势:通用算子的修改升级可能会横向影响多个业务的使用,加大了数据质量和测试的工作量。
实际案例
本节主要阐述和 Elasticsearch 使用相关的案例,其他和搜索等业务相关的内容略去。
集群升级
1、背景:某些使用场景中,某些版本的 Elasticsearch 存在瓶颈,制约了系统构建、使用和维护效率。Elasticsearch 大版本升级之后,某些功能的升级可以减少我们平时使用的代价,提升数据存取的性能,综合考虑之下决定对某些集群进行升级。
2、操作目标:
l 目标集群相关联的各业务接入系统的升级。
l 目标集群相关的监控、数据迁移等支持系统的升级。
l 目标集群中部署的各类业务插件。
3、环境准备:
l 集群接入方梳理。
l 集群使用方式梳理。
l 集群升级影响范围评估。
l 调用关系梳理。
4、迁移步骤:
l 现有数据备份。
l 对应配置、插件等升级。
l 新集群规划。
l 新集群初始化。
l 现有数据迁移。
l 数据双写。
l 数据校验。
l 服务灰度、蓝绿发布。
l 流量部分切换,使用状态监控。
l 流量完整切换,旧集群下线。
5、注意点:
l 数据备份及双写:在不影响线上使用的前提下保证数据的完整性,在数据切换之后再保留一段时间数据双写等流程,以免因为各种问题造成的数据异常,需要进行回滚之类的操作。
l 流量逐步切换:在新索引构建完成之后,可以逐步将线上流量切到新索引(集群)并保留旧索引一段时间,同时要严格监控和测试线上服务的表现,在完全可靠之前要随时做好切回旧索引的准备。
l 数据质量监控:新上线的索引(集群)可能存在一些短时间内无法发觉的数据异常,迁移之后的一段时间中可以考虑加入包括数据比较、数据分布报表等在内的数据监控,以保证新索引的数据质量。
l 数据备份的保存:数据通过 snapshot 或者其他方式导出的文件,可以考虑多保留几个滚动周期或者直接保存在文件系统等冷存储,用来应对后续可能的数据恢复、校验、审计等需求。
节点替换大致流程如图所示:
打分插件开发
1、背景:某些使用场景中,某些 Elasticsearch 的召回中需要嵌入很复杂的算分过滤公式,每次通过传入script 驱动 Elasticsearch 进行得分计算会严重拖慢 Elasticsearch 的运算效率。为此,我们权衡了内置打分插件、外置重排服务等多个解决方案之后,选择了自研打分插件的方式进行统一处理。
2、操作目标:
l 所有业务集群。
l 所有业务召回服务。
3、环境准备:
l 集群负载监控。
l 分数调整公式梳理。
l 算分插件实现方式调研。
4、实现步骤:
l 对应算分插件开发。
l 相关服务召回逻辑升级。
l 测试集群部署。
l 数据结果交叉对比。
5、注意点:
l 数据测试:搜索类的结果不同于普通业务系统是通过条件过滤,而是依靠打分进行召回、排序等,所以它的结果可能不是孤独的结果集,这里需要测试同学深入的理解算分、过滤逻辑,构建专门的测试脚本进行测试。
l 结果运营:由于结果的计算是通过柔性算分来实现的,需要产品同学在对比现存脚本输出的结果和新的插件输出的结果,人工评价结果的优劣,以便未来更好的迭代运算结果。
小结
本节就一个搜索引擎类项目的使用场景中,对 Elasticsearch 的部署、使用等方面进行了简要描述,并就几个真实的使用场景进行了分析和讨论,希望可以在读者遇到类似的使用场景时带来些参考。
创作人简介:
死敌wen,十余年 IT 老兵,从售前做到运维,从后端做到 HR 和猎头,Hands on 过几乎
IT 生命周期的整个过程,不说样样精通,只希望能和不同岗位的同学尽可能站在一个Baseline上进行沟通和交流。希望能通过自己的一点努力,给更多的同学带来一些积极的影响,足矣。