配置中心:Apollo

来源:
《微服务架构实战160讲》

Apollo配置中心

1 解决的问题

在这里插入图片描述

2 场景

在这里插入图片描述
如AB测试:测试新功能时,少量beta用户进行测试新功能,即走上面一条线的逻辑,如果反馈好,就将ab_test_flag设置为false,所有用户都可以在beta上进行,走新功能,即新功能正式启用
在这里插入图片描述
开关驱动开发:
在这里插入图片描述
如Git flow:使用开关驱动开发,在主干Trunk上提交代码而不是开分支,减少分支数从而减少冲突(TBD开发),修改代码则使用Branch by Abstraction:
在这里插入图片描述

3 核心概念

应用(application):有唯一标识 appId

环境(environment):配置对应的环境,如DEV,FAT,UAT,PRO

集群(cluster):一个应用下不同实例的分组

名字空间(namespace):一个应用下不同配置的分组;会有不同的类型,进行私有或公有化,还可以继承;

配置项(item):表示可配置项,支持 properties/ json/xml格式,分为私有配置和公有配置;

权限:分为系统管理员、创建项目者、项目管理员、普通用户

4 服务端架构

  • 整体架构
    在这里插入图片描述
    图中红框为基本架构(Portal+PortalDB+Client+ConfigService+AdminService+ConfigDB),引入Eureka解决服务发现的问题,MetaServer是对Eureka简单的封装,解决跨语言的问题(Portal和Client直接去Eureka查询的话,只能使用Java),NginxLB解决Client和Portal如何找到MetaServer的问题(MetaServer有多个,负载均衡),用户只跟Portal交互

  • 领域模型:一个APP可以有多个Cluster,一个Cluster可以有多个Namespace
    在这里插入图片描述

  • 权限模型
    在这里插入图片描述

  • 实时推送设计
    在这里插入图片描述

  • 上图中的ReleaseMassage实现:数据库充当队列
    在这里插入图片描述

5 客户端架构

在这里插入图片描述
推拉结合双保险(实时推送失效时还有定期拉配置作为保障) 、在内存又配置了一份缓存、应用程序获取配置、更新通知

6 高可用

在这里插入图片描述
从服务端架构图可以看出SLB是关键,且每个组件都有多个实例,而DB出问题的话,ConfigService、AdminService、Portal做了一份缓存,达到高可用,一致性就无法保障了

7 监控

内置支持CAT,需要扩展的话可以使用InfluxDB、Prometheus

  • 关键指标

接入应用数量
配置项数量
变更和发布数量
推送拉取次数(success/failure)
ConfigConfig:接口性能、GC、CPU

发布了235 篇原创文章 · 获赞 264 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/102958343