微服务配置管理

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

标签

PostgreSQL , 微服务 , 配置管理 , UDF , 异步消息 , JSON , XML


背景

pic

微服务的介绍,请参考

https://martinfowler.com/articles/microservices.html

不管是微服务,或者其他软件架构,docker等。APP(微服务)配置的同步,变更,下发,都是需要面对的。

例如你可以用消息队列,但是这种方式比较重,同时在APP重启后,可能还需要消费一部分消息(实际上重启后可以直接读取最新配置,不需要重新消费)。

使用PostgreSQL以及UDF可以比较好的解决微服务的配置存储、变更、下发的问题。

配置存储

PostgreSQL 支持json, XML, kv, 数组等数据类型,可以非常方便的存储应用配置。

配置变更通知方法1 - notify, listen

PostgreSQL提供了一个异步消息的功能,用户可以往通道中发消息,也可以监听来自通道的消息。

这种方式比较适合下发配置,例如每个微服务都监听来自某个通道的消息,当需要变更配置时,往配置变更表插入一条新的配置记录,同时调用触发器函数,往通道中发送消息,所有的微服务都会接收到来自该通道的消息。

pic

弊端

1. 每个微服务都需要与PostgreSQL建立一个长连接,并监听某个通道。如果监听断开,重新建立连接和监听之前的消息会丢掉。

这个问题可以解,比如连接断开后,重新建立监听,同时微服务主动询问一下数据库(查询配置表),是否有新的配置。如果有的话自动获取最新配置信息。

2. 由于每个微服务都需要占用一个长连接,对数据库来说,几万个微服务,就需要几万个长连接,平均每个连接消耗2MB内存的话,就需要1万个连接需要20GB内存。

notify/listen 异步消息还有其他比较适合的应用场合,例如

《从电波表到数据库小程序之 - 数据库异步广播(notify/listen)》

《从微信小程序 到 数据库"小程序" , 鬼知道我经历了什么》

《[转载]postgres+socket.io+nodejs实时地图应用实践》

配置变更通知方法2 - UDF

PostgreSQL 还有trigger以及UDF的功能,如果用在微服务的配置管理场景,相比异步消息,没有以上两个问题。

pic

怎么做到呢?

1. 微服务的注册,例如为每个微服务注册后,在数据库中表现为一条唯一身份的记录(微服务的指纹)。

2. 微服务注册后,启动服务时,从配置表读取最新的配置。

3. 当下发配置时,往配置表插入一条记录(或者更新配置记录),我们暂且将配置的ID表示为NEW ID,老的配置为OLD ID,然后通过DML trigger,触发调用一个UDF。

4. 这个UDF可以是PostgreSQL pljava, plpython, C等过程语言编写的触发器函数,UDF的目标是根据已注册的微服务,联系并把配置变更涉及的ID或者内容直接发送给微服务,如果是发送ID,微服务还需要访问数据库,读取对应的配置。

弊端

1. 由于是数据库通过UDF主动通知服务的,所以微服务必须有对应的API,增加了微服务的复杂度。

小结

PostgreSQL 的异步消息机制、触发器、UDF接口等功能,结合json, xml, kv, 数组等类型。可以很好的解决微服务的配置管理问题。

这个应用场景的灵感来自PG社区的同学(51信用卡)公司里的场景,期待用户方的详尽分享。

参考

https://www.postgresql.org/docs/9.6/static/sql-notify.html

https://www.postgresql.org/docs/9.6/static/sql-listen.html

https://www.postgresql.org/docs/9.6/static/libpq-notify.html

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
4月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
310 0
|
1月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
43 2
|
4月前
|
XML JSON Go
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
|
4月前
|
Java 数据库连接 Nacos
SpringCloud微服务配置管理、配置热更新
SpringCloud微服务配置管理、配置热更新
142 0
|
6月前
|
负载均衡 Java 开发者
Spring Cloud微服务架构中的配置管理与服务发现
Spring Cloud微服务架构中的配置管理与服务发现
|
5月前
|
负载均衡 Java 开发者
Spring Cloud微服务架构中的配置管理与服务发现
Spring Cloud微服务架构中的配置管理与服务发现
|
7月前
|
负载均衡 Nacos 数据库
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
208 1
|
7月前
|
应用服务中间件 Nacos 数据库
【微服务】4、NACOS 配置管理
【微服务】4、NACOS 配置管理
120 0
|
NoSQL API Nacos
Nacos是一个开源的微服务架构下的服务发现和配置管理工具,
Nacos是一个开源的微服务架构下的服务发现和配置管理工具,
162 2
|
存储 缓存 JSON
Nacos配置中心:优化微服务架构的配置管理利器
Nacos配置中心:优化微服务架构的配置管理利器
417 0