搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景...

41
搜狗配置中心架构演化n实践 郭理勇 搜狗

Upload: others

Post on 26-Oct-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心架构演化n实践

郭理勇 搜狗

Page 2: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载
Page 3: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载
Page 4: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载
Page 5: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

关于我

郭理勇

20&2年加入搜狗

s要关注大规模分布式系统架构、海量数据存

储、微服务和自动化运维体系等

搜狗商o平台研发部 资深高级工程师/技术经理

Page 6: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心概述

资源依赖模型

配置中心架构实践

配置中心应用案例

总结&对比

Page 7: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

微服务l的配置中心

实施微服务的基础实施

微服务

配置中心

服务网关

监控中心

日志中心

服务注册/发现/90 RP1(AOrPMZ/NRP1)

安全 限流 容错

配置中心已成r微服务架构标配

Page 8: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置是}uj

配置实际k代表应用程序的行r调整能力

应用或参数配置

线程池、连接池大小

开关、密钥、路径配置

日志级别、超时时间

dd

依赖资源

2HZHIHsL/:VUNV20

8HMRH/DVVRLLpLr

RLPKs/:LTJHJOL

dd

Page 9: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

大规模分布式系统配置管理挑战

配置管理 Ø  多环境/多版本并行g管理混x Ø  环境m统一hhosts配置泛滥 Ø  配置安全性

配置变更 Ø  变更频繁

•  数据库切换 •  基础资源迁移(Redis等)

Ø  变更时效性 •  无法动态热加载 •  应用重启噩梦

资源依赖 Ø  资源依赖关系m易管理 Ø  扩缩容/机器迁移等

Page 10: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心背景

解决s要问题 Ø  分布式系统配置文件管理 Ø  配置实时变更及热加载 Ø  资源依赖关系管理

成熟o务线如何接入配置中心

Ø  配置中心侵入性、应用兼容性 Ø  接入的便捷性、易用性 Ø  API接口的扩展性

搜狗产品矩阵

商o平台

信息流广告

搜索广告

品牌广告

代理商 广告s

技术体系

1R:

广告平台

物料搜索

审核平台

大数据平台

基础架构

4VSHUN

1++

7HvHSJrPpZ

7HvH

P_ZOVU

Page 11: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

阶段进展

&00+

接入搜狗商o平台o务线k百p核心o务系统使用g支持容器/非容器配置管理

多语言

支持QHvH/J++/sOLSS等 支持]Hr包/QHr包/rpT包等各类应用

&s

支持变更推送时延.&s 实现秒级资源自动切换

Page 12: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

资源依赖模型

配置中心概述

配置中心架构实践

配置中心应用案例

总结&对比

Page 13: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

资源依赖模型

配置类型

Ø  资源配置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

Page 14: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

资源依赖模型

配置

资源

开发模型

资源模型

资源依赖模型可以解决的问题 •  一p应用依赖y多少资源j •  一p资源被多少应用引用j •  资源变更对哪{应用有影响j •  控制资源变更在多p应用一致性j •  dd

Page 15: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

资源通配符

资源依赖模型

域名类资源 数据库类资源 基础类资源

示例

Before:host=log.kafka:2181After:host=${resource:[/resource/log.kafka@address]}:${resource:[/resource/log.kafka@port]}

${type:[/prefix/identifier@suffix]}

资源类型

格 式

Page 16: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

资源依赖模型

全局 资源依赖视图

Page 17: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心架构实践

配置中心概述

资源依赖模型

配置中心应用案例

总结&对比

Page 18: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心ealkaidf整体架构

配置中心

配置中心/PI

配置存储 配置管理 版本管理

变更通知 资源同步 资源依赖

1:20

客 户 端

配置拉取 缓存

配置备份 容灾

S28

配置监听 加载

订阅

发布

PUSH

PULL 附 加 组 件

配 置 管 理 平 台

消息通知

权限管理

配置导入

依赖视图

DVVRLLpLr :_SQ9

Page 19: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心架构

配置获取

配置获取h配置文件直接覆盖

适合应用hWeb类应用

优点h应用侵入性低

缺点h灵活性m足

配置获取hPlaceHolder替换

适合应用hjar包类应用

优点h实现简单g侵入性中等

缺点h仅支持KV类配置g应用

场景相对有限

配置获取h配置API

适合应用hC++/Python/Shell等

优点h使用方式(annotation、

XML等)和扩展性 灵活

缺点h对应用侵入性较大

Page 20: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

Ø  API安全性 •  IP隔离e仅限定该应用l机器拉取配置f •  SOA使用者权限控制

•  HTTP header鉴权等

搜狗配置中心架构– API设计

配置中心/PI

配置类/PI

资源类/PI

应用/版本/灰度

配置文件/配置项

域名/端口解析

资源依赖关系

API接口hRestful/RPC

返回形式hJSON/XML/ini等

Page 21: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心架构

服务端高可用 Ø  负载均衡 Ø  水平扩展 Ø  FailOver Ø  容灾工具

配置中心1SPLUZ

配置中心实例& 配置中心实例2 配置中心实例( 配置中心实例)

:_SQ9

失败重试

容灾导出工具

无状态接口

Page 22: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心架构

客户端高可用 Ø  配置备份/缓存 Ø  高可用容灾方案

应用启动

模式选择

配置比对

继续启动

Fail

Fail

网络模式

拉取全量配置

备份配置

容灾模式

读取容灾配置

读取备份配置

Fail

本地模式

使用本地配置

Page 23: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

搜狗配置中心架构

接入模式

Ø  run_model(0=集成模式el载快照g使用本地配置f)

Ø  run_model(1=本地模式el载快照g对比g如果m同g使用本地配置f)

Ø  run_model(2=网络模式el载快照g对比g如果m同g使用网络配置f)

集成准备阶段 灰度比对阶段 在线切换阶段

Page 24: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置管理特性 Ø  支持properties/xml/ini等各类配置文件管理 Ø  支持多版本激活和切换g支持灰度配置版本 Ø  支持依赖资源多套环境并行管理和一键切换

配置中心v配置管理

应用

配置激活版本 配置版本C2 配置版本C&

Loglevel=error [account]Host=account.mysqlPort=3306

<properties><entrykey=bname”>Sogou</entry></properties>

一键激活 SUHpsOVZ

prVpLrZPLs PUP xTS

Page 25: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心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()

插件化解析资源 配置文件格式扩展

Page 26: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心v配置变更

推送模型(PBSH)

DVV8LLpLr

拉取模型(PB99) 性能问题 时效性

or!

Page 27: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心v配置变更

•  解决场景 Ø  公共资源修改导致大规模应用机器重启

•  配置变更感知 Ø  如何实现客户端实时监听配置变化并保证配置

视图一致性j

•  配置自动加载 Ø  如何实现配置变更在客户端加载生效j Ø  如何扩展m同配置资源的加载生效j

•  配置生效校验 Ø  如何监控配置变更是否在客户端加载成功?

Ø  配置变更失败怎u办j

统一配置中心

DVVRLLpLr SLrvLr

应用/ 应用0 应用1

RLsV[rJL RLsV[rJL

X X X

]HZJOLr ]HZJOLr ]HZJOLr

Page 28: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心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

Page 29: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心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

Page 30: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心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配置是否与服务端相同

成功

是否携带错误码

状态解析及报警

失败

是 否

否 是

Page 31: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心v权限审计

配置管理平台权限控制 Ø  按用户登录角色(OP/QA/RD) Ø  操作权限n查询权限隔离

配置中心审计日志 Ø  变更审计日志完整 Ø  变更消息实时提醒

•  站内信/短信/邮件等

配置中心配套设施 Ø  资源信息同步e数据库/CMDB等) Ø  n项目管理、部署等系统打通

Page 32: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心应用案例

配置中心概述

资源依赖模型

配置中心架构实践

总结&对比

Page 33: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心应用案例

容器化应用配置管理

编译中心 部署中心 配置中心

2VJRLr-RLNPsZr_

Dev

Product

QA 统一镜像

S3RCI13GI2+C3RSI<NGI2

灰度发布

Page 34: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心应用案例

数据库在线切换

Old DB (192.168.0.1)

New DB (192.168.0.2)

应用1

DBA MHA Tool

X X

应用2

数据源修改

推送 推送

订阅 订阅

Page 35: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

配置中心应用案例

容器自动授权

容器应用

数据库 基础资源 依赖应用

配置中心

容器自动授权

数据库授权 IPtables授权 SOA授权

dd

Page 36: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

总结&对比

配置中心概述

资源依赖模型

配置中心架构实践

配置中心应用案例

Page 37: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

总结

围绕资源依赖模型构建统一配置中心

Ø  全局资源依赖视图

配置中心架构要点

Ø  配置获取、API设计、高可用容灾、接入模式、权限审计

配置中心核心功能

Ø  配置管理v易用性、兼容性、扩展性

Ø  基于Zookeeper实现配置变更及热加载

Page 38: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

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

前端视图 无 完整、易用的前端视图和操作体验

灰度发布 支持局部刷新 支持

侵入性 中 低

资源模型 无资源依赖概念 完整的资源依赖关系

Page 39: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

未来展望

动态配置 8+s 1VUMPN:Hp 集成 单元化架构

易用性 编程模型 热加载

一键建站 多租户隔离 m止于配置

Page 40: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载

写在 后

1VUMPN VUJLgR[U HU_]OLrL!

Page 41: 搜狗配置中心架构演化n实践 - static001.geekbang.org · 搜狗配置中心背景 解决s要问题 Ø 7HvH分布式系统配置文件管理 Ø 配置实时变更及热加载