- 《架构师》2016年6月
- InfoQ中文站
- 469字
- 2020-06-26 06:06:09
Ansible Scheduler
上述第三步的命令的批量发布使用了Ansible Scheduler来调度。但由于Ansible本身不提供HTTP接口,因此我们基于它的Python API进行了开发。
Scheduler本身是无状态的,可任意水平扩容,主要负责分发初始化命令,可控制并发度、步长等参数。每个ECS镜像都对应Ansible的一个role,在一台主机上执行的role我们称为Task,其中又包含很多Action。在每个Action开始和结束时,都会触发我们自定义的回调模块,异步将消息写入队列,最后存储到数据库中。DCP的界面上即可显示所有主机环境初始化的情况,包括执行了哪些模块、耗时和成功与否。(见图4)
图4
部署公共组件
除了线上应用,DCP中这整套基础设施构建的系统,也在为其他公共组件提供服务:
001 FROM weibo_plat_init:1.0 002 003 INCLUDE user.yml 004 INCLUDE config.yml 005 ROLE hongbao
在大规模扩容中,这些组件也是需要支持弹性伸缩的。以DNS为例,为避免解析请求跨机房,我们在阿里云上常规部署了两台DNS服务。同时由于所有扩容的ECS都是新建的,不存在DNS缓存,业务首次启动会有大量域名解析的请求,也需要保证DNS服务的高可用。这里我们使用了阿里云的内网SLB服务,作为VIP对DNS做负载均衡。两个SLB分别指向所有的DNS服务器,设置UDP转发,并且增加健康检查,便于摘除不可用节点。(见图5)
图5