一. 前言:

从上篇Apollo动态配置基础使用之后,小熙继续补上多环境以及集群配置和灰度等。

二. 环境和准备:

这里小熙由于条件和电脑配置有限,就先用虚拟机配置了。

  1. 还是上文中的虚拟机基本配置:java8,apollo 1.7等(有条件的可以把不同节点分到不同机器即可)
  2. apollo相关节点(本次小熙将会配置三个环境):

环境

地址

服务名


localhost:8070

apollo-portal

DEV

localhost:8080

localhost:8090

apollo-configservice

apollo-adminservice

PRO

localhost:8081

localhost:8091

apollo-configservice

apollo-adminservice

UAT

localhost:8082

localhost:8092

apollo-configservice

apollo-adminservice

远程环境简图:

apollo docker 多环境 安装 apollo客户端多环境配置_apollo多环境

  1. 数据库配置(数据库在本机上):

环境

地址

数据库名称


192.168.11.41:3306

ApolloPortalDB

DEV

192.168.11.41:3306

ApolloConfigDB

PRO

192.168.11.41:3306

ApolloConfigDBPro

UAT

192.168.11.41:3306

ApolloConfigDBUat

如图:

apollo docker 多环境 安装 apollo客户端多环境配置_apollo多集群_02

这里数据库的复制传输可以借助Navicat的功能。
如图:

apollo docker 多环境 安装 apollo客户端多环境配置_apollo灰度发布_03

三. 修改相关配置:

  1. 添加portal数据库相关环境配置:

    2. 添加portal相关meta相关配置:

    3. 其他环境的config服务和admin服务注意修改对应数据库连接。
    如图:

    4. 代码中添加对应修改监听配置类:
/**
 * @author chengxi
 * @date 2021/12/9 16:12
 */
@Configuration
public class ApolloConfig {

    @ApolloConfigChangeListener("application")
    private void apolloConfigChange(ConfigChangeEvent changeEvent) {
        changeEvent.changedKeys().forEach(key -> {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println(String.format("Found apollo change - key: %s, oldValue: %s, newValue: %s, changeType: %s",
                    change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
        });

    }

}

当我们重新打开apollo的配置时,就有对应的变化了。

如图:

apollo docker 多环境 安装 apollo客户端多环境配置_apollo多集群_04

四. 验证多环境:

  1. 修改项目中对应配置(这里看个人喜好选择如何抒写,这里可以提出bootstrap.yml,现在这样好展示)
    如图:
  2. 修改apollo配置并获取:
    注意这里对应环境的端口要在linux的防火墙中开放,小熙忘记开放之后,一度怀疑过自己。
    (1)修改之前:


    (2)修改之后:


    (3)注意看控制台,我们添加监控代码之后,在修改之后是有对应展示的。
    如图:

    到此,小熙要介绍的多环境就介绍完了。

五. 多集群:

apollo的多集群分两种,一种是多服务节点HA,另一种是内置功能多集群

  1. 其实HA多集群也很简便,因为config服务中已经集成了eureka所以当做正常微服务部署即可,如果想把portal也做成集群,可以加入注册中心等负载路由一下就好了。
    添加其他注册地址:
    如图:
  2. 内置功能多集群(其主要是在不改变appId的情况下,让不同实例可以使用不同的配置)
    (1)创建集群


    (2)如上图,在对应位置添加配置文件即可:
env=dev
idc=test-cluster

六. 通用配置:

添加通用配置,这里选择创建通用namespace之后(和正常创建使用一样,只是相应创建选择目录不一样而已),创建其他项目配置的时候可以直接选择引用,当修改配置时也只会在当前项目配置上覆盖而已不用担心通用配置:

  1. 创建公共namespace
  2. 其他项目选择通用配置(在对应项目配置中点击添加namespace):

七. 灰度配置:

通过灰度发布功能,可以实现:

  • 对于一些对程序有比较大影响的配置,可以先在一个或者多个实例生效,观察一段时间没问题后再全量发布配置
  • 对于一些需要调优的配置参数,可以通过灰度发布功能来实现A/B测试。可以在不同的机器上应用不同的配置,不断调整、测评一段时间后找出较优的配置再全量发布配置
  1. 添加灰度节点:
  2. 修改灰度配置并发布:

    之后对应节点就会生效了。
  3. 测试验证(小熙这里只有一个节点访问了,所以测试的也是这个唯一节点,有条件的话可以测试分开):

八. 后语:

以上就是小熙关于apollo简单并深入的分享了,下篇继续分享apollo架构以及源码相关。