内容简介:DockOne微信分享( 九十):猎豹移动基于CoreOS在AWS上的项目实践
【编者的话】本次分享,将介绍基于AWS的EC2服务如何设计和搭建适合自己的业务的架构方案是想全球多region部署,介绍模型案例:CoreOS 的使用技巧与运维经验,把一个进群当成一台机器管理心得。
1、为什么选择AWS和Docker
首先我先介绍一下猎豹移动的一些业务,如图, 我们在海外有着庞大的用户群体,接近16E下载量,月活用户4.94E,71%来自海外,战略合作伙伴主要以阿里,百度,腾讯,小米...
这么大的海外用户量我们是这么做业务部署和服务的呢?
首先在选择服务商的方面我们选择了实力最强的亚马逊aws作为我们的云服务商,我们海外几乎所有的服务都是架构在aws 的平台上面。
这给我们带来了什么好处呢,总结起来有3点:
1 便捷的全球化部署
因为我们的用户遍布全球,所以便捷的全球化部署是我们非常看重的,我们使用了aws全球9个地区的region,其中包括美国3个,欧洲1个,亚太地区3个,南美洲1个遍布全球
2 弹性的扩展
对于云服务,弹性的扩展是最为便捷的,可以在几分钟(而不是几小时或几天)内增加或减少服务器。可以同时管理一个、数百个,甚至数千个服务器实例。当然,因为这全是通过 Web 服务或 API 控制
3 成本的优化
而且无需前期的投资,持续的成本优惠与调整;提高了资源利用率,按需付费;无需出国,管理世界各地的服务器,节约人力成本。
介绍完我们基础平台的选择后,为了更好的自动化,集群化,我们开始接触容器技术,而且是如何在aws平台上实现容器化。
我们把容器的概念进行理解:给你的应用程序“打包”,能够执行一个“进程”,同时能把你执行的内容和其他“进程隔离”开来的东西,容器化有什么好处呢?
这些好处在所有网站上看到的东西,听完这个介绍,感觉有点空洞,还是不知道是什么,我们用到的一些package,我再所有的系统里面都可以运行这些进程,而且进程隔离开,为什么还要docker,这也是我们团队刚刚接触时遇到的困惑,除了 Linux 系统,最早提出容器化的VMware,microsoft都有这方面的尝试,只不过他们的容器是虚拟机,而互联网的发展需要一个轻量级的容器。
这个图是借鉴了Yahoo的架构,非常的可爱形象,比普通的架构图更加生动,我们猎豹有很多广告业务,商业的开发同学做的ADserver,也会有很多流式数据实时处理的系统,通过data highway汇聚到大数据处理系统,hadoop、spark计算,后端储存我们用的是aws-s3.如果要完成这套系统,基础架构,需要多少人力物力呢?可想而知,单单运维方面上百人的团队就这样建立起来了。
以往,我们一批机器只做一件事,比如100个adserver只做广告接口,另外100台机器只做广告检索,再有100台机器做数据传输处理,某个模块出问题去扩容或者处理某个模块,这是大家最常见的方法。这对架构的高可用设计是个很大学问,需要多机房冗余,多地部署等等。如果引入微服务的概念呢?
如左边图,一台机器上面只运行各自的模块和依赖,不同机器各司其职,出问题处理问题模块。而右边微服务的设计,我无所谓我的程序如何分布,每台host都可以部署多个模块混合复用,自定义哪些模块可以和哪些分配到同一台host,哪些模块不能和哪些模块分配到同一台host,一旦某个模块挂掉,调度编排 工具 可以帮助马上启动一个新的 docker 替代工作。扩容的时候不需要针对不通模块去部署和发布,只需要调整一下各个docker的数量即可。
2、为什么选择CoreOS部署我们的应用
下面我介绍一下我们线上稳定运行很久的一个rcv日志处理集群的容器化改造过程,下图是我们开始的架构图:
开始我们的架构很简单,前端接收,经过各个模块处理后存储,然后统一进行处理分析,报表延迟很长,而且经常出问题需要手动补数据.
后来我们对架构进行了容器话的改造,而且引入了数据流式处理,每个region部署一个收集集群,frontend的数据可以buffer一周的时间,并且可以故障后续传,通过kafka汇总到我们的中央region的nrt系统进行准实时的数据汇总和分析,报表延迟可以控制到5分钟以内,而且么个region的集群都可以像管理一台机器一样管理。
这套系统我们团队为他命名为Meissa,是猎户座最亮的一颗星,他底层搭建在CoreOS上,用coreos只带的etcd和fleet进行集群的服务发现和编排管理,程序使用docker进行打包,利用jenkins进行发布,images保存在自建的docker-registry里面供集群使用。
3、CoreOS在AWS平台上如何快速构建集群,并且进行管理
在aws上面开通一套CoreOS 的集群非常方便,只需要在aws的镜像仓库里面 选择合适的coreos版本,编写好user-data(Linux的cloud-init)传入正确的cloud-config即可,这个可以参考coreos的官网。这里说一下etcd token的使用,etcd的功能和zookeeper很相似,可以在私网自己通过ip定义leader的节点和数量,也可以通过官网进行token注册,比较方便。
这里举个例子:
一个集群都用这个配置文件(可以根据不同用途修改metadata的名字),开机后会自动发现集群并且注册到一起,如下图:
这个是集群列表,标注每个host的名字方便调度
这个是units列表,看这个@符号,后面有1234,4台机器上运行,之前服务端的同学写个while true 脚本或者使用supervisor去判断程序是否启动,挂了拉起来,而且不可以跨服务器去守护进程,fleet可以帮你在符合条件的units任意一台上面启动这个服务,可以跨服务器。
etcd的discovery key已经把各个leader节点信息记录到token的url里面,同步到各个节点,去个各个节点做服务注册和发现。
使用fleetctl可以随需求安排程序的启动,fleet相当于集群版systemd。
4、应用过程中遇到的问题与解决方案
fleet 配置文件编写的一些技巧,如何合理编排自己的服务
cmd entrypoint不建议使用,add和cp都一样,entypoint可以传参数,还是写到run里面entrypoint 后面写命令,“一个参数 空格 一个参数”,这样写的话转义就出问题了,这是docker的问题,用数组的方式[bash,-c];关闭进程用stop,不要直接kill进程,因为如果你写了个 shell 脚本启动你的程序,那么这个进程的pid=1为bash,kill掉的是bash,而不是你的容器程序, 或者使用exec,这样会把子进程替换父进程;docker的stop会有一个tw时间,默认应该是60s,如果你的程序关闭比较慢,比如kafka需要落磁盘,60秒不够怎么办,可以手动传入比较长的timeout时间;docker默认的ulimit是1024,有时候发现你的docker总是莫名重启,可以看看是不是ulimit用尽了。
Q&A
Q:没有用到flannel,网络实现是什么,未来对CoreOS的容器管理工具rkt的计划?
A:网络上我们直接使用的host的方式,容器主要是看中了ci和cd的便利好没有往高密度的场景设计的计划,rkt是个好东西,更有开源的感觉,看后期docker社区发展情况是否越来越封闭
Q:registry怎么ha的,是在容器还是vm
A:这个问题之前也是一直困扰着我们,我们用aws的elb做负载均衡,后端放2台ec2,镜像存到s3,缓存写在 redis 里,我们是使用官方的image,随时用随时上传和使用,挂了就再启动一个,不依赖长期有效的hub
Q:最近暴漏的安全问题需要内核升级才能解决,这正是coreos的优势、不必重启系统,猎豹是否在线上有这种经验?实际中coreos在升级内核时是否真那么方便?
A:这个是我们非常喜欢的一个特性,自动升级内核,做过运维的同学都知道,做一次内核升级是多么痛苦,我们最开始用的是stable766.4,现在都不用我们去升级就自动帮我们升级到8xx的stable版本了
Q:集群中etcd节点数目是多少,奇数个etcd节点的优势具体怎么体现的,以及etcd的代理节点在业务中的价值?
A:etcd很类似于zookeeper,leader节点必须是奇数个,我们一般是3个,最多5个,所有节点都会主动和leader节点通讯,leader节点可以运行在集群任何节点上,也可以通过API接口手动调整leader节点所在的底层服务器,很灵活,任何一台都可以选举成leader,不用部署任何额外配置,省心
Q:编排调度都是自己开发的系统吗,如何管理那么多的容器?
A:用的coreos自带的模块,etcd+fleet+systemd,很底层,登陆任何一台机器做操作就可以管理整个集群,就像管理一台机器一样,我们把日常发布等操作基本都用Jenkins代劳了
以上内容根据2016年10月25日晚微信群分享内容整理。分享人 齐海澎,猎豹移动高级运维工程师。负责猎豹移动商业广告产品与大数据相关产品的运维团队管理,作为猎豹移动运维部的管理团队成员,负责商业高高业务和大数据计算在aws服务上的稳定运行,并帮助公司开展容器技术的初步尝试 。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。
以上所述就是小编给大家介绍的《DockOne微信分享( 九十):猎豹移动基于CoreOS在AWS上的项目实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ARKit for iPhone and iPad
Wallace Wang / Apress / 2018-11-5 / USD 39.99
Explore how to use ARKit to create iOS apps and learn the basics of augmented reality while diving into ARKit specific topics. This book reveals how augmented reality allows you to view the screen on ......一起来看看 《Beginning ARKit for iPhone and iPad》 这本书的介绍吧!