Apollo基础(一)

2018-10-09

Apollo基础(一)

[TOC]

1.概念

配置中心,实时监听最新配置列表,动态添加配置

实时生效/灰度发布/分环境/分集群管理配置/完善权限/本地离线等

本地离线

  • Mac/Linux: /opt/data/{appId}/config-cache
  • Windows: C:\opt\data{appId}\config-cache

本地配置文件会以下面的文件名格式放置于本地缓存路径下:

{appId}+{cluster}+{namespace}.properties

支持四个维度管理的kv配置:

  1. application(应用)
  2. env(环境)
  3. cluster(集群)
  4. namespace(命名空间)

1-2.配置的基本概念

独立于程序的只读变量
配置伴随应用的整个生命周期
配置可以有多种加载方式:
  1. hard code
  2. 配置文件
  3. 环境变量
  4. 启动参数
  5. 基于数据库等
配置治理:
  1. 权限控制
  2. 不同的环境/集群配置管理
  3. 框架类组件配置管理

2.组成

四个核心模块(功能相关),三个辅助模块(辅助服务发现的模块)

———————————-[核心功能模块]————————————

2-1.ConfigService

提供配置获取接口

提供配置推送接口

服务于Apollo客户端

2-2.AdminService

提供配置管理接口

提供配置修改发布接口

服务于管理界面Portal

2-3.Client

为应用获取配置,支持实时更新

通过MetaServer获取ConfigService的服务列表

使用客户端软负载SLB方式调用ConfigService

2-4.Portal

配置管理界面

通过MetServer获取AdminService列表

使用客户端软辅在SLB方式调用AdminSerivce

———————————–[辅助服务发现模块]————————————

2-5.Eureka

用于服务注册和发现,

ConfigService/AdminService注册实例并定期报心跳

ConfigService在一起部署

2-6.MetaServer

Portal通过域名访问MetaServer获取AdminService服务列表

Client通过域名访问MetaServer获取ConfigService服务地址

相当于Eureka Proxy

2-7.NginxLB

和域名系统配合,协助Portal访问MetaServer,获取AdminService列表

和域名系统配合,协助client访问MetaServer,获取ConfigService列表

架构图

3.Apollo使用指南

https://github.com/ctripcorp/apollo/wiki/Apollo%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

4.API接入管理(Protal)

https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D

5.接入使用(Client)

5-1.常用方案:

引入依赖

1
2
3
4
5
6
7
8
9
10
maven
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.0.0</version>
</dependency>
or

gradle
compile 'com.ctrip.framework.apollo:apollo-client:1.0.0'

在properties中配置命名空间等即可使用(当做在线properties即可)

1
2
3
4
5
6
app.id=apollo-id
apollo.meta=http://localhost:8080
env=DEV
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled = true
apollo.bootstrap.namespaces =redis

5-2.方案二

Bean的形式注入到Spring中(该场景使用不多)(支持注解/XML等形式)

配置类

1
2
3
4
5
6
7
8
9
10
11
12
public class RedissonSingleConfig {
@Value("${serverConfig:Single}")
private String serverConfig;
@Value("${singleServerConfig.address:127.0.0.1}")
private String address;
@Value("${singleServerConfig.connectionPoolSize:100}")
private Integer connectionPoolSize;
@Value("${keepAlive:true}")
private Boolean keepAlive;
@Value("${database:0}")
private Integer database;
//get set 略

Bean注入类

1
2
3
4
5
6
7
8
9
@Configuration
@EnableApolloConfig(value = {"namespace"}) //可省略指定命名空间,默认为application私有空间
//@EnableApolloConfig({"FX.apollo", "FX.soa"}) //指定多个命名空间
public class ApolloConfig {
@Bean
public RedissonSingleConfig getRedissonSingleConfig(){
return new RedissonSingleConfig();
}
}

通过上面的拉取和注入即可将Apollo的配置注入到Spring中使用,更多内容可参考官网java接入指南

https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#31-api%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F

5-3.方案三

动态切换数据库

https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D

Hikaricp官网(动态切换jar包)

http://brettwooldridge.github.io/HikariCP/

6.Apollo使用

  1. 创建项目

  2. 创建配置空间(private/public)

私有空间是本项目使用,

公共空间是通用空间,其他项目都可以使用

注意:

公共空间使用时建议关联一个新副本,该副本改动的配置属性为覆盖效果,可覆盖公共空间的部分配置

优秀分析传送门:

https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ