配置中心选型

配置中心

随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址等等
对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制等等
在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。
所以,配置中心应运而生。

技术选型 Nacos、Apollo、Spring Cloud Config

本人从市场中选取三个主流的配置中心对比。

  1. Nacos: 阿里开源的配置中心,也可以做服务发现。
  2. Apollo: 携程开源的配置管理中心,具备规范的权限、流程治理等特性。
  3. Spring Cloud Config: Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

产品功能对比图:
对比项目/配置中心 | spring cloud config |apollo |nacos

对比项目/配置中心spring cloud configapollonacos
配置实时推送支持(需要集成Spring Cloud Bus)支持(HTTP长轮询1s内)支持(HTTP长轮询1s内)
版本管理支持(Git)自动管理自动管理
配置回滚支持(Git)支持支持
权限管理支持支持支持
灰度发布支持支持支持
多集群多环境支持支持支持
多语言只支持JavaGo,C++,Python,Java,.net,OpenAPIPython,Java,Nodejs,OpenAPI
配置格式校验不支持支持支持
通信协议HTTP和AMQPHTTPHTTP
数据一致性Git保证数据一致性,Config-Server从Git读取数据数据库模拟消息队列,Apollo定时读消息HTTP异步通知
单机读(tps)7(限流所制)900015000
单机写(tps)5(限流所制)11001800
3节点读21(限流所制)2700045000
3节点写5(限流所制)3300560033

Nacos

流程图

在这里插入图片描述
在Nacos中 分两个角色,一是 server,二是client。

搭建server

下载 nacos-server-1.4.1
修改config目录下application.properties文件,开启mysql

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://10.200.60.16:3306/config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=****
db.password.0=******
搭建Client
1.添加依赖
		 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
2.修改BootStrap.yml
spring:
  profiles:
    active: ${env:dev}
  application:
    name: dp-podcast-service
server:
  port: 8083

---
spring:
  profiles: dev
  application:
    name: dp-podcast-service
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #Nacos配置中心地址
        file-extension: yml #指定yml格式的配置
        group: DEFAULT_GROUP
        refresh-enabled: true

Spring Cloud Config

在这里插入图片描述
在spring cloud config 中,分两个角色,一是config server,二是config client。
Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置文件内容,也可以使用SVN存储,或者是本地文件存储。
Config Client是Config Server的客户端,用于操作存储在Config Server中的配置内容。
微服务在启动时会请求Config Server获取配置文件的内容,请求到后再启动容器。

搭建Config Server
// 1. 添加 pom 文件依赖包
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
// 2.修改配置application文件
spring:
  application:
    # 应用名称
    name: config-single-server
  cloud:
    config:
      server:
        git:
          #配置文件所在仓库
          uri: https://github.com/wangkan0426/chuanyi.git
          #登录账号
          username: wangkan0426
          #登录密码
          password: *****
          #配置文件所在根目录
          search-paths: 'podcast/{application}'
          #force-pull: true
          skip-ssl-validation: true
//3. 在启动类上添加 @EnableConfigServer
搭建Config Client
1.添加依赖包
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
2.增加bootstrap.yml文件

spring:
  profiles:
    active: ${env:dev}
  application:
    name: dp-podcast-service
server:
  port: 8081
---

spring:
  profiles: dev
  application:
    name: dp-podcast-service
  cloud:
    config:
      uri: http://10.200.60.27:8082/
      label: master
      profile: dev
      fail-fast: true
      retry:
        max-attempts: 2
        max-interval: 3000

Apollo

流程图

在这里插入图片描述

apollo-集中式配置中心的作用和原理

作用:

正是基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

统一管理不同环境、不同集群的配置

Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
配置修改实时生效(热发布)

用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
版本发布管理

所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
灰度发布

支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
权限管理、发布审核、操作审计

应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
所有的操作都有审计日志,可以方便地追踪问题
客户端配置信息监控

可以在界面上方便地看到配置在被哪些实例使用
提供Java和.Net原生客户端

提供了Java和.Net的原生客户端,方便应用集成
支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
同时提供了Http接口,非Java和.Net应用也可以方便地使用
提供开放平台API

Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等
对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制
部署简单

配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少
目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来
Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数
————————————————
版权声明:本文为CSDN博主「凉生_明」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012798703/article/details/81099222
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值