配置中⼼,让微服务更『智能』
宋顺
携程框架架构研发部技术专家
携程框架架构研发部技术专家
2016年初加⼊携程,负责中间件产品的研发⼯作
开源配置中⼼Apollo主要作者
/ctripcorp/apollo
毕业于复旦⼤学软件⼯程系,曾就职于⼤众点评,
担任后台系统技术负责⼈
1. 为什么需要配置中⼼?
2. 配置中⼼的⼀般模样
3. 如何让微服务更『智能』?
4. 配置中⼼的最佳实践
1. 为什么需要配置中⼼?
2. 配置中⼼的⼀般模样
3. 如何让微服务更『智能』?
4. 配置中⼼的最佳实践
配置即『控制』
程序的发布其实和卫星的发射有⼀些相似之处
卫星发射升天后
• 处于⾃主驾驶状态,按照预设的轨道运⾏
• 间歇可收到地⾯的『控制』信号对运⾏姿态进⾏调整
程序发布到⽣产环境后
• 按照预设的逻辑运⾏
• 通过调整配置参数来动态调整程序的⾏为
• 这些配置参数就代表着我们对程序的『控制』信号
图⽚来源:/space/a7194/how-it-works-nasas-experimental-laser-communication-system/
配置需要治理
权限控制、审计⽇志
灰度发布、配置回滚
不同环境、集群管理
微服务的复杂性
单体应⽤时代
• 应⽤数量少
• 配置简单
• 运维可以登机器修改配置⽂件
微服务时代
• 应⽤数量多
• 配置数量也急剧增⻓
• ⼈⼯登机器修改不仅效率低,还容易出错
图⽚来源:/blog/introduction-to-microservices/
需要⼀个统⼀的配置中⼼来管理微服务的配置!
1. 为什么需要配置中⼼?
2. 配置中⼼的⼀般模样
3. 如何让微服务更『智能』?
4. 配置中⼼的最佳实践
1. 为什么需要配置中⼼?
2. 配置中⼼的⼀般模样(以开源配置中⼼Apollo为例)
3. 如何让微服务更『智能』?
4. 配置中⼼的最佳实践
治理能⼒
01 统⼀管理不同环境、不同集群的配置
⽀持灰度发布 02
03 ⽀持已发布的配置回滚
完善的权限管理、操作审计⽇志 04
可⽤性
配置即『控制』
• 所以在⼀定程度上,配置中⼼已经成为了微服务的⼤脑
• 作为⼤脑,可⽤性要求显然是⾮常⾼的
Apollo at a glance
服务端⾼可⽤
客户端⾼可⽤
可⽤性场景举例
实时性
配置即『控制』,所以我们希望我们的控制指令能迅速、准确地传达到应⽤程序
图⽚来源:/toysoxo-shipping-delivery-informaton/
配置发布的过程
发送ReleaseMessage的实现⽅式
1. 为什么需要配置中⼼?
2. 配置中⼼的⼀般模样
3. 如何让微服务更『智能』?
4. 配置中⼼的最佳实践
开关
发布开关
• 发布开关⼀般⽤于发布过程中,⽐如:
1. 有些新功能依赖于其它系统的新接⼝,⽽其它系统的发布周期未必和⾃⼰的系统⼀致,
可以加个发布开关,默认把该功能关闭,等依赖系统上线后再打开。
2. 有些新功能有较⼤⻛险,可以加个发布开关,上线后⼀旦有问题可以迅速关闭
• 需要注意的是,发布开关应该是短暂存在的(1-2周),⼀旦功能稳定后需要及时清除开关代
码。
实验开关
• A/B测试
• 针对特定⽤户应⽤新的推荐算法
• 针对特定百分⽐的⽤户使⽤新的下单流程
• 功能验证
• 有些重⼤功能已经对外宣称在某年某⽇发布
• 可以事先发到⽣产环境,只对内部⽤户打开,测试没问题后按时对