2018-08-14 10:20:40 来源:百度云
设计考量
在面临的需求中我们提到,需要在大规模的服务器上执行命令并且能够灵活控制。为了满足这样的需求,建立数据模型时,只有执行信息是不够的,还要有控制信息,如路由、并发度、暂停点等,两者组合在一起,构成了CCS系统中的数据模型。
控制信息
控制信息包括命令传递所需的“路由”信息和调度过程的控制信息,如下:
执行信息
执行信息是指命令到达目标机器后开始执行时所必需的信息,如下:
认证信息:标示执行者是谁的信息,用来确认执行者的合法性,如不合法则拒绝执行。
鉴权信息:标示执行者所持有的权限,如果权限不够也要拒绝执行。
命令信息:真正要在目标机执行的命令,也是数据模型这个包装盒中最有价值的信息。
除去控制信息和执行信息这两个关键信息外,还有一些辅助信息如任务类型、任务创建/结束时间、任务超时时间等也是数据模型实际应用中的必要信息,但并非关键,不再详述。
四级调度模型
设计考量
在调度模型设计上,考虑到百度云服务器的地域分布特点、任务调度与业务的强相关性、单机环境的复杂性以及传输过程的稳定性要求,我们将传输模型分为四层,自顶向下分别是统一接入层、分级调度层、机房汇聚层、代理执行层,分别负责全局业务接入、按业务等级的分级调度、机房内服务器的任务管理、单机层面的任务执行。同时为保障可用性,每一层均要保证足够的冗余度(通过无状态集群/多机热备实现)与数据容灾性(通过在每层设置缓存与持久层实现)。
各层介绍
图1分级调度层与机房汇聚层的Full-Mesh连接
图2机房汇聚层通过心跳与执行代理层通信
三级代理执行
设计考量
在单机执行方案的设计上,最重要的问题就是执行端的稳定性,万分之一发生率的问题,部署在几十万台服务器上后也会对业务造成严重影响。为了实现这样的超稳态,我们设计了如图3所示的单机执行架构,将最重要的命令执行逻辑从CCS-Agent中分离出来,组成独立的通用执行层,在CCS-Agent中只保留认证、鉴权、备份、命令组装这些非执行逻辑。同时为了保证通用执行层各用户进程间的异常隔离,我们又将执行层分为执行代理进程、执行端进程、用户进程三部分,每一个执行端进程与一个用户进程对应,负责用户进程的启停控制与结果收集。
图3执行代理层
详细介绍
异常处理
在系统运行过程中,免不了会发生各种问题,此处我们将设计与实践中遇到的一些问题以及相应解决方案拿出来与大家一起探讨。
容量不足
自CCS系统上线以来,由容量问题引起的系统异常是最多的,当前的CCS系统特性有很多都是从以前的经验与教训中总结提炼出的,最突出的就是统一接入层的加入和分级调度理念的引入。
统一接入层除了给用户提供一致的体验外,更重要的一层意义是统一分级Quota与Block,通过设置分级流量配额和阈值,可以给不同用户不同的访问配额,在必要时还可以暂停某个用户的任务下发,避免CCS系统后端因突发流量被拖垮,进而影响到全部用户的使用。
如果说统一接入层的加入消除了突发任务的影响,那么分级调度理念的引入则保障了重要任务不受影响。未引入分级调度之前,不同重要等级的任务混合在一起调度,曾经发生过因某一任务数据结构异常引起整个调度节点挂死的惨案。在这之后,通过对调度节点分级,对任务分级并将任务从统一接入层分级导流的方式,解决了重要任务得不到保障的问题。
网络抖动
网络抖动对CCS系统最直接的影响就是丢消息。在任务调度过程中,单纯的Client端拉取执行进度消息与Server端主动推送执行进度消息都有各自的弊端,前者可靠性高但时延不好控制,后者时延低但稳定性不足。为了保障CCS系统的高可用性,在通信模型的层间采用推拉结合的方式,Client端拉取信息时通过降低拉取频率降低性能消耗,此时的时延上升由Server端主动推送来弥补。
单机执行异常
在统一执行代理没有诞生的史前时代,命令单机执行过程中我们遇到过数不清的异常,典型的第三方软件Bug型(如Python Bug导致的程序Hang住)、资源耗尽型(操作系统PID耗尽导致的新命令无法执行)、操作系统Bug型(如内核Bug导致的服务器突然重启)以及不可抗力型(如电力故障导致的批量服务器断电等情况)等。
为了保证异常不丢任务、异常快速恢复,我们在设计中主要遵循了以下两点:
遵循以上原则设计和实现的统一执行层,部署在百度内部的所有服务器上,在长时间的运行中体现出了极高的稳定性。
总 结
通过构建CCS系统,我们解决了命令在海量服务器上规模化执行的问题,目前已在百度内部和百度云上广泛使用,并承担了百度各产品和百度云的大多数变更落地执行操作。如果你对本系统感兴趣,想应用在自己公司的生产环境中,可以给我们留言,百度云智能运维团队竭诚为您服务。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。