大家早上好啊
今天要跟大家聊聊工具配置相关的话题
我们以前大多数都是通过文件或者数据库去管理的
但是在我加入游戏行业的日子里
我经常能听到的诉求就是
你这些配置文件能不能在网页中修改
你这个配置能不能开放对应的权限的给项目组的人自己去修改等等
以前在影视行业的时候我以前公司的配置都是在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的配置服务除了用到我们制作环节的工具链中
其实也可以运行到游戏的配置热更新中,响应速度很快
好了今天的分享就到这里
希望对你们未来的工具配置有一些启发
欢迎大佬们帮忙点赞转发,感谢~
我们下次再见
欢迎留言与我们分享你们公司用过的工具配置的相关解决方案