Apollo配置中心及Python连接

本文将会介绍如何启动Apollo,在Apollo中配置参数,以及如何使用Python连接Apollo.

Apollo介绍

在文章Python之读取配置文件和文章Python之配置文件处理中,笔者分别介绍了如何使用Python来处理ini, yaml, conf等配置文件。这种配置方式比较方便本地加载,但囿于项目的复杂性、安全性、稳定性等角度考虑,我们需要借助其它的配置工具来实现更高效、高可靠的参数配置,其中之一便是Apollo

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Apollo的优点如下:

  • 部署简单
  • 灰度发布
  • 版本发布管理
  • 提供开放平台API
  • 客户端配置信息监控
  • 提供Java和.Net原生客户端
  • 配置修改实时生效(热发布)
  • 权限管理、发布审核、操作审计
  • 统一管理不同环境、不同集群的配置

Apollo启动

我们采用Docker-Compose方式来启动Apollo,参考Github项目apollo-quick-start中给出的介绍,可以方便地在本地启动Apollo

如果使用的是 arm 架构的机器,例如 mac m1,需要下载docker-compose-arm64.yml。

1
docker-compose -f docker-compose-arm64.yml up -d

如果是其他架构的机器,如x86,则直接启动:

1
docker-compose up -d

Apollo配置

启动成功后,在浏览器中输入网址localhost:8070打开Apollo配置页面,账号apollo,密码admin,环境选择DEV,创建应用ai_service_1,app id 为ai_test,配置参数如下:

参数配置

在管理秘钥中创建秘钥,点击发布按钮即可发布配置好的变量。

Python连接Apollo

Apollo天然支持Java, Net连接,支持度较好,对于Python,也有热心的开发者创建了支持度较好的第三方模块,这里使用pyapollo。该模块的安装方式为:

1
pip install apollo-client==2.1.2

使用Python连接Apollo的示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
from pyapollo.apollo_client import ApolloClient

app_id = "ai_test"
config_server_url = "http://127.0.0.1:8090"
authorization = "3a7d769835ef43e3ae2af1cb1f861795"
cache_file_path = 'my_apollo_config'
env = 'DEV'
namespace = 'application'
client = ApolloClient(
app_id=app_id,
cluster="default",
config_server_url=config_server_url,
authorization=authorization,
cache_file_path=cache_file_path,
env=env
)
client.start()
# print(client.__dict__)

# get config from apollo
host = client.get_value(key="host", default_val="*", namespace=namespace)
port = client.get_value(key="port", default_val="**", namespace=namespace)
key = client.get_value(key="key", default_val="***", namespace=namespace)
name = client.get_value(key="name", default_val="****", namespace=namespace)
print(host, type(host))
print(port, type(port))
print(key, type(key))
print(name, type(name))

输出结果如下:

1
2
3
4
0.0.0.0 <class 'str'>
80 <class 'str'>
abc <class 'str'>
**** <class 'str'>

同时在本地的my_apollo_config目录下,也会有缓存的配置文件。

在上面的示例代码中,host, port, key变量都正常获取,但name变量不存在Apollo中,因为取默认值。如果在Apollo中配置该参数,则也能正常获取。

总结

本文是笔者在实际工作中的一次总结,主要介绍了Apollo的启动、配置,以及如何使用Python来连接Apollo。

笔者已开通个人博客网址:https://percent4.github.io/ ,欢迎大家访问~

推荐阅读

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。


Apollo配置中心及Python连接
https://percent4.github.io/Apollo配置中心及Python连接/
作者
Jclian91
发布于
2024年1月9日
许可协议