通用集群发布设计

核心概念

1、服务:我们把相同程序(二进制)产生的进程集合叫做服务,是一个比较大的概念;
2、模板:发布用的通用配置,包括:运行目录、包构建信息、目标目录、前置命令、停止命令、启动命令、后置命令、并发度、超时时间等等;
3、集群:就是普通集群的概念,比如 etcd 集群、ES 集群、pxc 集群等;
4、实例:集群中的一个进程;
5、机房:机器所属的机房;
6、分组:包含若干个实例,用于分批发布;
7、KV:Key-Value 对,用于渲染配置文件;
8、配置:特指 ansible yml 文件,用于配置环境,包括创建目录、渲染配置文件到目标目录等。

关联关系

1、一个服务的程序可以发布出 N 个集群;
2、服务的模板应用于服务关联的所有集群;
3、一个服务可以定义若干个 KV 和配置,并被应用于所有集群的所有实例;
4、对于每个集群,可以自定义 KV 和配置,优先级高于服务级别的 KV 和配置;
5、对于每个实例,可以自定义 KV 和配置,优先级高于集群级别的 KV 和配置;
6、对于每个实例,可以定义分组,比如 0、1、2;
7、发布时一个分组发布完成后,会暂停;
8、机房是用于控制并发度的:同时发布的机房数量;
9、关于并发度,发布一个服务,服务对应多个集群,集群对应多个实例,所以支持:
1)、集群间并发度:同时发布几个集群;
2)、对于一个集群,一个一个分组发,串行;
3)、机房间并发度:对于一个分组,同时发布几个机房(中的实例),如果并发度是 1,就一个机房一个机房发;
4)、服务器并发度:对于一个分组里每个机房里的机器设置的并发度。

其他

1、模板里面有启动命令,但是每个集群的进程名不能一样,这个问题怎么解决?
模板支持使用 {{ process_name }} 这种语法,启动前先渲染成真正的命令。
process_name 则可以在集群 KV 中定义。