蚂蚁集团配置即代码的规模化实践之路
如果无法正常显示,请先停止浏览器的去广告插件。
1. 演讲人:何子波
2. 目录
01 浅谈配置管理 02 配置即代码
03 蚂蚁落地实践 04 总结与展望
3.
4. 浅谈配置管理
5. 分布式配置中心
传统的配置管理
✓ Kubernetes YAML Strikes
6. ➢ 配置格式五花八门,YAML、配置领域专用语
言(DSL)、通用编程语言(GPL)
➢ 各种配置工具层出不穷,热闹非凡,Helm、
Kustomize 仍然最流行
7. 配置即代码
8. Prodspec and Annealing
Borg接入三件套:BCL/borgcfg/WebConsole
9. ➢纯开源技术栈,工程化水位低
平台研发
平台SRE
业务研发
业务SRE
➢无规划化流程,缺少技术风险防控
➢低协同性,大量文件拷贝
开发集群
测试集群
生产集群
➢运维平台功能透明度不足,大量黑盒代码逻辑
➢运维平台高度定制化灵活性不足,无法满足应用个性化运维需求
➢资源瓶颈,无法复用和发挥 SRE 沉淀的运维经验
10. 陷阱 1:没有把配置作为一种编程语言
如果你不是为之专门设计一种语言,那么最终用到的“语
言”就不太可能是一种好语言。尽管配置语言描述的是数
据而不是行为,但它们仍然具有编程语言的其他特征。
陷阱 2:设计特殊的语言功能
特殊的语言比正式设计的等效语言更复杂,并且通常具
有低效的表达能力。与其祈祷配置系统不会复杂到需要
一定的编程结构,不如在初始阶段就考虑到这些需求。
陷阱 3:使用现有的通用脚本语言 e.g. Python
使用通用脚本语言的实现方式往往是重量级的,并且/或
则需要使用侵入式沙盒来确保密闭性。由于通用语言可
以访问本地系统,处于安全考虑,可能还是需要沙盒。
11. Polyrepo(多仓库)
Monorepo(单体仓库)
优势 优势
➢ 配置跟着业务代码仓库走,开发者不需要感 ➢ 易于规范代码,中心化流水线更容易把控代码质量和风
知额外的配置仓库,认知成本低
格,同时依赖管理与升级更加简单
➢ 代码量和复杂性可控,不用担心可扩展问题 ➢ 利与 SRE 进行批量配置变更与重构,且易于代码重用
➢ 利于权限控制,权限分配粒度可以做非常细 ➢ 利于构建中心化的配置自动化层,便于上游即成
劣势 劣势
➢ 难以建立统一的代码规范,平台团队缺少约 ➢ 开发者需要感知额外的配置仓库,有一定的学习成本
束力
➢ 依赖管理与升级非常复杂,不利于 SRE 进
行批量的配置变更
➢ 难以实现细粒度的权限控制,并且随着代码文件、数量
越来越多,复杂性会越来越高,可能存在可扩展性问题
12. Preview
Coding
Platform build
Modules
Developer
choose Modules
Validation
Deploy
Resource
Live Diff
Pre-Apply
Apply
Post-Apply
13. 高性能
➢ LLVM 优化器
➢ Native + WASM Target
➢ 代码索引、增量编译
稳定
➢ 强不可变性
➢ 静态类型系统
➢ 面向约束
工程化
➢ 多语言 SDK
➢ 内置函数+系统库
➢ YAML/JSON 亲和
➢ 包管理工具
➢ Plugin
14. KCL HCL CUE
通过 KCL Schema 进行建模,通过语
言级别的工程和部分面向对象特性,可
以实现较高的模型抽象 通过 Terraform Go Provider Schema
定义,在用户界面不直接感知,此外
编写复杂的 object 和必选/可选字段
定义时用户界面较为繁琐 通过 Struct 进行建模,无继承等特性,
当模型定义之间无冲突时可以实现较高
的抽象。由于 CUE 在运行时进行约束
检查,在大规模建模场景可能存在性能
瓶颈
约束
能力 更丰富的 check 声明式约束语法,编写
更加容易,对于配置字段组合约束编写
更加简单(比 CUE 多了 if guard 组合
约束,all/any/map 等集合约束编写更
容易) 通过 Variable 的 condition 字段对动
态参数进行约束,Sentinel/Rego 等
策略语言完成,语言本身的完整能力
不能自闭环,且实现方式不统一 CUE 将类型和值合并到一个概念中,
通过各种语法简化了约束的编写,比如
不需要泛型和枚举,求和类型和空值合
并都是一回事
扩展性 KCL 可以自定义配置分块编写方式和多
种合并策略,KCL 同时支持幂等和非幂
等的合并策略,可以满足复杂的多租户、
多环境配置场景需求 Terraform HCL 通过分文件进行
Override, 模式比较固定,能力受限 支持语言内部配置合并,CUE 的配置
合并是完全幂等的,对于满足复杂的多
租户、多环境配置场景的覆盖需求可能
无法满足
复杂的结构定义、循环、条件约束场景 编写复杂的对象定义和必选/可选字段
定义时用户界面较为繁琐 对于复杂的循环、条件约束场景编写复
杂,对于需要进行配置精确修改的编写
场景较为繁琐
建模
能力
语言化 编写简单
编写能力
15. ➢ 面向开发者的平台界面,屏蔽底层
复杂性,降低开发者认知
➢ 覆盖应用全生命周期,一份配置即
可完整描述应用
16. Konfig 配置大库
Konfig
models
schema
AppConfiguration ➢ Workload 工作负载
Component ➢ Accessories 配件
➢ Topology 部署拓扑
➢ …
……
docs
…
base.k
base
1
2
可信原生
1 中间件
2 paas
3 …
…
rbac.k
…
prod
cloud mesh
dev
…
…
project.yaml
pilot main.k
galley rbac.k
… topology.k
stack.yaml
Git
➢ 单一大库收拢蚂蚁所有应用交付配置
➢ 主干开发,分支发布
➢ 环境维度权限控制、对维度 CI 配套
17. ➢ Kusion Module 是对底层基础设施服务、发布运
维等平台能力的封装抽象,定义遵循单一职责原
(应用研发)
Kusion Module
上传、注册
则,而非抽象整个云服务
(SRE、平台研发)
OCI 制品仓库
➢ Kusion Module 由两部分组成:面向应用开发者
拉取
的基于 KCL 的 Schema 定义,以及基于通用编程
Go 插件
GRPC 调用
语言的 Generator 程序,负责实现对应的配置渲
染、生成逻辑
应用配置
(AppConfiguration)
➢ Kusion Module 的分发依赖 OCI 制品仓库,
Kusion Engine 访问 OCI 中心拉取对应的 Kusion
Module 制品,并以 Go 插件形式调用
环境维度基线
Kusion 引擎
生成
统一 Spec
(SSOT)
18. Kusion 引擎
Operations
Init
Preview
Apply
Destory
…
Operation Engine
Dep
Analysis
DAG
Res Health
Check
State
3-Way
Merge/Diff
RW
Runtimes
Apply
K8s Resources
Kubernetes
Runtime
Get
Delete
Watch
TF Resources X Resources
Terraform
Runtime Third Party
Runtime
配套工具能力支持
Engine: 提供终端命令依赖的资源管理、DAG
编排、三路对比等核心功能
Filesystem
Database
Interfaces
Kusion: 面向开发者的云原生接入工具,提供
OSS
Runtimes: 抽象统一的基础设施接入层,可
扩展方式实现异构基础设施一致交互
State: 真实世界资源在引擎中的映射,Kusion
管理基础架构的必要数据
Kubernetes
Clusters
Clouds
On Perm
Infra
19. 蚂蚁落地实践
20. ➢ 风险左移
➢ 变更预览
➢ 单一事实来源
研发
应用
代码变更
评审
业务代码仓库
业务代码 CI 阶段
代码扫描
编译构建
配置自动化服务层
SRE
配置
代码变更
Konfig 大库
影响面
分析
拉取
推送
镜像中心
Provider/M
odule 库
大库 CI 阶段
评审
➢ 交付即运维
➢ 技术风险水位
测试
拉取
CD 阶段
代码合并
变更预览
变更管控
配置飘逸检查
可视化
Kusion 引擎
生效
配置生效
Watch
21. 申请应用
编译构建
研
发
态
应用研发
镜像仓库
修改配置
拉取稳定版本
拉取镜像
应用配置
入驻大库
配置生效
部署验证
验收不通过
拉取
交付物 私有云
OCI 仓库
构建
交付包 配置管理
交付包
分发
交
付
态
配置驱动
生效
质量验收
结束
部
署
态
验收通过
应用封版
22. 100+ 3000+
Kusion Modules 业务应用
1500+ 470000+ 1200+/天 200M+
蚂蚁开发者 Konfig 大库提交 CI 流水线 KCL Code
23. 总结与展望
24. 透过现象看本质,不同产品、工具解决问题的思路
本质是一样的,都面临根本性挑战
25. 挑战一:灵活性与简单性之间的矛盾
挑战二:配置代码独家驱动导致的不对称
26. 如果你计划实施平台工程战略,请务必确保你的
平台支持动态配置管理
27. Developer
Control
Plane
Kusion Developer Portal
Copilot
Backstage Plugin
Version Control Systems
IDE
(KCL Tools)
Kusion Models
Resources
CI/CD
Integration
& Delivery
Monitoring
& Logging
Stability
&
Security
& Identity
Custom
Portal
Kusion K8s Operator
Observability
Kusion
Platform Orchestrator
Kusion Explorer
Search, Diagnosis, Insight, Intelligence
Secrets
Trust Tunnel
Identity
50+ Kusion Providers
28. • Website
• https://kusionstack.io/
• Github
• https://github.com/KusionStack
• https://github.com/kcl-lang
• Slack
• https://kusionstack.slack.com
• Twitter
• @KusionStack
29.
30. THANKS
大模型正在重新定义软件
Large Language Model Is Redefining
The Software