当前位置: 首页 > news >正文

Apollo介绍和入门

文章目录

  • Apollo介绍
    • 配置中心介绍
    • apollo介绍
      • 主流配置中心
        • 功能特性对比
      • Apollo简介
  • 入门
    • 简单的执行流程
    • Apollo具体的执行流程
      • Apollo对象
      • 执行流程
      • 分步执行流程
  • 核心概念
    • 应用,环境,集群,命名空间
    • 企业部署方案
    • 灰度发布
      • 全量发布
    • 配置发布的原理
      • 发送ReleaseMessage
      • Config Service通知客户端
      • 客户端读取设计

Apollo介绍

配置中心介绍

  • 分布式系统环境下,给其他服务提供配置文件的管理,统一管理各种应用配置的一个基础服务组件

img

apollo介绍

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

主流配置中心

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

  1. Spring Cloud Config
    1. 2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。
    2. GitHub地址
      1. https://github.com/spring-cloud/spring-cloud-config
  2. Nacos
    1. 2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。
    2. GitHub地址
      1. https://github.com/alibaba/nacos
  3. Apollo
    1. 2016年5月,携程开源的配置管理中心
    2. 能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端
    3. 并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
    4. GitHub地址
      1. https://github.com/apolloconfig

功能特性对比

功能点Spring Cloud ConfigApolloNacos
配置实时推送支持支持(HTTP长轮询1s内)支持(HTTP长轮询1s内)
版本管理支持支持支持
灰度发布支持支持不支持
权限管理支持(依赖Git)支持不支持
多语言只支持Java主流语言,提供了Open API主流语言,提供了Open API
  • 总结
    • Spring Cloud Config 与 Apollo类似,但只支持 Java,所以不用 Spring Cloud Config
    • Nacos 不支持 灰度发布 和 权限管理,所以不用 Nacos

Apollo简介

  • Apollo 是 一个 分布式配置中心的解决方案
  • Apollo 包括
    • 服务端
      • 服务端基于 Spring Boot 和Spring Cloud 开发
    • 客户端
      • Java客户端不依赖任何框架
  • Apollo 特性:
    • 统一管理不同环境,不同集群的配置
      • 提供了一个Apotal界面来管理
    • 热发布
      • 用户在Apollo修改完配置并发布后
      • 客户端能实时(1秒)接收到最新的配置,并通知到应用程序
    • 版本发布管理
      • 所有的配置发布都有版本概念
      • 从而可以方便地支持配置的回滚
    • 灰度发布
      • 支持配置的灰度发布
        • 比如点了发布后,只对部分应用实例生效
        • 等观察一段时间没问题后再推给所有 应用实例

入门

简单的执行流程

  • 四个对象:
    • 配置中心
    • 客户端
    • 应用程序
    • 本地文件缓存
  • 执行流程

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

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

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

  1. 一种是Apollo配置中心会向客户端推送最新的配置;
  2. 另外一种是Apollo客户端会定时从Apollo配置中心拉取最新的配置

通过以上两种 机制共同来保证应用程序能及时获取到配置。

Apollo具体的执行流程

img

Apollo对象

  • Config Service
    • 配置的读取和推送
    • 客户端通过 Config Service 读取配置
  • Admin Service
    • 配置的修改,发布
    • Portal 通过 Admin Service 将配置写到ConfigDB数据库中
  • Eureka 注册中心
    • 服务注册和发现
    • 记录 Config Service 和 Admin Service 的信息
      • IP地址,端口等
    • 方便客户端和Portal 的访问
  • Meta Server
    • 在Eureka 之上架了一层Meta Server
    • 用于封装Eureka的服务发现接口
      • Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client

执行流程

  • 客户端读取配置流程
    • 通过域名访问Meta Server获取Config Service服务列表(IP+Port
    • 而后直接通过IP+Port访问服务
  • 修改配置的流程
    • Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port)
    • 而后直接通过IP+Port访问服务
  • Ps:
    • 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程 中

分步执行流程

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

核心概念

应用,环境,集群,命名空间

  • 应用

    • 就是实际使用配置的应用
      • Apollo客户端在运行时需要知道当前应用是谁,从而可以去获取对应的配置
    • 关键字: appId
  • 环境

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

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

    • 应用 --> 环境 --> 集群
      • 应用 : 工程项目
      • 应用分环境
        • 具体环境下边
          • 由于部署的集群不同,导致配置的不同
            • 北京和上海数据库的地址不同,虽然都是生产环境
  • 命名空间

    • img

    • 一个应用下不同配置的分组

      • 配置通过key,value 存储
  • 通过namespace对我们的配置项进行分类管理

    • 不同类型的配置存放在不同的文件中
      • 数据库配置文件,RPC配置文件,应用自身的配置文件
    • 在添加配置的时候,要记得对配置项进行分类
    • img
  • 公共和私有:

    • img

    • 有共用的情况,公共命名空间可以继承

      • 有5个工程都会连接数据库,数据库的配置就共用了
      • 就可以建一个公共的命名空间(例如数据库的连接)
        • 生产环境里面的命名空间可以继承公共的命名空间
        • 生产环境就可以直接拿到数据库的连接
          • 可以在生产环境中再做个性化定义

企业部署方案

在企业中常用的部署方案为:

  • Apollo-adminservice (发布配置)和Apollo-configservice (查询配置)两个服务
    • 分别在线上环境(pro),仿真环 境(uat)和开发环境(dev)各部署一套
    • 并且还要建立不同的 apolloconfigdb
      • 因为配置信息在不同的数据库当中
  • Apollo-portal做为管理端
    • 管理界面,只部署一套
      • 统一管理上述三套环境。
    • 通过一个portal管理界面,连接访问不同的生产环境

具体如下图所示:

img

灰度发布

  • 定义:
    • 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。
    • 在其上可以进行A/B testing
      • 即让一部分用户继续用 产品特性A
      • 一部分用户开始用产品特性B
      • 如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁 移到B上面来。
  • Apollo实现的功能
    • 对于一些对程序有比较大影响的配置
      1. 可以先在一个或者多个实例生效观察一段时间没问题后再全量发布 配置
    • 对于一些需要调优的配置参数
      1. 可以通过灰度发布功能来实现A/B测试。
      2. 可以在不同的机器上应用不同的配 置,不断调整、测评一段时间后找出较优的配置再全量发布配置。

全量发布

  • 灰度发布测试完成后,全量发布

配置发布的原理

  • 参考链接
    • https://www.iocoder.cn/categories/Apollo/
    • img
  1. 用户在Portal操作配置发布
  2. Portal调用Admin Service的接口操作发布
  3. Admin Service发布配置后,发送ReleaseMessage给各个Config Service
  4. Config Service收到ReleaseMessage后,通知对应的客户端

发送ReleaseMessage

  • 通过数据库实现了一个简单的消息队列

具体实现方式如下:

  1. Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录

    1. 消息内容就是配置发布的AppId****+Cluster+Namespace
    2. 源码:
      1. 消息发送类: DatabaseMessageSende
      2. https://github.com/ctripcorp/apollo/blob/master/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/DatabaseMessageSender.java
  2. Config Service有一个线程会每秒扫描一次ReleaseMessage表

    1. 看看是否有新的消息记录
    2. 源码:
      1. 消息扫描类:ReleaseMessageScanner
      2. https://github.com/ctripcorp/apollo/blob/master/apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/message/ReleaseMessageScanner.java
  3. Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器
    1.

    1. 然后调用消息监听类的handleMessage方法: NotificationControllerV2
      • https://github.com/ctripcorp/apollo/blob/master/apollo-configservice/src/main/java/com/ctrip/framework/apollo/configservice/controller/NotificationControllerV2.java
  4. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端

img

Config Service通知客户端

上面描述了NotificationControllerV2是如何得知有配置发布的

NotificationControllerV2在得知有配置发布通知到客户端:

  1. 客户端会发起一个Http请求到Config Service的 notifications/v2 接口 NotificationControllerV2

客户端发送请求类:RemoteConfigLongPollService

  1. NotificationControllerV2不会立即返回结果,而是把请求挂起。
  2. 考虑到会有数万客户端向服务端发起长连接, 因此在服务端使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。
    1. 如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端。
    2. 如果有该客户端关心的配置发布
      1. NotificationControllerV2会调用DeferredResult的setResult方法
      2. 传入有 配置变化的namespace信息,同时该请求会立即返回。
      3. 客户端从返回的结果中获取到配置变化的namespace 后,会立即请求Config Service获取该namespace的最新配置。

客户端读取设计

除了之前介绍的客户端和服务端保持一个长连接,从而能第一时间获得配置更新的推送外,客户端还会定时从

Apollo配置中心服务端拉取应用的最新配置。

  • 这是一个备用机制,为了防止推送机制失效导致配置不更新
  • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
  • 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property:apollo.refreshInterval 来覆盖,单位为分钟

相关文章:

Apollo介绍和入门

文章目录 Apollo介绍配置中心介绍apollo介绍主流配置中心功能特性对比 Apollo简介 入门简单的执行流程Apollo具体的执行流程Apollo对象执行流程分步执行流程 核心概念应用,环境,集群,命名空间企业部署方案灰度发布全量发布 配置发布的原理发送…...

一文看懂Oracle 19c OCM认证考试(需要Oracle OCP证书)

Oracle OCM的认证全称是Oracle Certified Master,是比OCP更高一级的认证,姚远老师的很多OCP学员都对OCM考试有兴趣,这里跟大家做个介绍。 OCM考试全部是上机的实操考试,没有笔试,要到Oracle原厂参加两天的考试。参加1…...

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)效果一览…...

python自学

自学第一步 第一个简单的基础,向世界说你好 启动python 开始 print是打印输出的意思,就是输出引号内的内容。 标点符号必须要是英文的,因为他只认识英文的标点符号。 exit()推出python。 我们创建一个文本文档&…...

元宇宙安全与著作权相关市场与技术动态:韩国视角

元宇宙市场动态 元宇宙安全与著作权维护技术现状 元宇宙有可能为商业创造巨大价值,尤其是在零售和时尚领域。时尚产品的象征性价值不仅在物理空间中得以保持,在虚拟空间中也是如此。通过元宇宙平台,企业可以开发虚拟产品,降低供…...

springboot整合neo4j--采用Neo4jClient和Neo4jTemplate方式

1.背景 看了spring-boot-starter-data-neo4j的源码之后发现,该starter内已经实现了Neo4jClient和Neo4jTemplate,我们只需要使用Autowire就能直接使用它操作neo4j。 Neo4jClient方式与我的另一篇springboot整合neo4j-使用原生cypher Java API博客方式一样…...

【算法与数据结构】701、LeetCode二叉搜索树中的插入操作

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:这道题关键在于分析插入值的位置,不论插入的值是什么(插入值和原有树中的键值都…...

前端--HTML

文章目录 HTML结构快速生成代码框架HTML常见标签 表格标签 编写简历信息 填写简历信息 Emmet 快捷键 HTML 特殊字符 一、HTML结构 1.认识HTML标签 HTML 代码是由 "标签" 构成的. 形如: <body>hello</body> 标签名 (body) 放到 < > 中 大部分标…...

安装配置 zookeeper(单机版)

目录 一 准备并解压安装包 二 修改zoo.cfg文件 三 创建相应两个目录 四 创建文件myid 五 修改环境变量 六 启动 zookeeper 一 准备并解压安装包 这里提供了网盘资源 http://链接: https://pan.baidu.com/s/1BybwSQ_tQUL23OI6AWxwFw?pwdd4cf 提取码: d4cf 这里的安装包是…...

2023/9/7 -- C++/QT

作业 1> 思维导图 2> 封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个…...

2023年09月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

MyBatis基础之概念简介

文章目录 基本概念1. 关于 MyBatis2. MyBatis 的体系结构3. 使用 XML 构建 SqlSessionFactory4. SqlSession5. 默认的别名6. 补充 [注意] 放前面前 很多人可能在使用 MyBatis-plus 进行代码开发&#xff0c;MyBatis的这部分内容是用来更好的讲述之后的内容。 基本概念 1. 关于…...

解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录 一、问题现象二、原因分析三、解决方案1. 方案1&#xff1a;更新SQLyog版本2. 方案2&#xff1a;修改用户的授权插件3. 方案3&#xff1a;修复my.cnf 或 my.ini配置文件 四、最后总结 本文将总结如何解决 SQLyog 连接 MySQL8.0 时报错&#xff1a;错误号码2058 一、问…...

Linux内核4.14版本——drm框架分析(11)——DRM_IOCTL_MODE_ADDFB2(drm_mode_addfb2)

目录 1. drm_mode_addfb2 2. drm_internal_framebuffer_create 3. drm_fb_cma_create->drm_gem_fb_create->drm_gem_fb_create_with_funcs 4. drm_gem_fb_alloc 4.1 drm_helper_mode_fill_fb_struct 4.2 drm_framebuffer_init 5. 调用流程图 书接上回&#xff0c;使…...

mysql的date_format()函数格式月份的坑

问题背景 我表中有个字段存的是“年-月”格式的字符串&#xff0c;格式是这样的&#xff1a;‘2023-08’ 在查询这个表数据时&#xff0c;我使用了如下sql语句&#xff1a; select * from car where date_format(car_start_month,%Y-%m)<2023-08 意思是查询 car_start_mo…...

保姆级式教程:教你制作电子画册

在这个数字化时代&#xff0c;电子画册成为了展示和分享作品的一种流行方式。制作一个精美的电子画册不仅可以展示你的创意和才华&#xff0c;还可以吸引更多人的关注和欣赏。下面告诉大家一些小步骤&#xff0c;带你一步步学习如何制作电子画册。 1.收集和整理作品 接下来&am…...

探究Nginx应用场景

1 静态资源 Nginx是一个流行的Web服务器和反向代理服务器&#xff0c;它可以用于托管静态资源。下面是一个简单的案例&#xff0c;展示了如何使用Nginx来提供静态资源。 假设你有一个名为example.com的域名&#xff0c;并且你希望使用Nginx来托管位于/var/www/html目录下的静…...

sklearn中的数据集使用

导库 from sklearn.datasets import load_iris 实现 # 加载数据集 iris load_iris() print(f查看数据集&#xff1a;{iris}) print(f查看数据集的特征&#xff1a;{iris.feature_names}) print(f查看数据集的标签&#xff1a;{iris.target_names}) print(f查看数据集的描述…...

LLM在电商推荐系统的探索与实践

本文对LLM推荐的结合范式进行了梳理和讨论&#xff0c;并尝试将LLM涌现的能力迁移应用在推荐系统之中&#xff0c;利用LLM的通用知识来辅助推荐&#xff0c;改善推荐效果和用户体验。 背景 电商推荐系统&#xff08;Recommend System&#xff0c;RecSys&#xff09;是一种基于用…...

Linux 文本操作指令

Linux操作系统提供了许多用于处理文本文件的命令和工具。以下是一些常用的Linux文本命令&#xff1a; cat&#xff1a; 用于查看文本文件的内容&#xff0c;也可以用于合并多个文件。 cat 文件名more和less&#xff1a; 用于逐页查看文本文件&#xff0c;特别是对于大型文件。 …...

手把手复现:在MATLAB/Simulink里搭建PMSM的两种解耦模型(附模型下载)

在MATLAB/Simulink中构建永磁同步电机解耦控制模型的实战指南 永磁同步电机&#xff08;PMSM&#xff09;因其高效率和高功率密度&#xff0c;已成为工业驱动和电动汽车领域的核心部件。但对于刚接触电机控制的工程师和学生来说&#xff0c;如何将教科书中的解耦控制理论转化为…...

MCP协议实践:构建AI助手与IDE间的通信中继

1. 项目概述&#xff1a;IDE与AI助手间的“通信中继”最近在折腾AI编程助手时&#xff0c;发现一个挺有意思的痛点&#xff1a;像Cursor、Claude Desktop这类IDE插件或独立应用&#xff0c;它们内置的AI助手能力很强&#xff0c;但很多时候我们希望能让它们访问到IDE之外的一些…...

10x-bench-eval:量化开发效率的基准测试框架设计与实践

1. 项目概述&#xff1a;当“10倍速”遇上“基准测试”在软件工程领域&#xff0c;“10倍速工程师”是一个充满争议又令人神往的概念。它描述的是一种理想状态&#xff1a;一位工程师凭借其卓越的工具链、深刻的问题洞察力以及高效的自动化能力&#xff0c;其产出效率能达到普通…...

Azure Quickstart Templates流量管理器模板:5分钟部署终极全局负载均衡指南 [特殊字符]

Azure Quickstart Templates流量管理器模板&#xff1a;5分钟部署终极全局负载均衡指南 &#x1f680; 【免费下载链接】azure-quickstart-templates Azure Quickstart Templates 项目地址: https://gitcode.com/gh_mirrors/az/azure-quickstart-templates Azure Quicks…...

避坑指南:Arduino驱动四位七段数码管时,SevSeg库配置与硬件接线的那些细节

Arduino四位七段数码管避坑实战&#xff1a;从乱码到稳定显示的进阶指南 当你兴奋地按照教程连接好Arduino和四位七段数码管&#xff0c;上传代码后却发现显示乱码、部分段不亮或者亮度不均——这可能是每个创客都会经历的"成人礼"。本文将带你深入SevSeg库的配置细节…...

Flutter for OpenHarmony 学习视频播放器技术文章

Flutter for OpenHarmony 学习视频播放器技术文章 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net &#x1f3ac; Flutter for OpenHarmony 学习视频播放器开发实战 大家好&#xff01;今天带大家从零开始打造一个专为在线课程、慕课学习…...

3分钟快速上手:Android音频无线转发终极指南

3分钟快速上手&#xff1a;Android音频无线转发终极指南 【免费下载链接】sndcpy Android audio forwarding PoC (scrcpy, but for audio) 项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy 你是否曾经希望将手机上的音频内容同步到电脑上播放&#xff1f;无论是观看…...

给IPC相机调图像,别再瞎调了!一份保姆级的ISP线性模式调试顺序图(附避坑要点)

IPC相机图像调试实战指南&#xff1a;从线性模式到专业级画质优化 刚接触IPC相机图像调试的工程师们&#xff0c;常常会陷入参数迷宫——面对AE、AWB、Gamma、3DNR等数十个模块&#xff0c;该从何处入手&#xff1f;调试顺序的错误可能导致反复返工&#xff0c;甚至影响最终成像…...

经验小波变换(EWT):从理论基石到信号分解实战

1. 经验小波变换&#xff08;EWT&#xff09;的前世今生 我第一次接触EWT是在处理一段轴承振动信号时。当时用传统EMD方法分解出的IMF分量里&#xff0c;高频噪声和故障特征频率完全混在一起&#xff0c;就像把咖啡和牛奶搅成了拿铁——虽然都是白色液体&#xff0c;但根本分不…...

Google Calendar智能安排深度拆解(Gemini原生集成技术白皮书级解析)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini Google Calendar智能安排技术全景概览 Gemini 与 Google Calendar 的深度集成标志着日程管理进入语义理解驱动的新阶段。该能力并非简单调用 API&#xff0c;而是依托 Gemini 模型对自然语言指…...