内容简介: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上的项目实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- DockOne微信分享( 九十):猎豹移动基于CoreOS在AWS上的项目实践
- 谷歌下架 600 款广告欺诈 App,猎豹移动全部 45 款被封!猎豹移动回应了
- vue项目实践004~~~一篮子的实践技巧
- HBase实践 | 阿里云HBase数据安全实践
- Spark 实践:物化视图在 SparkSQL 中的实践
- Spark实践|物化视图在 SparkSQL 中的实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Node.js开发指南
郭家寶(BYVoid) / 人民邮电出版社 / 2012-7 / 45.00元
Node.js是一种方兴未艾的新技术,诞生于2009年。经过两年的快速变化,Node.js生态圈已经逐渐走向稳定。Node.js采用了以往类似语言和框架中非常罕见的技术,总结为关键词就是:非阻塞式控制流、异步I/O、单线程消息循环。不少开发者在入门时总要经历一个痛苦的思维转变过程,给学习带来巨大的障碍。 而本书的目的就是帮助读者扫清这些障碍,学会使用Node.js进行Web后端开发,同时掌握事件驱......一起来看看 《Node.js开发指南》 这本书的介绍吧!