Apollo | 可靠的分布式配置管理系统

2022-07-14 18:25:30 浏览数 (1)

大家早上好啊

今天要跟大家聊聊工具配置相关的话题

我们以前大多数都是通过文件或者数据库去管理的

但是在我加入游戏行业的日子里

我经常能听到的诉求就是

你这些配置文件能不能在网页中修改

你这个配置能不能开放对应的权限的给项目组的人自己去修改等等

以前在影视行业的时候我以前公司的配置都是在gitlab中统一管理的

每次更新个配置我们都需要在gitlab上面创建新的issue

然后经过代码审查,一系列的操作之后才能更新配置

好处是稳定安全,坏处是不够敏捷

因为我们代码审查配置的时候还会受到到有时差影响

我们其他有权限合并的同事最近的在德国,其他的都在北美

今天我要向大家介绍的是携程开源的分布式的配置系统“Apollo”

对的就是那个我们经常用来买票订酒店的携程旅行

我们来看看有哪些公司或者产品用了这个系统

阿里有自研的nacos, 腾讯有自研的七彩石,百度有自研的disconf,

其他大厂应该也有诸如此类的系统我这边暂时不清楚其他的

如果有朋友知道欢迎留言~

Apollo介绍

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心

能够集中化管理应用不同环境、不同集群的配置,

配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

application (应用)

environment (环境)

cluster (集群)

namespace (命名空间)

Apollo的优势

正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

统一管理不同环境、不同集群的配置

Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。

同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等

通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖

配置修改实时生效(热发布)

用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序

版本发布管理

所有的配置发布都有版本概念,从而可以方便地支持配置的回滚

灰度发布

支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例

权限管理、发布审核、操作审计

应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。

所有的操作都有审计日志,可以方便地追踪问题

客户端配置信息监控

可以在界面上方便地看到配置在被哪些实例使用

提供Java和.Net原生客户端

提供了Java和.Net的原生客户端,方便应用集成

支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1 )

同时提供了Http接口,非Java和.Net应用也可以方便地使用

提供开放平台API

Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等

对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制

部署简单

配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少

目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来

Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

Apollo的优势还可以通过与Spring Cloud Config对比来体现出

安装Apollo

我这边是在windows机器上使用docker部署Apollo的服务

其他朋友可以选择Linux或者虚拟机都行

部署方法都差不多

通过git克隆Apollo的仓库

下面https://github.com.cnpmjs.org的前缀是一个镜像源用于克隆加速

代码语言:javascript复制
git clone https://github.com.cnpmjs.org/ctripcorp/apollo.git

克隆完的结果如下

我们CD进入到apolloscriptsdocker-quick-start

执行下面docker-compose的命令,即可启动Apollo的服务了

代码语言:javascript复制
docker-compose up -d

打开浏览器并输入地址http://localhost:8070/

打开Apollo网页,输入账号apollo和密码admin登录后,您将进入以下页面。

点击创建项目去创建新的项目配置

项目创建好了后我们就能看到对应的配置面板了

在页面的右上角我们可以创建新的配置

左下角的namespace是可以创建新的属性的命名空间

比如我现在就创建一个新的命名空间

设置完成后就会跳转到权限的控制

我们可以根据我们具体的需要去设置相关的权限管理

点击回到项目

我们就可以看到新添加的命名空间已经出现在页面中了

我们可以点击新增配置去添加新的配置参数

添加完成后

大家能看到页面上显示这配置未发布

我们可以点击发布按钮去发布我们的新配置

我们可以在comment中写上我们这次的相关描述

方便我们未来的数据回滚

安装和创建配置就介绍到这里了,

更加详细的使用需要大家去看看官方文档

因为是国内的开源项目而且使用的公司还挺多的

所有参考和学习资料很多,哔哩哔哩上面就有不少相关视频大家可以去看看

使用Apollo

下面我就通过一个简单的例子来演示apollo的用法

老规矩,先通过pipz安装Apollo的客户端

代码语言:javascript复制
rez env pipz -- install apollo_client

安装好了之后

通过 rez env maya-2022 apollo_client -- maya

打开maya去测试我们的代码

代码语言:javascript复制
from pyapollo.apollo_client import ApolloClient
import pymel.core as pm

client = ApolloClient(app_id="project_a-cfg")
resolution = client.get_value("resolution",  namespace="TEST1.render")
width, height = resolution.split("x")
pm.SCENE.defaultResolution.width.set(int(width))
pm.SCENE.defaultResolution.height.set(int(height))
print(f"Set width >> {width}; height >> {height}")

这Apollo的配置服务除了用到我们制作环节的工具链中

其实也可以运行到游戏的配置热更新中,响应速度很快

好了今天的分享就到这里

希望对你们未来的工具配置有一些启发

欢迎大佬们帮忙点赞转发,感谢~

我们下次再见

欢迎留言与我们分享你们公司用过的工具配置的相关解决方案

0 人点赞