背景
在《首次分享!滴滴国际化出行的建站实践经验》中详细介绍了机房建设提效的解决思路:
1. 梳理提效:建设应用模型,标准化描述各业务模块与依赖资源、运维设施、平台配置的关联关系,并实现应用信息的全生命周期管理;
2. 交付提效:基于标准化的应用描述,建设自动化的交付框架,实现一站式应用交付;
3. 改造提效:收敛业务模块中与环境关联的配置与逻辑,并进行标准化管理,与交付能力打通后实现交付过程代码 0 改造;
一言以蔽之:建设以应用为中心的自动化交付框架。
在《深度拆解滴滴国际化建站提效利器:环境差异配置管理》中详细介绍了改造提效中应用环境差异托管的方案,将环境信息与业务逻辑进行了拆分管理,并对环境信息进行了标准化,为环境信息自动化生成打下了坚实的基础。
下面我们深入剖析下,应用建模、交付框架的建设过程,并通过适配CAC配置管理方案生成环境配置信息,实现应用自动化交付的。
目标分析
应用交付的整体目标为建立一个描述应用所有工作负载的标准化的管理模型,进而实现在混合云环境中标准化和高效率的应用交付。
应用模型
1. 关注点分离
在国际化业务实践中,基础设施、应用日常迭代以及应用的日常运维是由不同团队维护的,由于各个团队的关注点不同,应用模型需要区分这些不同的角色。基础设施团队,主要由基础平台工程师完成,他们具备丰富的基础设施经验,负责维护稳定可靠的、可被复用的基础设施功能。开发团队,业务应用的开发者,日常根据业务需求对业务逻辑进行开发迭代,并选择合适的基础平台提供的功能与代码集成,不需要关注基础设施细节,快速、轻松构建可信赖的应用。运维人员,关注应用部署环境中的运维能力,保障服务的稳定性。
2. 平台无关、高可扩展
在国际化业务中,一个应用要整体运转起来,需要关注它的工作负载(弹性云计算资源)、存储资源(MySQL、Redis等)、中间件(Apollo、MQ等)以及运维特征(日志、报警)等,应用之间的的依赖是多种多样,存在较大差异的,例如有的应用依赖MySQL,有的应用依赖Redis,应用建模需要高可扩展的支持依赖的自由组合。另外,国际化业务全球拓展,在自建机房、AWS、GCP等混合云环境进行部署,应用建模需要与基础设施供应商实现解耦,应用描述支持跨平台。
3. 支持应用快速接入
通过应用模型描述一个完整的应用,需要梳理应用关联的所有依赖,目前国际化应用依赖的弹性云计算资源和运维特征通过服务树进行了关联,存储资源和中间件与应用无直接的关联关系,例如应用依赖存储资源信息在业务代码中,需要通过人工梳理进行管理。我们需要对资源的申请、下线等关系变更进行管控,长期维护他们的关联关系,为应用与关联的依赖提供统一的观测视角。另外需要为存量应用提供高效的自动化工具,探测发现应用关联的依赖信息。
交付框架
1. 交付流程自动化
在之前历史建站过程中,每个应用交付涉及的依赖多,依赖交付还存在一定的先后顺序,甚至是部署数据依赖。比如,差异配置托管依赖存储资源的创建,并需要收集存储资源的链接信息,生成新机房配置文件。交付框架需要覆盖所有依赖类型的自动化交付流程,并对它们的控制逻辑进行统一的编排,并提供数据向下传递的通道,保证它们交付的顺序和结果符合预期。
2. 交付能力高可扩展集成
国际化业务依赖的计算资源、存储资源、中间件、运维特征等有几十种,每一个均由不同的团队维护,并通过白屏化管控平台提供了丰富的运维能力。交付框架需要提供对基础平台技术架构影响最小,对业务使用体验基本无损,迁移过程基本透明的低成本、高扩展接入方式。其次,国际化业务需要在多云环境中进行部署,需要屏蔽底层基础设施的差异,保证对应用是无感知的。
解决思路&挑战
针对以上业务目标,以及国际化业务架构的现状,我们得出如下解决思路:
建设符合滴滴业务现状的应用描述规范,并在国际化业务中落地实践。
1. 应用描述规范化:对国际化应用依赖的所有计算资源、存储资源、运维特征进行抽象,并建设标准配置文件描述应用与依赖之间的关系,提供应用所有工作负载的观测视角。
2. 应用依赖关联:对国际化应用依赖所有资源的生命周期进行管理,保证应用与依赖关联关系的有效性。其次,提供导入工具,支持对存量服务依赖的所有资源信息进行探测发现。
3. 应用描述管理:定期对应用所有依赖的信息进行同步,保证应用自描述配置的时效性。并对应用描述信息的发布版本进行管理,方便溯源和回滚。
核心技术挑战
1. 应用描述模板,除了需要兼容可变参数的依赖资源,还需要考虑在交付时可被解析识别。
2. 对于新增资源依赖可以方便的进行管控,重点需要考虑存量服务资源依赖的关联,尤其是不在业务代码中的游离资源。
3. 应用描述要感知各个资源依赖的运维配置的变化,保证高度的时效性和参考价值。