杨文杰 倪平波 宋卫平 杨帆
摘 要:移动互联网的兴起,带动了互联网生态圈的整体发展。随着用户量的激增,随之而来的是大量用户的数据产生,如何从海量数据中快速精准地检索出需要的信息,成为当前互联网时代需要解决的问题。当今主流搜索引擎Elasticsearch(文中简写为ES)是一款基于apache lucene的开源搜索引擎产品,由于它具有开源、分布式、实时、方便的接口、易于扩展等特点,被广泛运用于国内外知名组织和公司。该文将从“ES服务化”基于开源ES基础上实现服务化(多租户权限管理、查询请求QPS限制、海量日志检索、集群高负载自我保护、多租户资源隔离)。
关键词:服务化 多租户 资源隔离 Elasticsearch
中图分类号:TP391 文献标识码:A 文章编号:1672-3791(2020)08(c)-0064-03
Abstract: The rise of the mobile Internet has driven the overall development of the Internet ecosystem. With the large increase in the number of users, a large number of user-related data is generated. How to quickly and accurately retrieve the required information from the massive data has become a problem that needs to be solved in the current Internet age. Today's mainstream search engine Elasticsearch (hereinafter abbreviated as ES) is an open source search engine based on apache lucene. It is widely used at home and abroad because of its open source, distributed, real-time, universal interface and secondary development. Well-known organizations and companies. This article will implement services based on open source ES from "ES service" (multi-tenant rights management, query request QPS limit, massive log retrieval, cluster high load self-protection, multi-tenant resource isolation).
Key Words: Servitization; Multi-tenant; Resource isolation; Elasticsearch
当今互联网技术向开源、可扩展、高可用、分布式发展,移动互联网设备繁多,适配和可用性成为现代企业痛点。企业级开发人员在选择搜索引擎时往往考虑高可用、安全、可扩展等功能,调研了权限管理插件x-pack、search-guard等,插件都为商用的原因,都无法满足企业级权限的需求,企业级权限要细化到用户、角色、组织机构,以及用户行为记录。
1 Elasticsearch服务化的优势
搜索引擎的工作流程是将搜索文档进行分词,然后对每一个词建立一个索引,形成倒排文件。当用户查询时,搜索程序会在倒排文件中查找,在查找的同时会计算每个关键词与文档的相关度等,然后根据相关度的大小对包含关键词的所有文档进行排序,最后返回用户结果[1]。
现有ES搜索引擎能够方便提供各种应用集成和调用,提供便捷的分布式方案,对海量数据进行实时处理,并进行精准的数据分析,提供相关度的查询,开箱即用既能满足大型企业应用,也能满足中小型企业应用,24h提供搜索服务。但是,还是会面临以下问题。
(1)无权限管理服务,如果把直接写ES的权限放開给业务方,带来的安全隐患是非常大的。(2)Elasticsearch针对各业务的流量无法控制,当级别低的业务占用了级别高业务的流量,将造成核心业务延迟,用户体验不佳。(3)在多业务并发写入时,无法做到一致性,导致核心数据受影响。(4)对错误反馈信息无法统一,无法精确定位错误来源。(5)对于多个业务需要各自部署自己的Elasticsearch,如使用统一的Elasticsearch,没办法解决权限和数据隔离,可见Elasticsearch搜索引擎并没有达到人们理想的期望,这也促进了将ES进行服务化的迫切需求。
2 Elasticsearch服务化的工作原理
(1)Elasticsearch是通过Restful接口进行交互,通过插件的方式进行无侵入式,二次开发和集成。(2)构建插件功能,实现符合安全的租户维护、权限分配、权限验证等功能。(3)对所有Elasticsearh操作进行,请求拦截,根据业务配置依据,检查单位时间内单个业务组件请求搜索引擎的次数,如果超过业务阈值,进行用户自定义的相应操作。(4)业务请求搜索引擎失败时,插件端拦截错误信息,进行统一的错误提示,使上层调用层有明确的错误信息展示,易于快速定位问题、解决问题。
3 Elasticsearch服务化设计方案
(1)数据接入Elasticsearch不需要改造业务现有架构(依然走公司统一数据收集方式)。(2)减少 client 的并发连接。Elasticsearch不管写入还是搜索,都是配了线程池,并发连接过多,非常容易把写入线程池打满,导致拒绝请求。(3)提高写入效率。通过 transport bulk模式实现写入,相比filebeat的http方式从写入效率上来说,有比较大的提升。(4)增强可控性,当集群数据量非常大的时候,如果要对集群做升级或者重启,如果同时还在大量写数据,分片恢复的时间非常漫长。但是可以与大头业务协商,暂停写入(只需要把服务端的数据摄入停止即可,不用业务客户端操作),操作集群,恢复写入)[3]。(5)集群升级完全不用业务方做适配[3]。(6)数据摄入监控很好收敛,故障定位非常明确。
以上虽然表面上增加了系统的复杂度,和一定程度的写入延迟,但是都是可接受的。对于复杂度并没有过多的增大,由于与内部数据流的对接,对业务来说反而更加简单。虽然实时性牺牲了一些(整条链路数据延时在1min以內),但还是可接受的。
4 搜索引擎未来的展望
随着互联网时代的来临,人类面临着前所未有的信息过载问题。为了方便人们从海量数据中快速精准地检索感兴趣的信息,Web搜索引擎应运而生。在互联网发展的早期,数据量比较小,单机索引就能支撑一个完整的应用。此时Apache Lucene凭借其精巧的代码设计、优异的性能、丰富的查询接口,以及众多的衍生搜索产品(如ApacheSolr、Nutch等),在开源搜索领域大放异彩。随着互联网的发展,数据量快速膨胀, 此时对搜索引擎提出了分布式、准实时、高容错、可扩展、易于交互等诸多要求。基于Lucene的简单二次开发已经满足不了日常的搜索需求,ElasticSearch的诞生则很好地满足了上述大数据时代的搜索产品需求。
参考文献
[1] 张光异.基于Elasticsearch的房源搜索系统的设计与实现[D].华中科技大学,2019.
[2] 张月.基于ElasticSearch的分布式搜索引擎的设计与实现[D].北京交通大学,2019.
[3] Radu Gheorghe.Elasticsearch实战[M].北京:人民邮电出版社,2018:3-13,40-41,238-250.
[4] 王伟,魏乐,刘文清,等.基于ElasticSearch的分布式全文搜索系统[J].电子科技,2018,31(8):56-59,65.
[5] 李敏.基于搜索引擎优化技术与模板引擎技术的网站优化策略初探[J].通讯世界,2017(9):45-46.
[6] 李瑶,周仕洵.搜索引擎关键词的选择方法分析[J].现代国企研究,2017(12):194,262.
[7] 吉喆基于Elasticsearch的实时大数据统计分析平台的研究与设计[J].华南理工大学,2019.
[8] 钦蒋录,沈宏良.基于Elasticsearch的校内全文搜索平台的研究与实现[J].现代计算机:专业版,2018(34):98-102.
[9] 段晨迪.基于Elasticsearch面向MOCC的垂直搜索引擎设计与实现[D].北京交通大学,2019.