作家
登录

去哪儿网基于Mesos和Docker构建私有云服务实践

作者: 来源: 2017-09-13 14:30:05 阅读 我要评论


本文深刻介绍了去哪儿网应用Mesos和Docker构建私有云办事的全过程,分享了大年夜无状况应用向有状况应用慢慢过度的经验与心得。

平台概览

2014年下半年阁下,去哪儿完成了有关构建私有云办事的技巧调研,并最终拍定了Docker/Mesos这一筹划。下图1展示了去哪儿数据平台的┞符体架构:

去哪儿网基于Mesos和Docker构建私有云办事的实践
图1:去哪儿数据平台的┞符体架构

该平台今朝已实现了如下多项功能:

  • 天天处理约340亿/25TB的数据;
  • 90%的数据在100ms内完成处理;
  • 最长3h/24h的数据回放;
  • 私有的Elasticsearch Cloud;
  • 主动化监控与报警。

第二个是Docker_Mesos_Image,这个设备告诉Mesos Slave,当前是运行在容器内的。在物理机情况下,Mesos Slave过程宕掉落重启,、就会根据executor过程/容器的名字做recovery动作。然则在容器内,宕机后executor全部收受接收了,重启容器,Slave认为是一个新情况,跳过覆盖动作并主动下发义务,所以义务有可能会发重。

为什么选择Docker/Mesos

今朝为止,这个数据平台可以说是公司全部流数据的重要进出口,包含私有的Elasticsearch Cloud和监控报警之类的数据。那么为什么选择Docker/Mesos?

选择Docker有两大年夜原因。第一个是打包:对于运维来讲,营业打完包之后,天天面对的是用脚本分发到机械上时所出现的各类问题。营业包是一个比较上层的话题,这里不做深刻的评论辩论,这里讲的“打包”指软件的Runtime层。如不雅用Docker的打包机制,把最轻易出现问题的Runtime包装成镜像并放在registry里,须要的时刻拿出来,那么全部平台最多只履行一个长途脚本就可以了,这是团队最看好的一个特点。第二个是运维:Docker撤消了依附限制,只要构建一个虚拟情况或一个Runtime的镜像,就可以直接拉取到办事器上并启动响应的法度榜样。此外Docker在清理上也较为简单,不须要推敲情况卸载不干净等问题。

以常见的计算框架来说,它们本质上仍然属于运行在其上的Job的Runtime。综合上述情况,团队选择针对Runtime去打包。

选择Mesos是因为它足够简单和稳定,并且拥有较成熟的调剂框架。Mesos的简单表如今,与Kubernetes比拟其所有功能都处于劣势,甚至会发明它本身都是不支撑办事的,用户须要进行二次开辟来知足实际请求,包含收集层。不过,这也正好是它的强项。Mesos本身供给了很多SDN接口,或者是有模块加载机制,可以做自定义修改,平台定制功能比较强。所以用Mesos的筹划,须要推敲团队是否可以Hold住全部开辟过程。

大年夜框架层面来看,Marathon可以支撑一部分经久运行的办事,Chronos则侧重于准时义务/批处理。

以下图2是Mesos的一个简单构造图:

去哪儿网基于Mesos和Docker构建私有云办事的实践
图2:Mesos构造

数据平台的最注目标架构如下图3所示:

去哪儿网基于Mesos和Docker构建私有云办事的实践
图3:平台目标

组件容器化与安排

容器监控指标与报警

组件的容器化分为JVM容器化和Mesos容器化。JVM容器化须要留意以下几方面:

潜在创建文件的设备都要留意

  1. java.io.tmpdir  
  2. -XX:HeapDumpPath  
  3. -Xloggc 

-Xloggc会记录GC的信息到制订的文件中。如今很少有直接用XLoggc设备的了(已经用MXBean方法替代了)。如不雅有比较老的法度榜样是经由过程-Xloggc打印GC日记的话,那么要额外挂载volume到容器内。

时区与编码

时区是另一个留意点。膳绫擎所列的三种不合的办法都可以达到目标,个中第一/三个可以写在Dockerfile里,也可以在docker run时经由过程–env传入。第二种只在docker run时经由过程volume方法挂载。别的,第三种额外设置了字符集编码,推荐应用此方法。

主动设置heap

  • 防止ergonomics乱算内存

这是Docker内部实现的问题。即使给Docker设置内存,容器内经由过程free敕令看到的内存和宿主机的内存是一样的。而JVM为了应用便利,会默认设置一小我机功能会根据当前机械的内存计算一个堆大年夜小,如不雅我们不主动设置JVM堆内存的话,很有可能计算出一个跨越 Memory Cgroup限制的内存,启动就宕掉落,所以须要留意在启动时就把内存设置好。

CMS收集器要调剂并行度

  1. -XX:ParallelGCThreads=cpus  
  2. -XX:ConcGCThreads=cpus/2 

CMS是常见的收集器,它设置并行度的时刻是取机械的核数来计算的。如不雅给容器分派2个CPU,JVM仍然按照宿主机的核数初始化这些线程数量,GC的收受吸见效力会降低。想规避这个问题有两点,第一点是挂载假的Proc文件体系,比如Lxcfs。第二种是应用类似Hyper的基于Hypervisor的容器。


  推荐阅读

  Gartner发布2017年云安全技术成熟曲线

云应用的快速增长赓续进步人们在云计算情况中对于数据、应用法度榜样和工作负载的兴趣。Gartner公司宣布的云安然技巧成熟曲线有助于安然专业人士懂得哪些技巧已经预备好应用于主流应用,而对于大年夜多>>>详细阅读


本文标题:去哪儿网基于Mesos和Docker构建私有云服务实践

地址:http://www.17bianji.com/lsqh/37375.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)