你好,我是王潇俊。我今天分享的主题是:发布系统的核心架构和功能设计。
我在分享《发布系统一定要注意用户体验》这个主题时,介绍了从用户体验的角度出发,设计一套发布系统的设计理念,以及具体实现。但是,用户体验设计得再好,后端系统无法支持,也就如同巧妇难为无米之炊。 截止到目前,携程一共有 7000 多个应用,平均每周生产发布 8000 多次,而测试环境的发布平均每周要 40000 多次,如果发布系统没有一个清晰的架构设计,完成这样艰巨的任务是难以想象的。
所以,今天我就从核心架构和功能设计的角度,和你聊聊如何设计一套发布系统。
发布系统架构
作为整个持续交付体系中极为重要的一个环节,应用的发布是提升交付效率的关键。高效的发布系统架构应该是清晰的、健壮的、低耦合的,从而达到在最糟糕的情况下也能运作的目的。
携程在发布系统这件事上也不是一蹴而就,在经历了各种尝试和努力后,最终设计出了一套分布式、高可用、易扩展的发布系统,其系统架构如图 1 所示。
图 1 携程发布系统的系统架构
Roll Engine,即发布引擎,主要负责创建发布批次,按批次粒度实施部署策略,通过异步方式调用 Salt Master 服务,再分发到各个 Agent 节点上执行部署任务。真正的单机部署脚本会根据不同的应用或机型进行分发和定制。而 Controller ,则作为接收外部指令和读写数据的控制器。当然,对于一些对外的通知事务,发布系统会采用消息机制向外广播。