行业elasticsearch容器化&存储分离调研报告

一、行业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版-阿里云帮助中心

  • 弹性扩缩操作会触发集群重启,集群变更后重启实际时长与集群规模、数据量及负载情况等有关系,建议在业务高峰来临前完成扩缩。
  • 如果集群索引存在副本分片且集群负载处于正常水平(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,在集群重启过程中可持续对外提供服务。
  • 如果集群负载过高且索引没有副本,同时在弹性扩缩过程中存在大量的写入或查询等情况,可能在弹性扩缩过程中业务会出现偶发的访问超时现象。建议在弹性扩缩操作前,在客户端访问机制中配置重试机制,以减小对业务的影响。

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容器化&存储分离调研报告_第1张图片

  如果采用秒级弹性的elasticsearch计算存储分离架构,从引擎角度,解决了弹性扩缩容的最大问题,数据搬迁效率。从当前集群上看,1TB的数据迁移耗时为小时级别,采用存储计算分离架构,扩容将达到秒级。主要是因为存储与计算分离架构使得一份数据能够被多个ECS计算节点共享,es的shard搬迁只是元数据的改动,无需进行网络拷贝和磁盘io操作。

3.2 容器化实现的难点与困难

  服务发现

      (1)通过sidecar容器从api server获得 svc port

      (2)将物理机IP 传入sidecar 容器

      (3)再将物理机ip和svc port 注册到 consul

行业elasticsearch容器化&存储分离调研报告_第2张图片

持久化存储

     (1)ceph fs / block (性能不足、不适 合大量小文件)

     (2)host path (调度时不会考虑磁盘信息)

控制漂移

行业elasticsearch容器化&存储分离调研报告_第3张图片

完全可控更新

3.3 容器编排的核心流程

行业elasticsearch容器化&存储分离调研报告_第4张图片

3.4 阿里云存储与计算分离架构方案

   以下信息来自于阿里云es中文社区技术分享,原文链接:

   https://elasticsearch.cn/uploads/slides/20191210/f2d50ec44e1d161782edefb7cdc10f3c.pdf

行业elasticsearch容器化&存储分离调研报告_第5张图片  

行业elasticsearch容器化&存储分离调研报告_第6张图片

行业elasticsearch容器化&存储分离调研报告_第7张图片

行业elasticsearch容器化&存储分离调研报告_第8张图片

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和物理机对比测试结果汇总【数据来源于科大讯飞】

行业elasticsearch容器化&存储分离调研报告_第9张图片

 使用分布式存储Cepth对比本地磁盘(机械硬盘)【数据来源于科大讯飞】

行业elasticsearch容器化&存储分离调研报告_第10张图片

  结论:

       (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 中文社区

你可能感兴趣的:(elasticsearch,docker,大数据)