Apollo配置中心如何实现配置热发布

简介: 配置中心在微服务架构体系中是非常重要的基础设施服务,承担着分布式配置集中管理、配置热发布以及审计等重要的职责。本文主要探讨Apollo配置中心的配置热发布特性如何实现。

引言

配置中心在微服务架构体系中是非常重要的基础设施服务,承担着分布式配置集中管理、配置热发布以及审计等重要的职责。本文主要探讨Apollo配置中心的配置热发布特性如何实现。

配置热发布如何实现

image.png

1、配置发布主流程

如上图所示,配置发布的主流程如下:

(1)用户通过PortalAdminService发布配置信息;

(2)AdminService在配置发布后会往ReleaseMessage表插入一条消息记录;

(3)ConfigService中包含了一个定时线程,该定时线程每秒扫描一次ReleaseMessage表,检查表中是否有新的消息记录;

(4)如果存在配置更新,ConfigService就会通知所有的消息监听器;

(5)通知Controller会根据发布的配置信息通知对应的客户端;

客户端与配置中心的大致交互如下所示:

image.png

这里的配置更新推送其实并不是真正进行信息推送,而是通过长轮询来实现配置的更新。实际上并不是配置的更新推送,而是配置更新通知的推送,客户端拿到通知后需要进一步获取具体的变化的配置信息。

2、长轮询

(1)如果使用Push方式推送数据会有什么问题?

image.png

服务端需要与客户端建立长连接,服务端有数据更新的时候可以进行数据推送,数据更新比较及时。但是服务端无法感知客户端的处理能力,可能会造成数据积压。另外集群情况下部分节点不在线会通知失败,等客户端又在线后需要进行补偿推送,节点还有可能存在扩容等各种情况。对于配置中心这种业务场景来说,通过Push方式实现数据推动显得复杂了。

(2)如果使用Pull方式拉取数据会有什么问题?

image.png

Pull模式主要是通过客户端主动向配置中心进行数据请求,拉取对应的配置信息。由于是客户端主动拉取,因此不会出现数据堆积的问题。但是数据如何去拉,什么时间去拉,拉的频率如何控制,这些都是问题。如果频率过高,而配置并未更新,那么就会对服务端造成不必要的连接压力。如果频率过低,那么配置更新就会存在延时的问题。因此同样不适合配置中心的业务场景。

(3)长轮询

客户端向配置中心进行请求,配置中心不会立即返回响应,而是会hold住这个请求直到指定时间超时后进行返回。如果没有配置变更,则返回Http状态码304给客户端。超时返回后,客户端将再次发起请求。

如果存在配置变更,将返回对应的namespace信息,客户端根据namespace信息获取对应的配置信息。

另外为了保证配置的有效性,客户端也会定时请求配置信息,防止配置更新可能出现的异常情况,是一种数据保证的兜底fallback机制。另外当获取到配置后,会同步到本地配置文件中 。这样即便客户端与配置中心无法通信,客户端也可以从本地配置文件中获取配置信息。

那么问题来了,为什么不直接在长轮询的响应中直接回复配置信息呢?主要是由于本身已经存在了定时拉取配置的步骤,那么为了保证单一原则以及代码上的简洁以及复用。所以通过这种获取配置更新后再进行数据拉取的方式。

3、客户端获取配置信息

我们一起看下客户端如何工作流程,如下图:

4.png

(1)ConfigServiceLocator:主要负责向Eruka注册中心获取ConfigService地址列表信息;

(2)RemoteConfigLongPollService:从ConfigServiceLocator获取到地址列表信息后,通过长轮询的方式获取配置变更信息;

(3)RemoteConfigReposity:从ConfigService获取变更的配置数据;

(4)LocalFileConfigReposity:把配置数据固化到本地,同时作为本地配置数据的来源;

(5)DefaultConfig:主要和业务方进行交互,提供配置获取方法,同时可以注册配置变更事件。


总结

本文主要探讨了Apollo配置中心配置热发布的相关内容,分析了为什么长轮询是比较适合配置中心的数据交互方式。在今后的架构设计中我们也可以以此来作为参考。另外客户端的设计中,也体现了了分层以及职责单一的代码风格,我们自己在实际项目开发中也比较有借鉴的意义。

相关文章
|
机器学习/深度学习 算法 决策智能
【5分钟Paper】Pointer Network指针网络
【5分钟Paper】Pointer Network指针网络
717 0
【5分钟Paper】Pointer Network指针网络
|
应用服务中间件
使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据
使用ehcache时如何持久化数据到磁盘,并且在应用服务器重启后不丢失数据1、如何持久化到磁盘使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘。
3429 0
|
6月前
|
人工智能 云计算 数据中心
龙蜥牵手如意 RISC-V 社区,共筑 RISC-V 软件生态新未来
未来,双方将携手在 RISC-V 操作系统、高性能计算等领域开展合作。
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
654 4
|
存储 安全 UED
插上U盘后提示格式化怎么解决?4个方法帮你
在使用u盘的时候,很多人都可能遇到过电脑插入U盘后系统弹出提示要求将U盘格式化。面对这个问题,如果U盘里有重要的数据,会让人感到不知所措。今天的内容就和大家一起讨论一下这个问题的原因和解决方法,并提供恢复U盘数据的方法。
|
存储 安全 算法
密码学原理及其在网络安全中的应用
【7月更文挑战第27天】密码学作为保护信息安全的基石,在网络安全中发挥着不可或缺的作用。通过加密、解密、身份验证、数字签名和哈希函数等技术手段,密码学确保了数据的机密性、完整性和认证性。随着计算能力的不断提升和密码分析技术的不断进步,密码学需要不断创新和发展,以应对新的安全挑战。未来,随着量子计算技术的兴起和后量子密码学的研究深入,密码学将在网络安全领域发挥更加重要的作用。
|
安全 网络安全 数据处理
防火墙设置难倒你?这两种组网模式轻松解决网络安全难题!
【8月更文挑战第23天】在网络安全日益重要的今天,防火墙作为关键防护设备扮演着重要角色。本文重点分析两种核心组网模式:三层路由网关模式与二层透明网桥模式。前者通过IP层处理实现内外网隔离及丰富的策略配置,增强安全性;后者以MAC地址转发,部署简便,不影响现有网络结构,适合服务不可中断的情况。通过企业升级安全防护的实际案例,展示了不同模式的应用场景及优势,并提供了三层路由网关模式的配置示例。正确选择和配置防火墙组网模式对于提高网络安全性和保证业务连续性至关重要。
856 0
|
消息中间件 监控 Kafka
保证消息顺序性:Kafka 的策略与挑战
保证消息顺序性:Kafka 的策略与挑战
|
算法 C++ 开发者
【C/C++ 数据结构 】图顶点个数和边的关系
【C/C++ 数据结构 】图顶点个数和边的关系
1344 0