导语 | 一波未平一波又起的疫情对大家的生活、工作造成了一定影响。在信息化飞速发展的今天,小伙伴们技术交流的方式也变得多样化。2021年8月21日下午,ES中文社区联合腾讯云在腾讯滨海大厦举办了深圳地区年度首次Meetup,活动采用线下现场参与、腾讯会议、腾讯云开发者社区线上同步直播的方式进行。来自腾讯、Tapdata、字节跳动、vivo的技术专家们给ES社区的小伙伴们带来了一场精彩的技术视听盛宴。
活动精彩回顾
一、社区发展
活动开始ES深圳分会主席杨振涛先生回顾了深圳Meetup历史并对本次活动表达了祝福,分会副主席黄华先生介绍了ES社区最新的发展动态。
截止目前Elasticsearch总下载量达到8.3亿,Elastic Stack技术栈产品的下载量超过25亿。作为开源产品,发展趋势非常火爆,这背后得益于ES在大数据生态下服务场景的不断扩展。ES社区的发展也是非常的迅猛,全球近百个城市举办过Meetup活动,共5万多参会者,全球社区用户量超过10万。中文社区有9个城市定期举办Meetup,相信后续会越来越多。ES技术栈这么火爆主要是因为搜索领域它是王者,海量日志实时分析领域它正在成为很多公司的平台化、数据中台的标配。
云是未来,拥抱云原生。腾讯云和Elastic公司达成商务战略合作已有两年多时间,云上的托管ES服务已成为大数据产品线的火热品牌。与此同时,腾讯并没有白嫖开源产品,除了引入官方X-Pack商业特性,技术层面进一步拥抱开源、贡献开源。腾讯ES的内核团队向社区贡献了大量的Patch,腾讯已成为ES社区全球贡献最多的第三方公司。
二、主题分享
(一)腾讯Elasticsearch压缩编码优化实践
首先分享的是来自腾讯ES内核团队的专家工程师毕杰山老师,他的分享主题是腾讯Elasticsearch压缩编码优化实践。
ES底层的存储引擎是Apache Lucene,它支持多种数据结构,包括行存、列存、倒排索引、数值类型索引(BKD-Tree)等等。正因为其支持多种数据结构,使得ES能支持的业务场景非常丰富。也正是因为多种数据结构的支持,导致ES的存储成本开销比较高。另外Lucene的发展已有二十多年历史,在各种数据结构的压缩优化、编码优化方面并没有演进的特别快。
压缩算法的技术门槛较高,一般涉及众多的复杂算法,重复研发一种新的压缩算法代价非常大,业界也有较多成熟的算法例如Zstd、Brotli、Deflate等。从ES众多的数据结构中寻找文件存储可优化点本身比较挑战,我们需要兼顾压缩比和性能的开销。除了引入通用的压缩算法,还要针对部分结构做深度的编码优化。
在本次分享中,杰山老师深入浅出地剖析了压缩算法的基本原理,解析了腾讯ES在压缩编码方面系统性的优化。点击图片下方链接,查看详细分享内容。
腾讯Elasticsearch压缩编码优化实践(https://elasticsearch.cn/slides/285)
- 该主题问答环节:
问题1:这些新特性基于哪个版本做的?
答复:基于es7.10版本,对应着lucene的版本为8.7。
问题2:能不能不对行数据进行压缩?我们发现在es node侧压缩的话会特别消耗CPU,所以在外部提前做了压缩。
答复:行数据压缩是默认开启的,目前并没有提供关闭的选项。因为大部分场景下都对存储成本非常敏感。
外部提前对数据做了压缩然后再写进来的话,得考虑如何分词,这里需要很强的定制,也有使用场景上的限制。对我们来说,这种方案并不具有通用性。
问题3:行存有没有可能提供用户自定义排序呢?
答复:ES的排序是索引维度的设定,不针对具体的数据结构,但对排序的字段类型有一些限制,只能是boolean, numeric, date和keyword类型且开启了doc_value,当设定以后,整个文档的所有数据结构会按照设定的字段排序后的doc id顺序进行写入,包括写入和merge流程。对于行存,Lucene底层会将flush前的行存先写入一个临时目录,flush时再从临时目录读取根据doc id排序再按顺序写入,因此行存带排序写入开销会比较高。
问题4:存储计算分离大概什么思路可以简单说下么?
答复:存算分离的主要实现思想是基于共享存储实现多个节点的数据共享,ES层面只保存一个物理副本。文件系统底层确保数据本身的可靠性,同时ES提供逻辑上的主从副本,实现数据一写多读的能力。从而达到优化存储、计算成本的目的。
(二)ES MongoDB的实时数据融合平台架构
接下是来自Tapdata的资深架构师杨庆麟老师分享基于ES MongoDB的实时数据融合平台架构。跨地域业务需求在数据一致性、实时性层面始终是痛点。例如珠宝行业的头部客户在中、港、台、澳等多地有业务系统。由于历史原因,系统还是多年前的架构,存储系统以Oracle为主,数据冗余、订单状态无法统一、运维成本高。Tapdata提供了一套面向业务的DaaS解决方案,基于ES和Mongo的跨地域实时数据融合平台。上线之后统一了各个地域门店后台,大幅降低了数据维护成本。详细的分享内容请点击图片下方的链接。
基于ES MongoDB的实时数据融合平台架构分享(https://elasticsearch.cn/slides/284)
- 该主题问答环节:
问题1:数据同步时,针对多个数据源多个表的数据聚合,请问是通过脚本来处理的,还是通过编码处理?
答复:通过js来做的,⾃研的实时计算引擎。
问题2:数据库实时同步的原理是什么?
答复:针对oracle,采⽤的是logminer;mysql采⽤的是binlog⽅式;Mongo是changestream。
问题3:通过Mongo es完成业务数据的交付,那么ES会处理计算吗?
答复:ES不负责计算,Mongo也不负责⼤部分计算。⼤部分计算都是通过平台完成的,Mongo负责⾼并发的更新,es负责⾼并发、搜索场景的查询。
茶歇时间
在两场主题分享完毕后的技术交流环节,活动主办方在美丽的腾讯滨海大厦提供了精美的茶歇。
(三)字节跳动在ES的内核扩展
接下来是来自字节跳动的鲁蕴铖老师分享字节跳动在ES的内核扩展。字节跳动实现了基于内部自研NFS的存算分离功能,实现了一写多读的架构,底层云存储多副本保证可靠性。Primary分片承担所有的写操作,通过传送Segment Infos到各个副本,实现副本同步,基本可以实现秒级副本扩容。
官方的跨集群复制需要License支持,字节跳动实现了自研的跨集群复制能力,并采用了Leader向Follower Push的模式进行同步,提升数据同步的实效性。除此之外,他们还对向量化检索进行了插件化的扩充,支持更多的算法。链路安全方面,实现了底层存储加密、支持基于GDPR认证授权方式等。在可观测性方面,ES擅长于做链路追踪,他们对ES本身的读写流程进行了函数调用链的追踪,便于性能分析。详细的分享内容请点击图片下方的链接。接下来是来自字节跳动的鲁蕴铖老师分享字节跳动在ES的内核扩展。字节跳动实现了基于内部自研NFS的存算分离功能,实现了一写多读的架构,底层云存储多副本保证可靠性。Primary分片承担所有的写操作,通过传送Segment Infos到各个副本,实现副本同步,基本可以实现秒级副本扩容。
字节跳动在ES的内核扩展(https://elasticsearch.cn/slides/286)
- 该主题问答环节:
问题1:向量化怎么实现的,性能如何?
答复:通过扩展ES的Engine plugin,然后对于不同的向量组件实现自己 codec,性能在kw级数据下基本在百ms以内。
问题2:审计的实现,性能如何?
答复:会通过Action Filter将用户的请求主动上报到审计日志或平台,对于百万请求量,写入降采样,查询全量的情况下,性能损耗低于2%。
(四)vivo Elasticsearch集群应用实践
接下来是来自vivo的资深DBA刘石林老师分享vivo Elasticsearch集群应用实践。在大数据横行的今天,如何规模化运营Elasticsearch集群、提升数据管理者的幸福感,成为各个企业需要重点关注的问题。在实际业务运营中经常会遇到各种挑战,例如高并发读写资源开销过高、Elasticsearch本身存在的Bug以及各种业务使用不当导致的问题等。如果企业内没有很好的平台支撑,靠人肉管理,会给数据管理者带来很大的挑战。本次分享中,主要介绍了vivo使用Elasticsearch的经典场景,以及如何基于自主研发的ES管理平台规模化地运营ES集群。详细的分享内容请点击图片下方的链接。
vivo Elasticsearch集群应用实践(https://elasticsearch.cn/slides/287)
- 该主题问答环节:
问题1:这个可视化界面是用哪个工具?
答复:可视化界面是自主开发,产品经理参考了Cerebro的管理界面。
问题2:请问扩容的时候,会调整主分片数么?
答复:暂时没有考虑,我们扩容只扩容节点数量,主要原因是因为调整主分片数需要reindex,除非业务有需要可配合线下操作。
问题3:请问你们index生命周期管理是怎么做的,是用官方的ilm吗?你们对升级es版本怎么看?
答复:我们暂时没有使用官方的ilm相关模块,但是我们参考了他们的基本逻辑,由业务调用api接口实现索引生命周期管理。我们要求统一版本,非特殊情况 (bug问题导致业务问题不可正常使用) 不会给业务维护特殊版本号,我们当前使用版本都是内部测试后,满足大部分业务场景需求才会选择。
问题4:会有定期合并索引的操作吗?
答复:暂时没有这个方面需求,后续平台可能会集成。
问题5:一般集群控制多少分片数左右比较好?
答复:社区版本对分片数做了软限制,单节点不超过1000个分片,社区版本集群超过3万分片时元数据变更已非常缓慢(数秒甚至十几秒),社区已有团队对集群扩展性做了相关优化,可支持到百万级分片。可参考:腾讯Elasticsearch百万级分片扩展性优化。
(网址:https://www.bilibili.com/s/video/BV11Z4y1w71a)
圆满结束
疫情阻挡我们出行,但阻挡不了技术的演进,阻挡不了ES社区的发展,让我们下一期深圳Meetup再见!