配置中心选型
- 配置中心
- 技术选型 Nacos、Apollo、Spring Cloud Config
- Nacos
- 流程图
- 搭建server
- 搭建Client
- Spring Cloud Config
- 搭建Config Server
- 搭建Config Client
- Apollo
- 流程图
配置中心
随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址等等
对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制等等
在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。
所以,配置中心应运而生。
技术选型 Nacos、Apollo、Spring Cloud Config
本人从市场中选取三个主流的配置中心对比。
- Nacos: 阿里开源的配置中心,也可以做服务发现。
- Apollo: 携程开源的配置管理中心,具备规范的权限、流程治理等特性。
- 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
流程图
在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版权协议,转载请附上原文出处链接及本声明。
原文链接: