介绍
如果我们要设计开发一套微服务基础架构,大家觉得哪个组件是最基础的?基于多年互联网分布式系统的实战经验,我的回答是配置中心以及配套的客户端。之前我在极客时间上的课程《微服务架构和实践160讲》中,已经深度剖析了携程开源的Apollo配置中心,Apollo是自带客户端的,它的客户端不错很灵活,但是实际上Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比Apollo客户端具备更多生产级特性,也更灵活。
在NetflixOSS微服务技术栈中,几乎所有的其它组件(例如Zuul, Hystrix, Eureka, Ribbon等)都依赖于Archaius,可以说理解Archaius是理解和使用Netflix其它微服务组件的基础。另外,2018.7月份我在《微服务架构和实践160讲》中推出了第3个模块:《微服务网关Zuul架构和实践》,Zuul重度依赖Archaius实现灵活的动态配置,如果缺少Archaius的支持,Zuul的生产级特性可以说会大打折扣。基于上述原因,我写这篇文章普及一下Archaius的原理和设计,也为自己的课程做一些必要的铺垫。
注意,Netflix只是开源了其配置中心的客户端部分(也就是Archaius),没有开源配套的服务器端。Archaius其实是配置源实现无关的,可以对接各种配置中心作为数据源,本文后面会介绍Archaius如何和Apollo配置中心进行集成。
Archaius项目的由来
在微服务环境下,配置常常需要根据不同的上下文环境进行调整,或者说配置应该是多维度的。例如在Netflix,上下文维度包括环境(开发、测试和生产),发布区域(美国东区us-east-1,美国西区us-west-1等等),栈(将有依赖关系的应用和服务为了某种目标而隔离起来的一个逻辑概念,例如iPhone App启动栈),等等。
Netflix希望能够根据发布的环境,甚至请求的上下文,