配置中心选型

  • 配置中心
  • 技术选型 Nacos、Apollo、Spring Cloud Config
  • Nacos
  • 流程图
  • 搭建server
  • 搭建Client
  • Spring Cloud Config
  • 搭建Config Server
  • 搭建Config Client
  • Apollo
  • 流程图


配置中心

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

技术选型 Nacos、Apollo、Spring Cloud Config

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

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

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

对比项目/配置中心

spring cloud config

apollo

nacos

配置实时推送

支持(需要集成Spring Cloud Bus)

支持(HTTP长轮询1s内)

支持(HTTP长轮询1s内)

版本管理

支持(Git)

自动管理

自动管理

配置回滚

支持(Git)

支持

支持

权限管理

支持

支持

支持

灰度发布

支持

支持

支持

多集群多环境

支持

支持

支持

多语言

只支持Java

Go,C++,Python,Java,.net,OpenAPI

Python,Java,Nodejs,OpenAPI

配置格式校验

不支持

支持

支持

通信协议

HTTP和AMQP

HTTP

HTTP

数据一致性

Git保证数据一致性,Config-Server从Git读取数据

数据库模拟消息队列,Apollo定时读消息

HTTP异步通知

单机读(tps)

7(限流所制)

9000

15000

单机写(tps)

5(限流所制)

1100

1800

3节点读

21(限流所制)

27000

45000

3节点写

5(限流所制)

3300

560033

Nacos

流程图

配置中心Apollo springboot_java


在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

配置中心Apollo springboot_spring_02


在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 springboot_spring_03

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版权协议,转载请附上原文出处链接及本声明。

原文链接:

配置中心Apollo springboot_Server_04