Apollo快速入门(安装及简单使用)

导读:本篇文章讲解 Apollo快速入门(安装及简单使用),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

  1. Disconf

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

    https://github.com/knightliao/disconf

  2. Spring Cloud Confifig

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

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

  3. Apollo

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

    https://github.com/ctripcorp/apollo

  4. Nacos

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

    https://github.com/alibaba/nacos

由于Disconf不再维护,下面我们主要分析下Spring Cloud Confifig、Apollo和Nacos。

Apollo和Nacos相对于Spring Cloud Config的生态支持更广,在配置管理流程上做的更好。Apollo相对于Nacos在配置管理做的更加全面,Nacos则使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。 但对于一个开源项目的选型,项目上的人力投入(迭代进度、文档的完整性)、社区的活跃度(issue的数量和解决速度、Contributor数量、社群的交流频次等),这些因素也比较关键。 可能目前我们基本都在使用Nacos,但是关于Apollo我们还是有必要了解一下的。

1. Apollo简介

image-20220101131914807

https://github.com/ctripcorp/apollo

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

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

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

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

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

3. Apollo快速入门

3.1 执行流程

image-20220101132659765

操作流程如下:

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

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

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

3.2 安装Apollo

3.2.1 运行时环境

Java

  • Apollo服务端:1.8+

  • Apollo客户端:1.7+

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

MySQL

  • 版本要求:5.6.5+

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

3.2.2 下载配置

  1. 访问Apollo的官方主页获取安装包: (我使用的1.9版本)

    https://github.com/ctripcorp/apollo/tags

image-20220101133056257

  1. 打开1.9发布链接,下载必须的安装包:https://github.com/apolloconfig/apollo/releases/tag/v1.9.0

    下载三个zip文件即可

image-20220101133225402

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

    image-20220101135407054

3.2.3 创建数据库

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

  1. 创建ApolloPortalDB,sql脚本下载地址:

    https://github.com/apolloconfig/apollo-build-scripts/blob/master/sql/apolloportaldb.sql

  2. 验证ApolloPortalDB

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

    select `Id`, `AppId`, `Name` from ApolloPortalDB.App;
    

    image-20220101140137865

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

  3. 创建ApolloConfigDB,sql脚本下载地址:

https://github.com/apolloconfig/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql

  1. 验证ApolloConfigDB

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

    select `NamespaceId`, `Key`, `Value`, `Comment` from ApolloConfigDB.Item;
    

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

3.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?serverTimezone=Asia/Shanghai -Dspring.datasource.username=root -Dspring.datasource.password=123456 -Dsever.port=8080 -jar apollo-configservice-1.9.0.jar
    

    image-20220101141234468

  3. 启动apollo-adminservice

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

    java -Xms256m -Xmx256m -Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?serverTimezone=Asia/Shanghai -Dspring.datasource.username=root -Dspring.datasource.password=123456 -Dsever.port=8080 -jar apollo-adminservice-1.9.0.jar
    

    image-20220101141449681

  4. 启动apollo-portal

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

    java -Xms256m -Xmx256m -Dapollo_profile=github,auth -Ddev_meta=http://localhost:8080/ -Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?serverTimezone=Asia/Shanghai -Dspring.datasource.username=root -Dspring.datasource.password=123456 -Dapollo_profile=github,auth -Ddev_meta=http://localhost:8080/ -Dsever.port=8070 -jar apollo-portal-1.9.0.jar
    

    image-20220101141532680

  5. 也可以通过提供的脚本命令直接启动,但是需要编辑其中的数据库连接信息

  6. 待启动成功后,访问管理页面

    访问 http://localhost:8070 地址,默认登录账号密码为u: apollo p: admin

image-20220101141644735

image-20220101141654443

3.3 代码实现

3.3.1 发布配置

  1. 打开apollo :新建项目apollo-quickstart

    image-20220101141922142

  2. 新建配置项sms.enable

    image-20220101142004517

    确认提交配置项

    image-20220101142037306

  3. 发布配置项

    image-20220101142113819

3.3.2 应用读取配置

  1. 新建Maven工程

    打开idea,新建一个apollo-quickstart的maven项目

    然后我们添加相关依赖即可。

<dependencies>
    <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.9.0</version>
    </dependency>
</dependencies>

如何出现依赖拉不下来的情况…
解决方案
下载源代码
https://github.com/ctripcorp/apollo.git
编译其中的 apollo-client 包并maven install安装到本地
引入编译后的jar包即可

  1. 编写测试类GetConfigTest

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

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

  2. 测试

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

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

    image-20220101150035691

    运行GetConfigTest,打开控制台,观察输出结果:

image-20220101150130216

3.3.3 修改配置

  1. 修改sms.enable的值为false,并且重新发布。

    image-20220101150254398

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

    image-20220101150403256

3.3.4 热发布

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

    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);
        }
    }
    
  2. 运行GetConfigTest观察输出结果

    image-20220101150559871

  3. 在Apollo管理界面修改配置项并发布

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

    image-20220101150644526

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16744.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!