什么是配置中心

配置中心,顾名思义,将配置中心化,说白了就是将配置从应用中抽取出来,统一管理,优雅的解决了配置的动态变更、权限管理、持久化、运维成本等问题。

配置与应用程序隔离开,单独管理配置。 总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。

  • 配置集中管理、统一标准
  • 配置与应用分离
  • 实时更新
  • 高可用

配置中心对比

功能点 优先级 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 控制台

代码示例

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()
}

滚动至顶部