【五一创作】Apollo(入门)

news2024/12/26 23:47:43

Apollo(入门)

Quick Start
配置中心是一种统一管理各种应用配置的基础服务组件
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

配置中心

独立于程序的只读变量
伴随应用的整个生命周期
多种加载方式
分布式下产生的
统一配置管理各种应用配置的基础服务组件

主流配置中心

  1. Disconf
  2. Spring Cloud Config
  3. Apollo
  4. Nacos

Apollo包括服务端和客户端

服务器打包后直接运行,不需要Tomcat等应用容器
客户端Java不依赖任何框架,能运行于所有java运行时环境,同时对Spring/Spring Boot环境有支持

特性

  1. 统一管理不同环境,不同集群的配置
  2. 配置修改实时生效(热发布)
  3. 版本发布管理
  4. 灰度发布(发布后,只对部分应用实例生效,等观察一段时间没问题后在推应用实例)
  5. 权限管理,发布审核,操作审计
  6. 客户端配置信息监控
  7. 提供java和.Net原生客户端
  8. 提供开发平台API

执行流程

暂时无法在飞书文档外展示此内容

安装

  1. 从百度网盘下载
  • 通过网盘链接下载,提取码: 9wwe
  • 下载到本地后,在本地解压apollo-quick-start.zip
    MySQL客户端导入sql/apolloportaldb.sql,导入sql/apolloconfigdb.sql即可。

配置连接

#apollo config db info
apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)

# apollo portal db info
apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)

Quick Start脚本在本地启动3个服务,分别使用8090,8080,8070端口

启动(/Applications/普歌/apollo-quick-start/apollo-quick-start-1.8.0)

./demo.sh start

启动成功

==== starting service ====
Service logging file is ./service/apollo-service.log
Started [10768]
Waiting for config service startup.......
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup....
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started [10846]
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!

http://localhost:8070/signin输入用户名apollo,密码admin后登录

JVM8080:对外暴露的网络端口是8080,里面有Meta Server,Eureka,Config Service,其中Config Service又使用了ConfigDB
JVM8090:对外暴露的网络端口是8090,里面有Admin Service,并且Admin Service使用了ConfigDB
JVM8070:对外暴露的网络端口是8070,里面有Portal,并且Portal使用了PortalDB

Demo客户端来演示从Apollo配置中心获取配置

用户输入一个key的名字,程序会输出这个key对应的值。
如果没找到这个key,则输出undefined
同时客户端还会监听配置变化事件,一旦有变化就会输出变化的配置信息。

发布配置

  1. 创建项目,最后提交
    [图片]

  2. 新增配置,点击发布就可以发布了
    [图片]

代码实现

编写测试类

需要配置环境变量 ,以系统属性的方式配置
在VM options 中添加
[图片]

[图片]

读取配置(两种不同的方式)

//-Dapp.id=apollo-quickstart -Denv=DEV -Ddev_meta=http://localhost:8080
//读取默认的配置
Config appConfig = ConfigService.getAppConfig();
// 读取指定 namespace 下的配置信息
ConfigService.getConfig("apollo-quickstart");

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 访问服务,同时在Portal侧会做load balance ,错误重试
  • 为了简化部署,会把Config service ,Eureka和Meta server三个逻辑角色部署在同一个JVM进程中

核心概念

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

项目管理

修改系统参数吧

[图片]

添加配置

在这里插入图片描述

创建公告的配置中心

[图片]

可以选择namespace,并且可以选择关联的 namespace

添加集群

[图片]

[图片]

同步配置
[图片]

读取指定的集群下的配置

-Dapollo.cluster=SHAJQ
[图片]

配置发布流程

暂时无法在飞书文档外展示此内容

  1. 用户在portal操作配置发布
  2. portal调用Admin service 的接口操作发布
  3. Admin service 发布配置后,发送Release Message 给Config service
  4. Config service收到Release Message后,通知对应的客户端

apollo自己为了不发生耦合,自己写了个消息队列

[图片]

配置的数据都在apolloconfigdb中的releasmenssage

发布原理

  1. Config service 通知客户端
    [图片]

  2. 客户端读取,定时从Apollo配置中心服务端拉取应用的最新配置

  3. 备用机制,为了防止推送机制失效导致配置不更新

  4. 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端会返回304 - not modified

  5. 定时频率默认为5分钟拉取一次,客户端也可以通过在运行时指定System Property ;·apollo.refreshInterval·来覆盖,单位为分。

配置文件

[图片]

Apollo Meta Server
Apollo 支持应用在不同的环境有不同的配置,常用的指定方式如下:

  1. Java system property 的apollo.meta:·-Dapollo.meta=http://localhost:8080·
  2. 在resources目录下新建apollo-env.properties文件
apollo:
  id : apollo-quickstart
  bootstrap:
    enabled: true
    # 多的namespace中间用,隔开
    namespaces: application

灰度发布

只修改一部分实例

定义

黑白之间能够平滑过渡的一种发布方式。即一部分用户继续用A,另一部分用产品特性B,如果用户对B没有反对,那么逐渐扩大范围,把所有用户都迁移到B上。

实现的功能

  1. 对于一些对程序比较大影响的配置,可以先在一个或多个实例生效,观察一段时间后全量发布。
  2. 一些需要调优的配置参数,通过灰度发布功能实现A/B测试。可以在不同的机器上应用不同的配置,调整,测评一段时间后找出较优的配置在全量发布。
    [图片]

全量发布

全部发布,都是一样的配置。


  • 作者:麦克猫Cat
  • 本文版权归作者和CSDN共有,欢迎交流

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

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

相关文章

Springboot 实战一个依赖解决XSS攻击

1. 什么是XSS介绍 XSS: Cross Site Scripting,为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中 Web里面的Scrip…

【高并发】并发数据结构与多核编程

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于多处理器编程的艺术进行的,每个知识点的修正和深入主要…

【JavaEE初阶】认识线程(Thread)

目录 🌾 前言 🌾 了解线程 🌈1.1 线程是什么? 🌈1.2 一些基本问题 🌾2、创建线程的方式 🌈 2.1 继承Thread类 🌈 2.2 实现Runnable接口并重写run()方法 🌈 注意…

有哪些好的学习方法?学霸们自己在用,却不愿意透露的

临近期末,很多家长都在跟我咨询,怎么才能提升孩子的学习效率? 原因就是,每天看着自己的孩子学习到深夜,但不少内容还是记不住, 学习和复习的效果非常的不理想。 今天,给大家分享的方法,是我自己一直也都在用的方法,效果非常的棒。 学长Ron,江苏某省重点高中毕业,高…

给公司搭建一个人才库系统,前台(信息填写+简历上传)后台(筛选功能+下载简历)

首先指出目前代码的不足之处: 如果公司使用,代码还存在风险问题,需要增加防火墙、防PHP攻击、后台加验证等操作 以下指南: 1.Mod Security 和 Fail2Ban 是开源的安全软件,您可以在宝塔面板上安装和配置这些软件来增强您…

【JUC】ThreadLocal

【JUC】ThreadLocal 文章目录 【JUC】ThreadLocal1. 概述2. Thread、ThreadLocal、ThreadLocalMap 关系2.1 Thread 和 ThreadLocal2.2 ThreadLocal 和 ThreadLocalMap2.3 三者之间的关系 1. 概述 ThreadLocal 提供线程局部变量。这些变量与正常的变量不同,因为每一…

Java 基础入门篇(一)—— Java 概述

文章目录 一、Java 概述二、Java 的产品 JDK2.1 JDK 安装2.2 Java与 Javac 介绍2.3 Java 程序的开发步骤 三、Java 程序的执行原理四、JDK 的组成五、Java 的跨平台工作原理 一、Java 概述 Java 是 sun 公司在 1995 年推出的一门计算机高级编程语言,其语言风格接近人…

音视频技术开发周刊 | 291

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 谷歌将 AI 芯片团队并入云计算部门 追赶微软和亚马逊 OpenAI推出的ChatGPT获得一定成功,微软是OpenAI的重要投资者,它将ChatGPT植入必应搜索&#…

Java 基础入门篇(三)—— 数组的定义与内存分配

文章目录 一、数组的定义1.1 静态初始化数组1.2 动态初始化数组1.3 数组的访问 二、数组的遍历三、数组的内存图 ★3.1 Java 的内存分配3.2 数组的内存图3.3 两个数组变量指向同一个数组对象 四、数组使用的常见问题补充:随机数 Random 类 一、数组的定义 数组就是…

机器视觉工程师职场四点“心态>交流=思路>知行合一”

视觉人机器视觉团队,他们热爱机器视觉行业,爱学习,爱分享。这一路上,首先感谢粉丝们805天一如既往的支持。我想团队拥有这些粉丝,是富有的,也是我们一直创作的动力。 是否记得毕业季,自己的豪言壮语。希望你毕业三年后,无论结果如何,不忘初心,继续前行。 机器视觉工程…

Dart - 爬取Android Studio历史版本信息

文章目录 前言开发环境开发过程1. 遵循robots协议2. 页面结构分析3. Dart项目创建4. Dart项目运行与调试5. 第三库依赖6. 项目完整源码 运行结果最后 前言 整理Android Studio历史版本信息时发现有点多,于是想一劳永逸写一个简单的爬虫抓取一下数据并生成我想要的格…

【ansys】网格划分-优化、改善网格质量、修复网格、减小skewness、增大Orthogonal Quality的技巧

一、分析几何结构网格划分拓扑关系,调整网格尺寸 优化策略1:如果发现质量差的网格单元聚集在某一个实体附近,基本说明是这个实体的网格划分定义存在优化的地方。 例如下面这个几何模型。一个薄壁状长方体,加上一个模具框架&#x…

代码优美,搬砖不累:探索高质量代码之路

一、 前言 写出高质量代码是每个程序员的追求,也是提高自己编程能力的必经之路。高质量的代码可以提高软件的可维护性、可读性、可扩展性和可移植性等,降低软件开发和维护的成本。本文将介绍一些如何写出高质量代码的实用技巧和方法。 二、高质量代码的…

搞定Maven全功能,来从根上理解Maven拉包原理

依赖 生命周期与插件 模块聚合 模块继承 属性 版本管理 环境配置 私服 <dependencyManagement>的作用 在一次需求迭代中&#xff0c;我要求同事把写好的 RPC 接口打好包上传到公司私服上。然而&#xff0c;她并不熟悉 Maven&#xff0c;仅仅掌握了最基础的使用方…

【24】linux进阶——初识shell

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

管家婆辉煌Ⅱ 13.32版安装方法

因管家婆辉煌版已经长期不更新&#xff0c;现已经出现蓝屏的问题&#xff0c;故此新开此贴&#xff0c;慢慢更新安装方法。 首先管家婆下载地址&#xff1a;http://www.grasp.com.cn/download.aspx?id116 先安装sql server 2008 下载后&#xff0c;运行安装&#xff0c;请注…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第八章课后习题参考答案

第八章 面向对象技术与UML 课后习题参考答案 一、单项选择题 D &#xff08;2&#xff09;C &#xff08;3&#xff09;B &#xff08;4&#xff09;D &#xff08;5&#xff09;C &#xff08;6&#xff09;B &#xff08;7&#xff09;A &#xff08;8&#xff09;C&…

【LeetCode】343. 整数拆分

343. 整数拆分&#xff08;中等&#xff09; 方法一&#xff1a;数学推导 思路 将数字 n 拆分为若干个数字之和&#xff0c;即 n n1 n2 ... na &#xff0c;本道题等价于求解 max(n1 * n2 * ... * na) &#xff0c;根据数学推导&#xff0c;可以得到两个结论&#xff1a;…

【51单片机】LED点阵屏

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Waiting For Love】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;74HC595图片 &#x1f354;74HC59…

多层感知器模型与模型训练

文章目录 1. 多层感知器模型与模型训练1.1 多层感知器模型1.2 损失函数1.3 优化器与初始化模型1.4 编写训练循环1.5 案例代码整合 最近看了日月光华老师的《PyTorch深度学习简明实战》&#xff0c;将里面的代码自己动手复现了一遍&#xff0c;还是受益良多&#xff0c;书里面的…