Apollo(阿波罗)分布式配置中心

news2024/11/24 18:26:42

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

文章目录

  • 一、Apollo简介
    • 1.1 Nacos、Nacos、Spring Cloud Config 对此
    • 1.2 Apollo特性
    • 1.3 执行流程
  • 二、Apollo安装
    • 2.1 下载安装包
    • 2.2 创建数据库
    • 2.3 启动Apollo
  • 三、使用步骤
    • 3.1 发布配置
    • 3.2 应用读取配置
      • 3.2.1 引入依赖
      • 3.2.2 添加配置
      • 3.2.3 测试
  • 四、Apollo工作原理
    • 4.1 整体架构
    • 4.2 分步执行流程
    • 4.3 核心概念
  • 五、项目管理
    • 5.1 部门管理
    • 5.2 添加用户
    • 5.3 删除项目
    • 5.4 添加命名空间

在这里插入图片描述

一、Apollo简介

官方文档:https://github.com/apolloconfig/apollo

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

目前市面上用的比较多的配置中心有:

  1. Disconf
    2014年7月百度开源的配置管理中心,同样具备配置的管理能力,不过目前已经不维护了,最近的一次提交是两年前了。
  2. Spring Cloud Config
    2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。
  3. Apollo
    2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性。
  4. Nacos
    2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

配置中心核心概念的对比
由于Disconf不再维护,下面对比一下Spring Cloud Config、Apollo和Nacos。

1.1 Nacos、Nacos、Spring Cloud Config 对此

NacosNacosSpring Cloud Config
灰度发布不支持支持IP级别的灰度发布第三方框架支持
权限管理不支持基本完善第三方平台支持
版本管理&回滚支持之前回滚上一个版本,properties提供跨版本的回滚第三方平台支持
配置实时推送(动态刷新)支持,但是敏感加密后的动态刷新出现无法解密基本完善第三方框架支持
敏感加密引入Jasypt引入Jasypt原生支持
多环境支持支持支持
高可用支持支持支持
社区支持一般活跃一般

Spring Cloud Config作为官方提供的配置中心,适合学习和刚开始使用分布式框架的项目使用

Nacos作为阿里2018年开源的产品,有阿里背书,且服务发现和配置集与一体。但是从目前的发展来看,阿里开发重心在于服务发现端,配置中心相关功能开发相对滞后,适合中小型企业使用

Apollo是携程2016年开源的配置中心,经历了5年的迭代,现在已经是一个很完善的产品,能满足大型互联网的大多数需要

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

1.2 Apollo特性

  1. 统一管理不同环境、不同集群的配置
  2. 配置修改实时生效(热发布)
  3. 版本发布管理
  4. 灰度发布
  5. 权限管理、发布审核、操作审计
  6. 客户端配置信息监控
  7. 提供Java和.Net原生客户端
  8. 提供开放平台API

1.3 执行流程

在这里插入图片描述
操作流程如下:

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

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

    用户通过Apollo配置中心修改或发布配置后,会有两种机制来保证应用程序来获取最新配置:

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

二、Apollo安装

2.1 下载安装包

  1. 访问Apollo的官方主页https://github.com/apolloconfig/apollo/tags获取安装包,(本次使用1.3版本)
    在这里插入图片描述2. 下载对应的安装包https://github.com/apolloconfig/apollo/releases/tag/v1.3.0
    在这里插入图片描述
    3, . 解压安装包后将apollo-configservice-1.3.0.jar, apollo-adminservice-1.3.0.jar, apollo-portal-1.3.0.jar放置于
    apollo目录

2.2 创建数据库

Apollo服务端共需要两个数据库: ApolloPortalDBApolloConfigDB

  1. 创建ApolloPortalDB,sql脚本下载地址:
    https://github.com/apolloconfig/apollo/blob/v1.3.0/scripts/db/migration/portaldb/V1.0.0__initialization.sql
  2. . 创建ApolloConfigDB,sql脚本下载地址:
    https://github.com/apolloconfig/apollo/blob/v1.3.0/scripts/db/migration/configdb/V1.0.0__initialization.sql
    在这里插入图片描述

2.3 启动Apollo

  1. 确保端口未被占用
    Apollo默认会启动3个服务,分别使用8070(apollo‐portal), 8080(apollo-configservice), 8090(apollo‐adminservice)端口,请确保这3个端口当前没有被使用

  2. windows环境下
    apollo目录中创建runApollo.bat文件,快速启动三个服务(修改数据库连接地址,数据库以及密码

    echo
    
    set url="localhost:3306"
    set username="root"
    set password="123456"
    
    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.jar
    start "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.jar
    start "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
    
  3. Linux环境下

    apollo目录中创建runApollo.sh文件,快速启动三个服务(修改数据库连接地址,数据库以及密码

    #!/bin/sh
    
    url="localhost:3306"
    username="root"
    password="123456"
    
    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 -Dserver.port=8080 -jar apollo-configservice-1.3.0.jar &
    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 -Dserver.port=8090 -jar apollo-adminservice-1.3.0.jar & 
    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% -jar apollo-portal-1.3.0.jar &
    
    

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

  • http://localhost:8070/
  • 账号/密码:apollo/admin

在这里插入图片描述
在这里插入图片描述

三、使用步骤

3.1 发布配置

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.2 应用读取配置

3.2.1 引入依赖

<!--Apollo依赖-->
   <dependency>
       <groupId>com.ctrip.framework.apollo</groupId>
       <artifactId>apollo-client</artifactId>
       <version>1.1.0</version>
   </dependency>

3.2.2 添加配置

app:
  id: apollo-config   # app.id是必须配置的
apollo:
  meta: http://localhost:8080 # Apollo Meta Server 地址(它的注册中心地址,eureka地址)
  bootstrap:
    enabled: true   #是否开启 Apollo 配置预加载功能。默认为 false。
    eagerLoad:
      enable: true  #是否开启 Apollo 支持日志级别的加载时机。默认为 false。
    # 指定 namespace
    namespaces: application  #使用的 Apollo 的命名空间,默认为 application,多个用逗号隔开

3.2.3 测试

Apollo添加配置
在这里插入图片描述
项目读取

@Component
@Data
public class Setting {
    @Value("${setting.upload-addr}")
    private String uploadAddr;
    @Value("${setting.path}")
    private String path;
}
@RestController
public class TestController {
    @Autowired
    private Setting setting;
    @GetMapping("/setting")
    public Map getSetting(){
        Map map = new HashMap<>();
        map.put("uploadAddr",setting.getUploadAddr());
        map.put("path",setting.getPath());
        System.err.println(map);
        return map;
    }
}

启动类添加@EnableApolloConfig注解

@SpringBootApplication
@EnableApolloConfig
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

成功读取
在这里插入图片描述

四、Apollo工作原理

4.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进程中

4.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提供配置新增、修改、发布等功能

4.3 核心概念

  1. application (应用)
    这个很好理解,就是实际使用配置的应用,Apollo客户端在运行时需要知道当前应用是谁,从而 可以去获取对应的配置
    关键字:appId
  2. environment (环境)
    配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置
    关键字:env
  3. cluster (集群)
    一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北
    京机房的应用实例分为另一个集群。
    关键字:cluster
  4. namespace (命名空间)
    一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等
    关键字:namespaces

在这里插入图片描述

五、项目管理

5.1 部门管理

在这里插入图片描述
查询organizations
在这里插入图片描述编辑后保存,退出重新登录,则发现部门添加成功

在这里插入图片描述

5.2 添加用户

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

5.3 删除项目

在这里插入图片描述

在这里插入图片描述

5.4 添加命名空间

在这里插入图片描述

在这里插入图片描述添加配置
在这里插入图片描述

测试读取

public class GetConfigTest {
    public static void main(String[] args) {
//        Config config = ConfigService.getAppConfig();  // 读取默认的namespace的配置信息
        Config config = ConfigService.getConfig("spring-test");//读取指定namespace下的配置信息

        String someKey = "date";
        String value = config.getProperty(someKey, null);
        System.out.println("读取的配置信息为: " + value);
    }

}

添加虚拟机参数

-Dapp.id=apollo-config -Denv=DEV -Ddev_meta=http://localhost:8080
在这里插入图片描述
读取成功
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣-459.重复的子字符串

Idea 看题解的KMP自己手动实现太难了&#xff0c;我还是选择容易理解的暴力枚举叭 AC Code class Solution { public:bool isCheck(string subs, string s) {if(s.size() % subs.size() ! 0) return false;int k s.size() / subs.size();string comp "";while(k-…

【微信小程序】6天精准入门(第1天:小程序入门)

一、介绍 1、什么是小程序 小程序是一种轻量级的应用程序&#xff0c;可以在移动设备上运行&#xff0c;不需要用户下载和安装。它们通常由企业或开发者开发&#xff0c;用于提供特定功能或服务。 微信小程序&#xff08;wei xin xiao cheng xu&#xff09;&#xff0c;简称小程…

设备巡检管理系统—动态化管理设备

为进一步夯实设备基础管理&#xff0c;提高设备运行的可靠性&#xff0c;做到及时发现设备故障隐患&#xff0c;并根据检查结果分析提出预防性维修计划&#xff0c;从而使用凡尔码搭建设备管理系统来管理设备&#xff0c;该系统能最大限度地减少设备故障停机&#xff0c;杜绝设…

【git】gitlab常用命令

gitlab官网 官网&#xff1a;官网 中文官网&#xff1a;中文官网 默认的gitlab安装目录 /opt/gitlab/bin 启动 gitlab-ctl start 查看状态 gitlab-ctl status 停止 gitlab-ctl stop 重启GitLab gitlab-ctl restart 查看gitlab的配置文件 配置的路径是&#xff1a;/…

【Java】jvm 元空间、常量池(了解)

JDK1.8 以前的 HotSpot JVM 有方法区&#xff0c;也叫永久代&#xff08;permanent generation&#xff09;方法区用于存放已被虚拟机加载的类信息&#xff0c;常量、静态遍历&#xff0c;即编译器编译后的代码JDK1.7 开始了方法区的部分移除&#xff1a;符号引用&#xff08;S…

Zotero同步坚果云

实用教程 无意之中发现的Zotero同步坚果云的教程&#xff0c;简直和自己当时看视频&#xff0c;搜经验贴做的步骤一模一样&#xff0c;十分赞&#xff01;值得收藏&#xff01;只是忘记当时在哪保存的图片了&#xff0c;所以没法引用&#xff01;只能在这借花献佛&#xff0c;…

二叉树学习笔记

1、链表实现二叉树 // 树节点类 class Bitreenode {char data;Bitreenode* ls, * rs, * fa; // ls为左儿子节点&#xff0c;rs为右儿子节点&#xff0c;fa为父节点 public:Bitreenode() {data 0;ls rs fa nullptr;}void set_ls(Bitreenode *p) {ls p;}void set_rs(Bitre…

ONNX推理流程

文章目录 python版API推理流程 python版API推理流程 使用netron工具查看onnx网络结构 如下图&#xff0c;可以看出此次要使用的网络输入为&#xff1a; 输入名称&#xff1a;input输入形状&#xff1a;[1, 3, 256, 256]输入数据类型&#xff1a;float32 网络的输出为&#xff1…

如何利用IP地址定位保护网络安全?

通过IP地址定位可以在一定程度上增强网络安全&#xff0c;但它并不是唯一的安全措施。以下是如何利用IP地址定位来保护网络安全的一些方法&#xff1a; 异常检测和入侵检测&#xff1a;监控网络上的IP地址流量&#xff0c;定位异常活动&#xff0c;如大规模的连接尝试、不寻常的…

习题1. 31

话不多说 先上代码 (defn product [ term a nxt b](defn iter [a result](if (> a b)1 (* (term a) (iter (nxt a) result))))(iter a 1)) 跟习题1.30比较起来&#xff0c;就是两个地方不同 乘法不能乘0 必须是1。难度来讲&#xff0c;跟1.30难度是一样的。增加了迭代过…

Qt之submodule编译

工作中会遇到这样一种情况&#xff1a;qt应用程序在运行时提示找不到某个qt的动态库。我遇到的是缺少libQt5Websocket.so&#xff0c;因为应用程序是在x86平台银河麒麟v10上开发&#xff0c;能够正常编译运行&#xff0c;然后移植到rk3588&#xff08;aarch64架构&#xff09;上…

阿里云/腾讯云/华为云国际版实名账号:亚太已发展超2500个本地生态伙伴 超50%收入由伙伴创造

华为全联接大会2022在泰国开幕&#xff0c;以“创新无限&#xff0c;一切皆服务”为主题的华为云峰会成功举办&#xff0c;华为云亚太地区部总裁曾兴云、华为云首席产品官方国伟以及多位客户伙伴发表主旨演讲。会上&#xff0c;华为云发布《云原生2.0架构白皮书》并联合CNCF&am…

OpenResty安装

OpenResty 是一个基于 Nginx 的 Web 平台&#xff0c;它将 Nginx 和 Lua 脚本语言结合起来&#xff0c;提供了更强大的 Web 应用开发和部署能力。OpenResty 仓库是 OpenResty 项目的官方仓库&#xff0c;包含了 OpenResty 的源代码、文档、示例等资源。 OpenResty 仓库地址是&…

【C++】位图及其应用

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; C学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大…

【算法-动态规划】钢条切割问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

python一行命令搭建web服务,实现内网共享文件

python一行命令搭建web服务&#xff0c;实现内网共享文件 有时候我们在本地电脑访问自己的虚拟机的时候&#xff0c;可能因为某些原因无法直接CV文件到虚拟机。但此时我们又想上传文件到虚拟机&#xff0c;如果虚拟机和本地电脑可以互通。那么我们可以直接通过python来启动一个…

安全巡检管理系统—隐患排查治理

安全管理越来越重要&#xff0c;每个生产企业都需要一个安全隐患排查治理小程序&#xff01;利用凡尔码平台搭建安全巡检管理系统主要有以下四个功能 1、制定巡检计划&#xff1a;安全巡检管理系统可以帮助用户制定巡检计划&#xff0c;用户可以根据需要创建不同的计划&#xf…

浅谈MDK, IAR,CLANG和GCC的局部变量字节对齐处理差异(2023-10-13)

视频&#xff1a; https://www.bilibili.com/video/BV1CB4y1Z7kA 浅谈MDK, IAR, CLANG和GCC的局部变量字节对齐处理差异 问题由来&#xff1a; 早期这个帖子里面的局部变量对齐仅测试了MDK AC5&#xff0c;但项目中使用AC6发现了新问题&#xff0c;看来AAPCS规约研究的还是不…

Discuz大气游戏风格模板/仿lol英雄联盟游戏DZ游戏模板GBK

Discuz大气游戏风格模板&#xff0c;lol英雄联盟游戏模板&#xff0c;DZ游戏娱乐模板GBK。模板名称&#xff1a;lol英雄联盟游戏&#xff08;m0398_lol&#xff09; 下载地址&#xff1a;https://bbs.csdn.net/topics/617408069

多维高斯分布(多元正态分布)的概率密度函数和最大似然估计

多元高斯分布的概率密度函数 f μ , Σ ( x ) 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2 e x p { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } f_{\mu, \Sigma}(x)\frac{1}{(2 \pi)^{D/2}} \frac{1}{|\Sigma|^{1/2}} exp\{-\frac{1}{2}(x-\mu)^T \Sigma ^{-1}(x-\mu)\} fμ,Σ​(x)…