微服务之配置中心
「配置中心」的思路就是把项目中各种配置、各种参数、各种开关,全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。 当各个服务需要获取配置的时候,就来「配置中心」的接口拉取。 当「配置中心」中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。
除了管理配置的有点之外,引入配置中心的有点还有:
- 当配置发生变化,需要重启配置,通过配置中心配合viper,配置中心可以实现配置动态修改。
- 对于一些需要定时更新的配置,例如密钥,统一更新会非常方便
- 避免多语言环境下导致的问题
技术选型
从Golang
技术栈的角度出发,推荐使用配置中心有两个选型,Nacos
和Apollo
作为学习目的,这里推荐使用Nacos
,目前已经是官方支持。
Nacos
官方文档:
Nacos
Nacos Docker
通过docker
安装
1 | docker run --name nacos-quick -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:2.0.2 |
管理页面是 http://127.0.0.1:8848/nacos
,用户名密码都是nacos
概念
命名空间
隔离配置群,将某些配置集中放在某一个ns之下,例如数据库的配置,都可以放在一个db的ns中。
命名空间一般用于区分微服务
组(GROUP)
组用于区分环境组,例如开发环境、测试环境、生产环境
配置集(Data Id)
一个配置集就是一个配置文件,可以很灵活
使用
Nacos-sdk-go
1 | go get -u github.com/nacos-group/nacos-sdk-go/v2 |
获取配置和监听配置
1 | package main |
运行
1 | 2022/09/29 20:17:57 [INFO] logDir:<./nacos/log> cacheDir:<./nacos/cache> |
缓存配置
1 | nacos |
集成到服务中
go
支持将json
反序列化成struct
1 | package main |
通过反序列化成json即可
1 | config, err := configClient.GetConfig(vo.ConfigParam{ |
推荐阅读:
微服务架构之「 配置中心 」
分布式配置中心(Nacos、Apollo)选型比较
Nacos、Apollo、Config 配置中心选型