携程Apollo(阿波罗)配置中心研究

3,354 阅读3分钟

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由webmote 原创,首发于 【掘金】
  • 📢作者格言: 生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!💪💪💪

1.Apollo简介

Apollo配置是携程框架组开源的一个配置中心,其不依赖于Java Sprint,但对Java Sprint支持度良好,并且也支持.net core,是跨界配置中心的成熟大作。

其具有良好的前端界面,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端程序,具备规范的管理权限、灰度等特性。

2.Apollo特点和优势

Apollo配置中心应用广泛,有大量的用户背书,是较为成熟的一款开箱即用的服务,其具备如下特点和优势。

广告下地址: github

  1. 支持不同应用的配置隔离;
  2. 支持框架和组件的配置,并可以利用命名空间特性实现应用内的配置继承和覆盖;
  3. 支持不同的环境配置,内置四种环境配置;
  4. 支持不同的集群或安全区配置;
  5. 支持用户赋权管理,用户审核功能,以及日志活动记录;
  6. 支持编辑配置和发布配置分离,避免误操作;
  7. 支持java和.net sdk客户端,并实现了缓存、离线缓存、推、拉模式,长连接等;
  8. 支持分布式部署,以实现高可用;
  9. 一个前端管理多种环境的配置;
  10. 支持Kubernetes部署,并支持K8s的原生服务发现;
  11. 各种大佬背书:广泛用于网易严选、有赞、土巴兔、平安银行、易车、小红书等等等等

3. Apollo 的劣势

非要说劣势,估计只有一点,架构稍显笨重,其依赖于MySQL、Java,有配置服务、管理服务、服务发现(Eureka 或K8s的Api 服务)、元服务、前端等组成。

对于运维来说,稍微有点重量级。

4. Apollo 的架构组成

官网公布的架构图如下:

image.png

配置服务和管理服务均通过Eureka进行服务的注册工作,通过注册后,使得 元服务可以通过Eureka找到这些服务的地址。

这样客户端和前端在通过访问配置的负载访问元服务后,获取到配置服务和管理服务的地址,就可以进行配置的读取和编写、发布工作了。

各类配置都会落盘到配置DB,使得配置的编写和发布可以很好的进行分离。

通过数据保存到MysQL,配置服务、管理服务在K8s内就可以部署成无状态的服务了。

客户端在拉取到配置后,会在本地缓存一份文件,这样就可以对配置中心形成弱依赖关系,如果配置中心挂了,还有本地的配置可供读写。

不过这块如果部署到K8s内,有点纠结是否还是无状态的服务,我们当然不希望,使用了配置的客户端后,就把自己搞成有状态的服务,这块我没研究清楚。

5. .net core 客户端访问

客户端的访问如图所示。

image.png

代码支持也很简单:

 public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .AddApollo(false)
    .ConfigureWebHostDefaults(builder => builder.UseStartup<Startup>());

使用:

var value = context.RequestServices.GetRequiredService<IConfiguration>()[key];

5. 小结

例行小结,理性看待!

结的是啥啊,结的是我想你点赞而不可得的寂寞。😳😳😳

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?