apollo实现原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
apollo实现原理
Apollo是一款开源的分布式配置中心,它可以帮助应用程序实现动态配置管理。
在使用Apollo时,配置信息会以 Key-Value 的形式存储在配置中心中,应用程序可以通过订阅配置中心的变更事件来更新自己的配置。
下面是Apollo实现原理的详细介绍:
一、数据存储
① 配置中心使用了MySQL作为存储介质,而Zookeeper则用于配置信息的命名空间管理以及事件的发布和订阅。
MySQL中主要存储了两类数据:配置数据和灰度规则数据。
② 配置数据可以分为application和cluster两个维度,application表示应用程序的名称,cluster则表示应用程序的集群名称。
同一份配置可以在不同的环境中被多个应用程序使用,因此,还可以在配置上再添加一个namespace的维度来实现不同环境之间的分离。
③ 除了配置数据之外,还有一类灰度规则数据,用于实现应用程序的灰度发布。
灰度规则数据以应用程序和集群为维度,可以配置灰度规则的发布策略,例如只将配置更新推送给部分应用程序或仅仅在特定时间窗口内进行灰度发布等。
二、数据推送
① 配置变更的推送主要采用了长连接/Server Push的方式。
通过长连接方式,应用程序能够实时接收到配置变更的通知。
在Apollo中,长连接使用Netty框架实现,不需要使用HTTP等额外的协议栈,可以极大地减少网络开销和推送的延迟。
② 应用程序可以向配置中心发起同步请求,监听指定的配置信息变更事件,这个过程是同步的。
当有配置变更时,配置中心会将变更事件推送给对应的应用程序。
③ 对于灰度规则数据的变更,也会通过独立的长连接通道推送给应用程序,以确保灰度发布的精确度和可控性。
三、数据缓存
① 应用程序不仅仅需要接收到配置变更的通知,还需要将我们接收到的配置信息缓存到本地,以尽量减少网络延迟和较少的访问量损失,同时也能够达到更高的访问效率。
② 在默认情况下,应用程序会缓存所有应用程序和集群的配置信息和灰度规则数据。
同时,还可以通过配置中心的API接口来判断指定的配置信息是否过期以及本地缓存与配置中心数据是否一致。
四、数据回滚
① 在配置变更过程中,有时候可能由于某些原因导致配置中心返回的配置信息可能不存在,或者无法解析等错误,这个时候,应用程序需要恢复到上一次的正常配置状态。
② 为了避免这种情况,Apollo实现了一套简单的回滚机制。
当应用程序从配置中心拉取的配置信息不完整或无效时,它会尝试从缓存中获取上一次的配置信息,并回滚到上一次的配置状态。
综上所述,Apollo实现了分布式动态配置的管理,大大减少了硬编码和重启应用程序的必要性,极大地提高了应用程序的可维护性和可扩展性。