搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景...
TRANSCRIPT
搜狗配置中心架构演化n实践
郭理勇 搜狗
关于我
郭理勇
20&2年加入搜狗
s要关注大规模分布式系统架构、海量数据存
储、微服务和自动化运维体系等
搜狗商o平台研发部 资深高级工程师/技术经理
配置中心概述
资源依赖模型
配置中心架构实践
配置中心应用案例
总结&对比
微服务l的配置中心
实施微服务的基础实施
微服务
配置中心
服务网关
监控中心
日志中心
服务注册/发现/90 RP1(AOrPMZ/NRP1)
安全 限流 容错
配置中心已成r微服务架构标配
配置是}uj
配置实际k代表应用程序的行r调整能力
应用或参数配置
线程池、连接池大小
开关、密钥、路径配置
日志级别、超时时间
dd
依赖资源
2HZHIHsL/:VUNV20
8HMRH/DVVRLLpLr
RLPKs/:LTJHJOL
dd
大规模分布式系统配置管理挑战
配置管理 Ø 多环境/多版本并行g管理混x Ø 环境m统一hhosts配置泛滥 Ø 配置安全性
配置变更 Ø 变更频繁
• 数据库切换 • 基础资源迁移(Redis等)
Ø 变更时效性 • 无法动态热加载 • 应用重启噩梦
资源依赖 Ø 资源依赖关系m易管理 Ø 扩缩容/机器迁移等
搜狗配置中心背景
解决s要问题 Ø 分布式系统配置文件管理 Ø 配置实时变更及热加载 Ø 资源依赖关系管理
成熟o务线如何接入配置中心
Ø 配置中心侵入性、应用兼容性 Ø 接入的便捷性、易用性 Ø API接口的扩展性
搜狗产品矩阵
商o平台
信息流广告
搜索广告
品牌广告
代理商 广告s
技术体系
1R:
广告平台
物料搜索
审核平台
大数据平台
基础架构
4VSHUN
1++
7HvHSJrPpZ
7HvH
P_ZOVU
阶段进展
&00+
接入搜狗商o平台o务线k百p核心o务系统使用g支持容器/非容器配置管理
多语言
支持QHvH/J++/sOLSS等 支持]Hr包/QHr包/rpT包等各类应用
&s
支持变更推送时延.&s 实现秒级资源自动切换
资源依赖模型
配置中心概述
配置中心架构实践
配置中心应用案例
总结&对比
资源依赖模型
配置类型
Ø 资源配置h涉及外部资源引用的配置g程序运行过程中可能变化i Ø 应用配置h配置文件中去除资源配置的部分
db.properties datasource.account.driverClassName=com.mysql.jdbc.Driverdatasource.account.username=accountdatasource.account.password=xxxxxxdatasource.account.maxPoolSize=50datasource.account.minPoolSize=20datasource.account.initialPoolSize=20datasource.account.idleConnectionTestPeriod=60datasource.account.maxIdleTime=120datasource.account=jdbc:mysql://account.mysql:3306/account?useUnicode=true&characterEncoding=utf-8
资源依赖模型
配置
资源
开发模型
资源模型
资源依赖模型可以解决的问题 • 一p应用依赖y多少资源j • 一p资源被多少应用引用j • 资源变更对哪{应用有影响j • 控制资源变更在多p应用一致性j • dd
资源通配符
资源依赖模型
域名类资源 数据库类资源 基础类资源
示例
Before:host=log.kafka:2181After:host=${resource:[/resource/log.kafka@address]}:${resource:[/resource/log.kafka@port]}
${type:[/prefix/identifier@suffix]}
资源类型
格 式
资源依赖模型
全局 资源依赖视图
配置中心架构实践
配置中心概述
资源依赖模型
配置中心应用案例
总结&对比
搜狗配置中心ealkaidf整体架构
配置中心
配置中心/PI
配置存储 配置管理 版本管理
变更通知 资源同步 资源依赖
1:20
客 户 端
配置拉取 缓存
配置备份 容灾
S28
配置监听 加载
订阅
发布
PUSH
PULL 附 加 组 件
配 置 管 理 平 台
消息通知
权限管理
配置导入
依赖视图
DVVRLLpLr :_SQ9
搜狗配置中心架构
配置获取
配置获取h配置文件直接覆盖
适合应用hWeb类应用
优点h应用侵入性低
缺点h灵活性m足
配置获取hPlaceHolder替换
适合应用hjar包类应用
优点h实现简单g侵入性中等
缺点h仅支持KV类配置g应用
场景相对有限
配置获取h配置API
适合应用hC++/Python/Shell等
优点h使用方式(annotation、
XML等)和扩展性 灵活
缺点h对应用侵入性较大
Ø API安全性 • IP隔离e仅限定该应用l机器拉取配置f • SOA使用者权限控制
• HTTP header鉴权等
搜狗配置中心架构– API设计
配置中心/PI
配置类/PI
资源类/PI
应用/版本/灰度
配置文件/配置项
域名/端口解析
资源依赖关系
API接口hRestful/RPC
返回形式hJSON/XML/ini等
搜狗配置中心架构
服务端高可用 Ø 负载均衡 Ø 水平扩展 Ø FailOver Ø 容灾工具
配置中心1SPLUZ
配置中心实例& 配置中心实例2 配置中心实例( 配置中心实例)
:_SQ9
失败重试
容灾导出工具
无状态接口
搜狗配置中心架构
客户端高可用 Ø 配置备份/缓存 Ø 高可用容灾方案
应用启动
模式选择
配置比对
继续启动
Fail
Fail
网络模式
拉取全量配置
备份配置
容灾模式
读取容灾配置
读取备份配置
Fail
本地模式
使用本地配置
搜狗配置中心架构
接入模式
Ø run_model(0=集成模式el载快照g使用本地配置f)
Ø run_model(1=本地模式el载快照g对比g如果m同g使用本地配置f)
Ø run_model(2=网络模式el载快照g对比g如果m同g使用网络配置f)
集成准备阶段 灰度比对阶段 在线切换阶段
配置管理特性 Ø 支持properties/xml/ini等各类配置文件管理 Ø 支持多版本激活和切换g支持灰度配置版本 Ø 支持依赖资源多套环境并行管理和一键切换
配置中心v配置管理
应用
配置激活版本 配置版本C2 配置版本C&
Loglevel=error [account]Host=account.mysqlPort=3306
<properties><entrykey=bname”>Sogou</entry></properties>
一键激活 SUHpsOVZ
prVpLrZPLs PUP xTS
配置中心v配置管理
应用一键解析/导入 Ø 自动解析应用配置文件的资源依赖g构建通配符模型 Ø 支持war包/jar包/多jar包/rpm包等m同类型应用接入 Ø 支持一键解析/导入g分钟级完成应用接入
<<��>>
PackageParser
+Fileparse(Stringurl)+Fileparse(FilepackageFile)
AbstractPackageParser
+voiddownload()+voiddecompress()+voidloadProperties()+voidfilterExclludeFiles()+voidparse()
JarPackageParser
+voidedecompress()+StringgetConfigDirectory()
RpmPackageParser
+voidedecompress()+StringgetConfigDirectory()
WarPackageParser
+voidedecompress()+StringgetConfigDirectory()
MultiJarPackageParser
+StringgetConfigDirectory()+voidfitlerExcludeFiles()
插件化解析资源 配置文件格式扩展
配置中心v配置变更
推送模型(PBSH)
DVV8LLpLr
拉取模型(PB99) 性能问题 时效性
or!
配置中心v配置变更
• 解决场景 Ø 公共资源修改导致大规模应用机器重启
• 配置变更感知 Ø 如何实现客户端实时监听配置变化并保证配置
视图一致性j
• 配置自动加载 Ø 如何实现配置变更在客户端加载生效j Ø 如何扩展m同配置资源的加载生效j
• 配置生效校验 Ø 如何监控配置变更是否在客户端加载成功?
Ø 配置变更失败怎u办j
统一配置中心
DVVRLLpLr SLrvLr
应用/ 应用0 应用1
RLsV[rJL RLsV[rJL
X X X
]HZJOLr ]HZJOLr ]HZJOLr
配置中心v配置变更
• 节点订阅模型
基于DVV8LLpLr实现配置订阅-发布 DVVRLLpLr叶子节点仅存储变更消息保证配置一致性
/
/domain
/resource
/db
/app
/cpc.mysql.cpc
/s2cpc.mysql.cpc
/s1cpc.mysql.cpc env_id[default]
resource_type
[host].dbName
identifier
env_id[1]
env_id[2]
env_id
配置中心v配置变更
• 配置自动热加载 Zk-Client监听模块 ��$���������� ����!#"
Ø ������%� ������! Ø �� �MongoDB�Redis�Kafka�
7201ALTpSHZL/ 2HZHsV[rJL
DVV8LLpLr SLrvLr
统一配置中心
VSK :_SQ9
UL] :_SQ9
SPUNSL2HZHSV[rJL
VSK AHrNLZ2HZHsV[rJL
UL] AHrNLZ2HZHsV[rJL
切换 切换成功 & ]HZJO 2 JHSSIHJR ( 获取 新配置 ) HJR
配置中心v配置变更
终一致性消息设计 Ø 客户端ACK消息视图保证 终一致性
• 支持Zookeeper变更消息重新触发
Ø 以 后应用实际使用的配置r准
{JSPLUZCHS[L-{Pp-b&0.&.&.2cagJSPLUZ-b&0.&2,.&72.&77ca
{CHS[L-{Pp-b&0.&.&.2cagJSPLUZ9PsZ-Eb&0.&2,.&72.&77c!d]a
ACK消息返回
查询服务器配置
ACK配置是否与服务端相同
成功
是否携带错误码
状态解析及报警
失败
是 否
否 是
配置中心v权限审计
配置管理平台权限控制 Ø 按用户登录角色(OP/QA/RD) Ø 操作权限n查询权限隔离
配置中心审计日志 Ø 变更审计日志完整 Ø 变更消息实时提醒
• 站内信/短信/邮件等
配置中心配套设施 Ø 资源信息同步e数据库/CMDB等) Ø n项目管理、部署等系统打通
配置中心应用案例
配置中心概述
资源依赖模型
配置中心架构实践
总结&对比
配置中心应用案例
容器化应用配置管理
编译中心 部署中心 配置中心
2VJRLr-RLNPsZr_
Dev
Product
QA 统一镜像
S3RCI13GI2+C3RSI<NGI2
灰度发布
配置中心应用案例
数据库在线切换
Old DB (192.168.0.1)
New DB (192.168.0.2)
应用1
DBA MHA Tool
配
置
中
心
X X
应用2
数据源修改
推送 推送
订阅 订阅
配置中心应用案例
容器自动授权
容器应用
数据库 基础资源 依赖应用
配置中心
容器自动授权
数据库授权 IPtables授权 SOA授权
dd
总结&对比
配置中心概述
资源依赖模型
配置中心架构实践
配置中心应用案例
总结
围绕资源依赖模型构建统一配置中心
Ø 全局资源依赖视图
配置中心架构要点
Ø 配置获取、API设计、高可用容灾、接入模式、权限审计
配置中心核心功能
Ø 配置管理v易用性、兼容性、扩展性
Ø 基于Zookeeper实现配置变更及热加载
o界对比
特性 SprPUN 1SV[K 1VUMPN 搜狗/SRHPK
数据持t化 4PZ仓库 :_SQ9存储
推拉模型 配合SprPUN 1SV[K 0[s实现配置推送g基于3[rLRL实现服务发现
基于DVVRLLpLr的实时推模式gw支持拉模式g提供HZZp RLsZM[S
配置读写 基于4PZ仓库 支持配置读取g只能有/SRHPK-]LI写入并广播
高可用容灾 基于4PZ仓库高可用g本地缓存 多级容灾g优先使用配置中心数据g支持灰度接入
配置数据模型 _TS/QsVU/prVpLrZPLs等 支持8C、xTS、PUP等
编程模型 基于SprPUNg支持任何语言 ]Hr/QHr/rpT类应用g已支持QHvH/ 1++/SOLSS等S28
前端视图 无 完整、易用的前端视图和操作体验
灰度发布 支持局部刷新 支持
侵入性 中 低
资源模型 无资源依赖概念 完整的资源依赖关系
未来展望
动态配置 8+s 1VUMPN:Hp 集成 单元化架构
易用性 编程模型 热加载
一键建站 多租户隔离 m止于配置
写在 后
1VUMPN VUJLgR[U HU_]OLrL!