一、行业es容器化&存储分离架构行业调研
1.1 行业es容器化调研概述
目前通过联系各个公司的同学&前同事、结合网上公开资料&官方云服务使用文档,共统计10家公司,基本覆盖头部互联网公司。
备注:由于绝大部分同学不属于elasticsearch研发部,故采用的咨询方式为查阅公司内部文档、查看申请es集群页面、咨询所在公司es运维同学,容器化方案实际使用的规模情况和一些技术实现具体细节无法获取,但均可以保证信息真实性。
以下为调研统计表:
公司名称 |
调研对象&调研方式 |
是否容器化 |
是否存储与计算分离 |
调研情况 |
阿里巴巴 |
咨询阿里系公司(优酷、蚂蚁金服同学)&阿里云对外公开文档 |
是 |
是 |
支持动态扩缩容,能够实现TB级别数据秒级数据搬迁。推测采用k8s+docker+分布式存储方案,作为目前国内最大的云服务提供商,在阿里云elasticsearch中官方使用文档明确弹性扩缩操作会触发集群重启,因此容器化方案存在一定的稳定性问题。 |
腾讯 |
咨询腾讯(广告部同学)&对外公开文档 |
是 |
是 |
确认使用容器化部属方案,使用存储分离架构。具体使用规模情况上不明确。 |
百度 |
咨询百度车联网部门同学 |
是 |
不确定 |
推测采用k8s+docker+分布式存储方案。具体细节不明确。 |
美团 |
咨询美团同学 |
是 |
是 |
使用容器化部属方案,支持分钟级别扩容。申请机器资源时,无虚机部属选项。存储方案可根据业务实际需求选择云存储或者本地存储。 |
字节跳动 |
咨询字节教育部门同学 |
是 |
否 |
区分业务场景: (1)查询qps 小于2000的中小业务,部属在容器上,部属方式为k8s+docker+local pv(目前没有做分布式存储)。 (2)qps高于2000部属于物理机上。 |
滴滴 |
咨询滴滴elasticsearch团队研发同学 |
否 |
否 |
确认使用物理机,没有使用容器化方案。 |
爱奇艺 |
咨询滴滴elasticsearch团队研发同学 |
否 |
否 |
基于虚机或者物理机部属。目前elasticsearch支持较薄弱,无专业团队运维答疑。倾向于购买腾讯云、阿里云的服务。 |
京东 |
京东物流同学&官方文档 |
是 |
是 |
使用京东云服务,在使用界面上支持分钟级扩缩容。在es社区分享的ppt上,其平台在2016年实现容器隔离,2020年实现存储和计算分离,底层存储采用ChubaoFS。具体使用规模情况未知。 |
网易云 |
网易数帆(网易云)对外公开文档 |
是 |
部分 |
根据公开文档,确认使用k8s+docker部属方式,目前存储计算分离的底层存储采用的京东的ChubaoFS,使用规模较小,100台服务器规模。 |
新东方 |
根据elasticsearch中文社区分享ppt |
是 |
是 |
上层编排采用k8s,存储根据具体的业务场景,采用了两种方式。 (1)存储与计算分离的分布式存储方案,底层存储采用ceph (2) 本地磁盘ssd。 |
1.2 行业对es容器化部属官方已公开文档信息详细说明介绍
1.2.1 阿里云
a.阿里云elasticsearch团队背书
这些行业用阿里云 Elasticsearch 弹性伸缩能力,将减少47%成本-阿里云开发者社区
b.阿里云es官方对外文档对动态扩缩容
如何弹性扩缩Elasticsearch集群的资源_检索分析服务 Elasticsearch版-阿里云帮助中心
c.阿里es中文社区分享
阿里云Elasticsearch大规模集群治理及内核优化实践 - 分享 - Elastic 中文社区
1.2.2 滴滴团队
linux - 7年沉淀之作--滴滴Logi日志服务套件 - 个人文章 - SegmentFault 思否
1.2.3 网易云
轻舟中间件_Elasticsearch_ Kubernetes -网易数帆
1.2.5 新东方
https://elasticsearch.cn/uploads/slides/20191210/92840cd7858a0a242bb4c40dc561c2ca.pdf
1.2.6 京东
https://elasticsearch.cn/uploads/slides/20200330/660daf4b40b8e801665f955d77e99f25.pdf
1.3 es官方对容器化部属方式的支持情况
es官网原文:基于 Kubernetes Operator 模式,我们的产品扩展了 Kubernetes 的编排功能,支持在 Kubernetes 上设置和管理 Elasticsearch 和 Kibana。在我们履行发展云端原生技术的承诺的过程中,我们持续在 Kubernetes(容器化架构的热门开源选择)之类的平台上推出我们的产品。
二、目前公司内部es使用情况调研
2.2 公司近期数据增长情况
略
三、elasticsearch容器化&存储与计算分离技术方案
3.1 为什么要容器化和存储计算分离?
资源浪费:
公司的elasticsearch集群服务,目前积累了大量的集群和业务,通过观察线上几百个集群的使用情况,发现中高配集群存在资源浪费的情况。表现为:
(1)业务为在申请资源时,为保证服务高性能&高可用,申请资源远高于实际使用情况,存在集群配置较高,但是实际使用出现,写入和查询量较低的情况。
(2)一些集群存在一天24h中,只有几个小时的水位能达到50%以上,其他时间段内仅维持在20%左右,甚至更低,这样就导致了较多的资源浪费。
容器化存在较多的优点
(1) 弹性伸缩帮助用户根据定时/定量等策略,自动触发资源auto scaling,可以在最大程度保证业务质量的前提下,尽可能地减少低峰期、低利用率索引的资源使用成本和人力运维负担。
(2)运维角度:快速部属、快速扩缩容、容易升级。
(3)资源损耗比起虚拟机来说,相对较低。
存储和计算分离架构带来的优势
如果采用秒级弹性的elasticsearch计算存储分离架构,从引擎角度,解决了弹性扩缩容的最大问题,数据搬迁效率。从当前集群上看,1TB的数据迁移耗时为小时级别,采用存储计算分离架构,扩容将达到秒级。主要是因为存储与计算分离架构使得一份数据能够被多个ECS计算节点共享,es的shard搬迁只是元数据的改动,无需进行网络拷贝和磁盘io操作。
3.2 容器化实现的难点与困难
服务发现
(1)通过sidecar容器从api server获得 svc port
(2)将物理机IP 传入sidecar 容器
(3)再将物理机ip和svc port 注册到 consul
持久化存储
(1)ceph fs / block (性能不足、不适 合大量小文件)
(2)host path (调度时不会考虑磁盘信息)
控制漂移
完全可控更新
3.3 容器编排的核心流程
3.4 阿里云存储与计算分离架构方案
以下信息来自于阿里云es中文社区技术分享,原文链接:
https://elasticsearch.cn/uploads/slides/20191210/f2d50ec44e1d161782edefb7cdc10f3c.pdf
3.5 采用存储与计算分离带来降低成本和提升性能的原理
1.数据更高的可靠性。
分布式存储系统已经对文件做了副本支持。
2.shard迁移速度更快
只需要更改shard分片的元数据信息,实现秒级迁移
3.降低运维成本,不再担心某个硬盘故障,或者某个机器负载不均衡。
4.提升整体磁盘利用率,并提升写入性能。
为了保证服务高可用,一般会为集群分配较为富余的资源,但是目前很多集群实际使用较少,导致磁盘整体利用率相对较低。io读写不均匀,部分节点的io压力很大,如果采用存储与计算分离,意味着某个集群突发的请求对IO影响可以忽略。
同时业务可以设置副本分片为0,从而降低了主副分片同步的压力,提升了写入性能。
5.可降低GC频率
大部分的存储系统对文件做了副本支持,业务层面可以将副本个数设置为0,可以减少segement挤占堆内存导致FullGC现象。
存在的问题
es是基于磁盘的搜索引擎,而不是全内存的。将其转接到分布式存储的主要困难是分布式存储的性能问题,搜索引擎在多个倒排链求交操作时候需要多次串行读盘,第n次读的结果决定了第N+1次读的位置,如果使用分布式存储,在预读方面的性能会出现下降的情况。
但是现在随着RDMA roce流行,网络存储和本地存储的差距已经越来越小。
3.6 使用esRally基准测试工具对比
使用k8s容器、docker和物理机对比测试结果汇总【数据来源于科大讯飞】
使用分布式存储Cepth对比本地磁盘(机械硬盘)【数据来源于科大讯飞】
结论:
(1)cepth比本地磁盘写吞吐性能高,中值吞吐量高出37.5%。
(2)cepth在写入处理速度上比本地磁盘快,在90th百分位上比本地磁盘快29.8%,相应地,写入延迟比本地磁盘低。
(3)在查询吞吐方面,Ceph与本地磁盘几乎相同
(4)Cepth在一般的查询处理比本地磁盘略快,而在大文件查询处理速度明显比本地磁盘快(10%以上),相应地,查询延迟也比本地磁盘低。
备注:由于该数据为使用机械硬盘进行测评结果,仅具备参考价值。从目前其他公司调研情况来看,只有少量公司采用了分布式存储方案。在阿里云提供的存储与计算分离的扩缩容方案中,涉及对es内核源码级的更改,存在一定技术难度。同时由于写入、查询性能强依赖于存储的稳定性,建议存储与计算分离架构方案是否线上大规模使用,慎重考虑。
3.6 es官方对存储与计算分离的建议
目前eck没有自己的存储机制,其可以与任何kubernates存储选项兼容。推荐通过配置es资源中的卷声明模板(VolumeClaimTemplates),使用持久化存储来配置。需要用户自己来评估存储介质的性能和稳定性。官网建议使用es的基准测试工具rally作为评估标准。
持久化存储卷可以分为两种类型:
(1)本地持久化卷。绑定到特定的主机上,并映射到文件系统中特定的目录中。一个pod只能在同一个主机上进行调度。如果主机一旦挂掉,则无法安排到其他主机上。在持久化卷被删除之前,节点将一直处于pengding状态。
(2)网络持久化卷。能够使得无论es实例在哪个主机上,如过主机出现故障或者需要更换,kubernetes会自动将其安排到其他主机上,过程只需要几秒钟,不需要人工干预。
Storage recommendations | Elastic Cloud on Kubernetes [master] | Elastic
四 、可行性分析
目前已经有较多的互联网公司实现容器化部属,其中elasticsearch技术研发能力较强的公司为:阿里巴巴、腾讯、京东。其在容器化方面已经得到较大规模应用,但在存储与计算分离架构上存在一定分歧。同时,在在es官方文档中,明确承诺在kubernetes之类的容器化架构平台上持续推出相应产品。
个人认为es容器化既有前人踩坑铺路,又有官方背书,是es未来部属和运维的潮流。es自带的监控维度较粗,在前公司运维时,经常出现服务抖动,却查询不到任何线索的情况。而当前平台已经对接了es集群100多项监控指标,所有指标基本已经表盘、图形化,基本已经实现对es集群的高精度监控,使得我们有底气去实现容器化。
从公司目前现状来说,占据存储最大比重的业务为日志型数据,采用存储和计算分离方案将减少运维压力、降低成本。
同时,我们可以从其他公司当前分布式存储方案上看出,es存储与计算分离的方式,强依赖于公司分布式存储服务的技术能力,在阿里云的解决方案中,分片迁移需要修改内核代码,更改元数据信息,存在一定的技术难度;并可能带来隔离性、存储可靠性、性能等问题。建议分阶段实现容器化部属方案:
(1)摸底阶段:从小demo入手,进行小规模测试,并将部属方式集成于kcc平台,并使用rally测试。
(2)试用阶段:a、从日志等非核心业务下手,进行试用,发现问题 b、核心业务使用既有部属方式,保证高可用和稳定性。
(3)迭代阶段:根据线上容器化出现的问题,进行迭代开发,沉淀技术经验,优化kcc平台部属方式。根据具体业务场景对扩缩容设置,进行优化。
(4)成熟阶段:历史数据迁移,公司大规模使用。
五、参考材料
【1】 阿里云Elaticsearch团队弹性扩缩容背书
这些行业用阿里云 Elasticsearch 弹性伸缩能力,将减少47%成本-阿里云开发者社区
【2】阿里云Elasticsearch大规模集群治理和内核优化实践
阿里云Elasticsearch大规模集群治理及内核优化实践 - 分享 - Elastic 中文社区
【3】es官方对k8s部属方案的支持情况&承诺
Elastic Cloud on Kubernetes | 部署和编排 Elasticsearch on Kubernetes
【4】阿里云Elasticsearch大规模集群治理以及内核优化实践
https://elasticsearch.cn/uploads/slides/20191210/f2d50ec44e1d161782edefb7cdc10f3c.pdf
【5】基于K8S的ES服务平台在头条的实践介绍
https://elasticsearch.cn/uploads/slides/20191121/1be0a57ed0378705dde7a8cbc7f94b08.pdf
【6】elasticsearch官网对es存储的建议
Storage recommendations | Elastic Cloud on Kubernetes [master] | Elastic
【7】京东使用存储与计算分离带来的优势
想实现存储与计算分离吗 -----京东ES+ChubaoFS是这样实现的 - Elastic 中文社区