什么是配置中心
配置中心,顾名思义,将配置中心化,说白了就是将配置从应用中抽取出来,统一管理,优雅的解决了配置的动态变更、权限管理、持久化、运维成本等问题。
配置与应用程序隔离开,单独管理配置。 总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。
- 配置集中管理、统一标准
- 配置与应用分离
- 实时更新
- 高可用
配置中心对比
功能点 | 优先级 | ctrip apollo | alibaba nacos |
---|---|---|---|
静态配置管理 | 高 | 支持 | 支持 |
动态配置管理 | 高 | 支持 | 支持 |
统一管理 | 高 | 支持 | 支持 |
多环境 | 中 | 支持 | 支持 |
本地配置缓存 | 高 | 支持 | 支持 |
配置生效时间 | 高 | 支持(HTTP长轮询1s内) | 支持(HTTP长轮询1s内) |
版本管理 | 高 | 支持 | 支持 |
权限管理 | 中 | 支持 | 不支持 |
灰度发布 | 中 | 支持 | 不支持 |
配置回滚 | 高 | 支持 | 支持 |
监听查询 | 高 | 支持 | 支持 |
多语言 | 低 | 主流语言,Open API | 主流语言,Open API |
配置格式校验 | 高 | 支持 | 支持 |
配置界面 | 中 | 统一界面 | 统一界面 |
业务系统侵入性 | 高 | 侵入性弱 | 侵入性弱 |
单机读(QPS) | 高 | 9000 | 15000 |
单机写 | 高 | 1100 | 1800 |
集群读(QPS)3机 | 高 | 27000 | 45000 |
集群写 3机 | 高 | 3300 | 5600 |
apollo逻辑图
apollo架构图
apollo 控制台
代码示例
apollo.go
/**
* Createby GoLand
* User xzw jsjxzw@163.com
* Date 2021/4/26
* Time 下午2:53
*/
package apollo
import (
"github.com/apolloconfig/agollo/v4"
"github.com/apolloconfig/agollo/v4/agcache/memory"
"github.com/apolloconfig/agollo/v4/component/log"
"github.com/apolloconfig/agollo/v4/env/config"
)
var client *agollo.Client
func init() {
// apollo配置
c := &config.AppConfig{
AppID: "G02-go-test",
Cluster: "default", // 一次限制一个集群数据
NamespaceName: "redis,application",
IP: "http://d-apollo.yundasys.com:30224",
IsBackupConfig: false,
}
agollo.SetCache(&memory.DefaultCacheFactory{})
agollo.SetLogger(&log.DefaultLogger{})
// 创建客户端
cli, err := agollo.StartWithConfig(func() (appConfig *config.AppConfig, err error) {
return c, nil
})
if err != nil {
panic(err)
}
client = cli
}
func GetClient() *agollo.Client {
return client
}
main.go
/**
* Createby GoLand
* User xzw jsjxzw@163.com
* Date 2021/4/26
* Time 下午2:51
*/
package main
import (
"github.com/gin-gonic/gin"
"imooc.com/ccmouse/learngo/apollo/apollo"
)
func main() {
r := gin.Default()
client := apollo.GetClient()
r.GET("/", func(c *gin.Context) {
cache := client.GetConfigCache("redis")
val,_ := cache.Get("host")
c.JSON(200, gin.H{"message": val})
})
r.Run()
}