Apollo

文章目录

  • Apollo
    • 1. 学习地址
    • 2. 概览
      • 1. 什么是配置
      • 2. 什么是配置中心
    • 3. Apollo简介
      • 1. 主流配置中心
        • 1.1. 功能特性对比
        • 1.2 总结
      • 2. Apollo简介
      • 3. Apollo特性
    • 4. Apollo快速入门
      • 1. 执行流程
      • 2. 安装Apollo
        • 2.1 运行时环境
        • 2.2 下载配置
        • 2.3 创建数据库
        • 2.4 启动Apollo
    • 5. 代码实现
      • 1. 发布配置
      • 2. 应用读取配置
        • 1. 新建Maven工程
        • 2. 编写测试类GetConfigTest
        • 3. 测试
        • 4. 修改配置
        • 5. 热发布
    • 6. Apollo应用
      • 1. Apollo工作原理
        • 1. 各模块职责
        • 2. 分步执行流程
      • 2. 核心概念
      • 3. 项目管理
        • 1. 基础设置
        • 2. 创建项目
        • 3. 删除项目
      • 4. 配置管理
        • 1. 添加发布配置项
        • 2. 修改配置
        • 3. 删除配置
        • 4. 添加Namespace

1. 学习地址

地址

2. 概览

1. 什么是配置

应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。

配置主要有以下几个特点:

  • 配置是独立于程序的只读变量

    • 配置首先是独立于程序的,同一份程序在不同的配置下会有不同的行为
    • 其次,配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
  • 配置伴随应用的整个生命周期
    • 配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。
  • 配置可以有多种加载方式
    • 常见的有程序内部硬编码,配置文件,环境变量,启动参数,基于数据库等
  • 配置需要治理
    • 权限控制:由于配置能改变程序的行为,不正确的配置甚至能引起灾难,所以对配置的修改必须有比较完善的权限控制
    • 不同环境、集群配置管理:同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境、集群配置管理

2. 什么是配置中心

传统单体应用存在一些潜在缺陷,如随着规模的扩大,部署效率降低,团队协作效率差,系统可靠性变差,维护困难,新功能上线周期长等,所以迫切需要一种新的架构去解决这些问题,而微服务( microservices )架构正是当下一种流行的解法。

不过,解决一个问题的同时,往往会诞生出很多新的问题,所以微服务化的过程中伴随着很多的挑战,其中一个挑战就是有关服务(应用)配置的。当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZLjlglrF-1668498215689)(http://img.pbteach.com/pbresource/image/course/apollo/20180925155636662.png)]

配置中心将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。

应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。

总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。

在系统架构中,配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是配置的管理和存取,但它是整个微服务架构中不可或缺的一环。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7FtBDKI-1668498215696)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190621162125196.png)]

集中管理配置,那么就要将应用的配置作为一个单独的服务抽离出来了,同理也需要解决新的问题,比如:版本管理(为了支持回滚),权限管理等。

总结一下,在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生,一个合格的配置中心需要满足:

  • 配置项容易读取和修改
  • 添加新配置简单直接
  • 支持对配置的修改的检视以把控风险
  • 可以查看配置修改的历史记录
  • 不同部署环境支持隔离

3. Apollo简介

1. 主流配置中心

目前市面上用的比较多的配置中心有:(按开源时间排序)

  1. Disconf

    2014年7月百度开源的配置管理中心,专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」。目前已经不再维护更新。

    https://github.com/knightliao/disconf

  2. Spring Cloud Config

    2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

    https://github.com/spring-cloud/spring-cloud-config

  3. Apollo

    2016年5月,携程开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    https://github.com/ctripcorp/apollo

  4. Nacos

    2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

    https://github.com/alibaba/nacos

1.1. 功能特性对比

由于Disconf不再维护,下面主要对比一下Spring Cloud Config、Apollo和Nacos。

功能点 Spring Cloud Config Apollo Nacos
配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内)
版本管理 支持(Git) 支持 支持
配置回滚 支持(Git) 支持 支持
灰度发布 支持 支持 不支持
权限管理 支持(依赖Git) 支持 不支持
多集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 只支持Java 主流语言,提供了Open API 主流语言,提供了Open API
配置格式校验 不支持 支持 支持
单机读(QPS) 7(限流所致) 9000 15000
单击写(QPS) 5(限流所致) 1100 1800
3节点读(QPS) 21(限流所致) 27000 45000
3节点写(QPS) 5限流所致() 3300 5600

1.2 总结

总的来看,Apollo和Nacos相对于Spring Cloud Config的生态支持更广,在配置管理流程上做的更好。Apollo相对于Nacos在配置管理做的更加全面,Nacos则使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。但对于一个开源项目的选型,项目上的人力投入(迭代进度、文档的完整性)、社区的活跃度(issue的数量和解决速度、Contributor数量、社群的交流频次等),这些因素也比较关键,考虑到Nacos开源时间不长和社区活跃度,所以从目前来看Apollo应该是最合适的配置中心选型。

2. Apollo简介

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwHcgqbL-1668498215697)(http://img.pbteach.com/pbresource/image/course/apollo/logo-simple.png)]

Apollo - A reliable configuration management system

https://github.com/ctripcorp/apollo

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用的不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

Apollo包括服务端和客户端两部分:

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

3. 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进行配置的修改和发布,并且具备完善的授权和权限控制

4. Apollo快速入门

1. 执行流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNDgKI3p-1668498215700)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221115143644155.png)]

操作流程如下:

1、在Apollo配置中心修改配置

2、应用程序通过Apollo客户端从配置中心拉取配置信息

用户通过Apollo配置中心修改或发布配置后,会有两种机制来保证应用程序来获取最新配置:一种是Apollo配置中心会向客户端推送最新的配置;另外一种是Apollo客户端会定时从Apollo配置中心拉取最新的配置,通过以上两种机制共同来保证应用程序能及时获取到配置。

2. 安装Apollo

2.1 运行时环境

Java

  • Apollo服务端:1.8+
  • Apollo客户端:1.7+

由于需要同时运行服务端和客户端,所以建议安装Java 1.8+。

MySQL

  • 版本要求:8.0

Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。

2.2 下载配置

访问Apollo的官方主页获取安装包(本次使用1.8.2版本):

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KynPob0g-1668498215702)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221115144027013.png)]

打开1.8.2发布链接,下载必须的安装包:https://github.com/ctripcorp/apollo/releases/tag/v1.3.0 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SBQ43MTw-1668498215705)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190916182704171.png)]

  1. 解压安装包后将apollo-configservice-1.8.2.jar, apollo-adminservice-1.8.2.jar, apollo-portal-1.8.2.jar放置于apollo目录下

2.3 创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB,ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套。

创建ApolloPortalDB,sql脚本下载地址:https://gitee.com/apolloconfig/apollo/blob/1.8.2/scripts/sql/apolloportaldb.sql

以MySQL原生客户端为例:

 source apollo/ApolloPortalDB.sql

验证ApolloPortalDB

导入成功后,可以通过执行以下sql语句来验证:

 select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;

注:ApolloPortalDB只需要在生产环境部署一个即可

创建ApolloConfigDB,sql脚本下载地址:https://gitee.com/apolloconfig/apollo/blob/1.8.2/scripts/sql/apolloconfigdb.sql

以MySQL原生客户端为例:

 source apollo/ApolloConfigDB.sql

验证ApolloConfigDB

导入成功后,可以通过执行以下sql语句来验证:

 select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;

2.4 启动Apollo

  1. 确保端口未被占用

    Apollo默认会启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用

  2. 启动apollo-configservice,在apollo目录下执行如下命令

    可通过-Dserver.port=8080修改默认端口

    java -Xms256m -Xmx256m -Dspring.datasource.url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=UTC" -Dspring.datasource.username=root -Dspring.datasource.password=root -jar apollo-configservice-1.8.2.jar
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ecUZ14r2-1668498215707)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190916185334497.png)]

启动apollo-adminservice

可通过-Dserver.port=8090修改默认端口

 java -Xms256m -Xmx256m -Dspring.datasource.url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=UTC" -Dspring.datasource.username=root -Dspring.datasource.password=root -jar apollo-adminservice-1.8.2.jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBIXAvvC-1668498215708)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917100531147.png)]

启动apollo-portal

可通过-Dserver.port=8070修改默认端口

java -Xms256m -Xmx256m -Ddev_meta=http://localhost:8080/ -Dserver.port=8070 -Dspring.datasource.url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=UTC" -Dspring.datasource.username=root -Dspring.datasource.password=root -jar apollo-portal-1.8.2.jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-77ztSo5Z-1668498215709)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917100803548.png)]

也可以使用提供的runApollo.bat快速启动三个服务(修改数据库连接地址,数据库以及密码)

 echo​set url="localhost:3306"set username="root"set password="123"​start "configService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?characterEncoding=utf8 -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -Dlogging.file=.\logs\apollo-configservice.log -jar .\apollo-configservice-1.3.0.jarstart "adminService" java -Xms256m -Xmx256m -Dapollo_profile=github -Dspring.datasource.url=jdbc:mysql://%url%/ApolloConfigDB?characterEncoding=utf8 -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -Dlogging.file=.\logs\apollo-adminservice.log -jar .\apollo-adminservice-1.3.0.jarstart "ApolloPortal" java -Xms256m -Xmx256m -Dapollo_profile=github,auth -Ddev_meta=http://localhost:8080/ -Dserver.port=8070 -Dspring.datasource.url=jdbc:mysql://%url%/ApolloPortalDB?characterEncoding=utf8 -Dspring.datasource.username=%username% -Dspring.datasource.password=%password% -Dlogging.file=.\logs\apollo-portal.log -jar .\apollo-portal-1.3.0.jar
  1. 运行runApollo.bat即可启动Apollo
  2. 待启动成功后,访问管理页面 apollo/admin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aYhfK0B-1668498215711)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716095006110.png)]

5. 代码实现

1. 发布配置

打开apollo :新建项目apollo-quickstart

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlZNaSqX-1668498215712)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919144634885.png)]

新建配置项sms.enable

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCKE0Ej7-1668498215714)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919144817438.png)]

确认提交配置项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsya6geU-1668498215715)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716091009049.png)]

发布配置项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I07u38LL-1668498215717)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716091034424.png)]

2. 应用读取配置

1. 新建Maven工程

打开idea,新建apollo-quickstart项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNRVqfrM-1668498215718)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919113331126.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hidTikeN-1668498215721)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919141052497.png)]

打开pom.xml文件添加apollo依赖,配置JDK为1.8

 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>​<groupId>com.pbteach</groupId><artifactId>apollo-quickstart</artifactId><version>1.0-SNAPSHOT</version>​<properties><java.version>1.8</java.version></properties>​<dependencies><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.1.0</version></dependency>​<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.28</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build></project>

2. 编写测试类GetConfigTest

新建com.pbteach.apollo.quickstart包,添加测试类GetConfigTest

添加如下代码读取sms.enable的值

 package com.pbteach.apollo.quickstart;​public class GetConfigTest {​// VM options:// -Dapp.id=apollo-quickstart -Denv=DEV -Ddev_meta=http://localhost:8080public static void main(String[] args) {Config config = ConfigService.getAppConfig();String someKey = "sms.enable";String value = config.getProperty(someKey, null);System.out.println("sms.enable: " + value);}}

3. 测试

配置VM options,设置系统属性:

 -Dapp.id=apollo-quickstart -Denv=DEV -Ddev_meta=http://localhost:8080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8BqCC9uV-1668498215723)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919145322810.png)]

运行GetConfigTest,打开控制台,观察输出结果 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1QXBNfl-1668498215725)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190916171554598.png)]

4. 修改配置

修改sms.enable的值为false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9p03kZi3-1668498215727)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919145948976.png)]

再次运行GetConfigTest,可以看到输出结果已为false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBk7JoUa-1668498215729)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919150422055.png)]

5. 热发布

修改代码为每3秒获取一次

 public class GetConfigTest {​public static void main(String[] args) throws InterruptedException {Config config = ConfigService.getAppConfig();String someKey = "sms.enable";​while (true) {String value = config.getProperty(someKey, null);System.out.printf("now: %s, sms.enable: %s%n", LocalDateTime.now().toString(), value);Thread.sleep(3000L);}}}

运行GetConfigTest观察输出结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tghcMIZD-1668498215731)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919150514947.png)]

在Apollo管理界面修改配置项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtdfXptq-1668498215732)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716091957990.png)]

发布配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2f1ccKoa-1668498215734)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716092045381.png)]

在控制台查看详细情况:可以看到程序获取的sms.enable的值已由false变成了修改后的true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rUTDUDI-1668498215736)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919150725071.png)]

6. Apollo应用

1. Apollo工作原理

下图是Apollo架构模块的概览

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnU0Q1hn-1668498215736)(http://img.pbteach.com/pbresource/image/course/apollo/overall-architecture.png)]

1. 各模块职责

上图简要描述了Apollo的总体设计,我们可以从下往上看:

  • Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
  • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  • Eureka提供服务注册和发现,为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的
  • Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
  • 在Eureka之上架了一层Meta Server用于封装Eureka的服务发现接口
  • Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
  • Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
  • 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中

2. 分步执行流程

  1. Apollo启动后,Config/Admin Service会自动注册到Eureka服务注册中心,并定期发送保活心跳。
  2. Apollo Client和Portal管理端通过配置的Meta Server的域名地址经由Software Load Balancer(软件负载均衡器)进行负载均衡后分配到某一个Meta Server
  3. Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client
  4. Meta Server获取Config Service和Admin Service(IP+Port)失败后会进行重试
  5. 获取到正确的Config Service和Admin Service的服务信息后,Apollo Client通过Config Service为应用提供配置获取、实时更新等功能;Apollo Portal管理端通过Admin Service提供配置新增、修改、发布等功能

2. 核心概念

  1. application (应用)

    这个很好理解,就是实际使用配置的应用,Apollo客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置

    关键字:appId

  2. environment (环境)

    配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置

    关键字:env

  3. cluster (集群)

    一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。

    关键字:cluster

  4. namespace (命名空间)

    一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等

    关键字:namespaces

它们的关系如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRT2fiPp-1668498215738)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190919170234623.png)]

3. 项目管理

1. 基础设置

部门管理

apollo 默认部门有两个。要增加自己的部门,可在系统参数中修改:

  • 进入系统参数设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DdAqunfQ-1668498215741)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716115120642.png)]

输入key查询已存在的部门设置:organizations

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwBYBE1K-1668498215742)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716115230543.png)]

修改value值来添加新部门,下面添加一个微服务部门:

 [{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"},{"orgId":"micro_service","orgName":"微服务部门"}]

添加用户

apollo默认提供一个超级管理员: apollo,可以自行添加用户

  • 新建用户张三

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-turzl98A-1668498215743)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190720181559923.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQ8Y2BnE-1668498215744)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190720181647695.png)]

2. 创建项目

  1. 打开apollo-portal主页:http://localhost:8070/
  2. 点击“创建项目”:account-service

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8v5PJpD-1668498215746)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716101236392.png)]

输入项目信息

  • 部门:选择应用所在的部门

  • 应用AppId:用来标识应用身份的唯一id,格式为string,需要和项目配置文件applications.properties中配置的app.id对应

  • 应用名称:应用名,仅用于界面展示

  • 应用负责人:选择的人默认会成为该项目的管理员,具备项目权限管理、集群创建、Namespace创建等权限

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbIRHanD-1668498215747)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716101502009.png)]

创建成功后,会自动跳转到项目首页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJevSgsx-1668498215748)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190720182520071.png)]

将修改和发布权限都授权给张三

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ipefyf5W-1668498215750)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190720182858984.png)]

使用zhangsan登录,查看项目配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PfEpn8tc-1668498215752)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190720183023342.png)]

  • 点击account-service即可管理配置

3. 删除项目

如果要删除整个项目,点击右上角的“管理员工具–》删除应用、集群…”

首先查询出要删除的项目,点击“删除应用”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0hmmQsct-1668498215753)(http://img.pbteach.com/pbresource/image/course/apollo/1570248995936.png)]

4. 配置管理

下边在account-service项目中进行配置。

1. 添加发布配置项

通过表格模式添加配置

  • 点击新增配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGeQRpWx-1668498215754)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917113735222.png)]

输入配置项:sms.enable,点击提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HZL5quti-1668498215756)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917113829772.png)]

通过文本模式编辑

Apollo除了支持表格模式,逐个添加、修改配置外,还提供文本模式批量添加、修改。 这个对于从已有的properties文件迁移尤其有用

  • 切换到文本编辑模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j5wnRO8l-1668498215758)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917113953166.png)]

输入配置项,并点击提交修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAD6UWSC-1668498215759)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917114051248.png)]

发布配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Scc5m4a2-1668498215760)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917114118871.png)]

2. 修改配置

找到对应的配置项,点击修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XlCoHLEC-1668498215761)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917114952136.png)]

  1. 修改为需要的值,点击提交
  2. 发布配置

3. 删除配置

找到需要删除的配置项,点击删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYTT9cJh-1668498215763)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917140811049.png)]

确认删除后,点击发布

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8GLDbs3p-1668498215765)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190917140920348.png)]

4. 添加Namespace

Namespace作为配置的分类,可当成一个配置文件。

以添加rocketmq配置为例,添加“spring-rocketmq” Namespace配置rocketmq相关信息。

  1. 添加项目私有Namespace:spring-rocketmq

    进入项目首页,点击左下脚的“添加Namespace”,共包括两项:关联公共Namespace和创建Namespace,这里选择“创建Namespace”

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPG3BwHD-1668498215766)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716135746538.png)]

添加配置项

 rocketmq.name-server = 127.0.0.1:9876 rocketmq.producer.group = PID_ACCOUNT

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gFhfptZ6-1668498215768)(http://img.pbteach.com/pbresource/image/course/apollo/image-20190716141257636.png)]

发布配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vv4hE2p-1668498215769)(E:\md\image\apollo\image-20190716141330583.png)]

Apollo学习(超详细)相关推荐

  1. 【libuv高效编程】libuv学习超详细教程3——libuv事件循环

    文章目录 libuv系列文章 libuv事件循环 uv_loop_t demo uv_loop_init() uv_run() uv_loop_close() 参考 例程代码获取 libuv系列文章 ...

  2. LiteFlow学习(超详细)

    LiteFlow学习(超详细) 文章目录 LiteFlow学习(超详细) 1. LiteFlow简介 1.1 前言 1.2 LiteFlow框架的优势 1.3 LiteFlow的设计原则 1.4 Li ...

  3. Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导

    专栏文章列表 Apollo Control--超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control--超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Ap ...

  4. CAT学习 (超详细)

    文章目录 0.学习目标 1.CAT入门 1.1 什么是调用链监控 1.1.1 架构的演进历史 1.1.2 调用链监控的需求 1.1.3 调用链监控的原理 1.2 什么是CAT PinPoint **S ...

  5. 请查收!深度学习超详细发展路线大公开!

    众所周知,在深度学习领域,有3颗明珠闪闪发亮--(自然语言处理(NLP).计算机视觉(CV).推荐系统(Rec),它们几乎涵盖了大部分AI行业的领域和技术,也是大家的求职方向. 经调查发现大多数同学面 ...

  6. MySQL 运维 - 从零开始学习 | 超详细

    MySQL 运维 - 从零开始学习 一.数据库类型 ► 常见的数据库类型 二.数据库管理系统 DBMS ►数据库系统 ►关系型数据库 ►非关系型数据库 Not Only SQL 三.安装MySQL ► ...

  7. 【libuv高效编程】libuv学习超详细教程2——libuv框架初窥

    文章目录 libuv框架 同步I/O 异步I/O Handles 和 Requests 事件循环 参考 libuv框架 从官方的文档可以找到一个设计框架的图片:libuv/docs/src/stati ...

  8. Linux系统学习 超详细常见实用命令

    文章目录 常见目录介绍 系统操作 帮助命令 man 帮助 help 帮助 info 帮助 显示当前的目录名称 文件查看 建立目录 删除空目录 复制文件 移动文件 删除文件 查找文件 find 文件路径 ...

  9. 一起学JAVA 反射学习(超详细)

    1 什么是反射? Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",也有称作"自省&quo ...

  10. 【libuv高效编程】libuv学习超详细教程1——libuv的编译与安装

    文章目录 libuv简介 下载libuv 安装必要的依赖 拉取libuv源码 编译使用 验证编译安装是否完成 简单实用 libuv简介 libuv 是一个高性能的,事件驱动的I/O,并且支持多平台的网 ...

最新文章

  1. python使用matplotlib可视化、为可视化图像添加标题(title)、自定义标题的字体格式、字体大小、字体颜色等
  2. Java中 多态的理解
  3. Python-使用python-memcache操作Memcached
  4. Java 8 中处理日期和时间示例
  5. 图灵测试是什么?为什么AlphaGo那么牛却过不了?
  6. Windows下Squid 3.5安装及配置代理服务器
  7. nasm实现的用vmware运行自做的linux启动盘的引导代码
  8. Meta率先发布虚拟世界Horizon Worlds
  9. 2020年最新的PHP面试题(附答案)
  10. 勒索病毒家族信息判断
  11. 全国计算机二级c真题及答案,全国计算机二级c语言历年真题及答案
  12. pdfjs实现pdf预览
  13. 企业微信支付提示请在微信客户端打开链接_微信h5支付?
  14. 中联医疗系统服务器,中联电子病历系统(ZLEMR)
  15. 一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)
  16. 【bzoj3162】独钓寒江雪
  17. VUE项目 格林威治时间转换为北京时间
  18. 全球人造丝卫生棉条行业调研及趋势分析报告
  19. 准确率、精确率、召回率、F1-score
  20. ios逆向学习环境安装(一)

热门文章

  1. Failed to open \EFI\BOOT\mmx64.efi问题
  2. python代码雨在桌面实现_今天七夕节,外面下着大雨,用Python的tkinter做一个下爱心雨的特效,发给妹子...
  3. 49-Linux_malloc及4G虚拟空间分布
  4. 动态链接库(一)--动态链接库简介
  5. JavaScript-模块化开发(一)基础知识
  6. nginx格式化工具-nginxfmt
  7. linux重启Apache服务的常用命令
  8. 如何快速便捷为方法添加注释?
  9. 西安尚学堂练习9.5|Java编程笔试面试题
  10. Rust 和Erlang的对比