基于nacos+ConfigParser实现Python近原生的云配置管理

一、场景

无论从程序开发还是线上管理,通过本地配置文件\写死代码进行配置管理都是不合适的。

其实本文是一篇水文,使用一个小的方法快速实现了所谓Python近原生的云配置管理,不会太高深。

二、nacos与ConfigParser

1、nacos

阿里巴巴开源的一个配置中心,详见

为什么公司有轮子,开源有那么多方案,选nacos呢?

  • 目前公司轮子大部分与其业务过于耦合

内部大部分轮子 管理端与配置中心耦合在一起(与业务场景强关联,对单个业务来说,确实是相似的东西,耦合在一起也是能理解)

  • 与其他开源相比(如consul),生态更好、sdk更完善
  • 个人比较熟悉这个组件

2、ConfigParser

python使用自带的configparser模块用来读取配置文件,配置文件的形式类似windows中的ini文件。

为什么不使用json、xml、yaml、properties来描述我们的配置文件呢?

  • 基于ConfigParser实现云配置管理,可能更加符合Pythonist的习惯。
  • 大量Python服务的配置文件是基于ConfigParser实现(服务迁移成本低)

三、实现

配置文件类似:

代码语言:txt
复制
[common]
url = www.qq.com

1、详细实现

代码语言:txt
复制
import nacos
import ConfigParser
import StringIO

SERVER_ADDRESSES = ""
NAMESPACE = ""
data_id = ""
group = ""

client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE)
nacos_conf = client.get_config(data_id, group)

首先借助nacos-sdk-python生成一个nacos客户端

代码语言:txt
复制
conf = ConfigParser.ConfigParser()
conf.readfp(StringIO.StringIO(nacos_conf))
  • 支持read配置文件
  • 支持readfp一个file-like object (此处需要借助StringIO将nacos的结果转换)
代码语言:txt
复制
url = conf.get("common", "url")

四、参考

ConfigParser-标准库文档

nacos-官方文档

nacos-sdk-python