前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apollo | 可靠的分布式配置管理系统

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

作者头像
用户9897904
发布2022-07-14 18:25:30
8750
发布2022-07-14 18:25:30
举报
文章被收录于专栏:PipelinePipeline

大家早上好啊

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

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

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

我经常能听到的诉求就是

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

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

以前在影视行业的时候我以前公司的配置都是在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进入到apollo\scripts\docker-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的配置服务除了用到我们制作环节的工具链中

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

好了今天的分享就到这里

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

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

我们下次再见

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pipeline 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档