【五一创作】Apollo(入门)

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共有,欢迎交流

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用pands.rolling方法实现移动窗口的聚合计算

一个问题举例 假设有一个5天的收益数据,需要每3天求出一次平均值来达成某个需求: daterevenue2023-05-01102023-05-02202023-05-03302023-05-04402023-05-0550 1号、2号和3号的数据求一次平均值,2号、3号和4号的数据求一次平均值&#xff…

5.4.1树的存储结构 5.4.2树和森林的遍历

回忆一下树的逻辑结构: 双亲表示法(顺序存储) 如果增加一个结点M,L。毋须按照逻辑上的次序存储。 如果是删除元素: 方案一:比如说删除元素为G,设置其双亲结点为-1。 方案二: 把尾部的结点提上…

Sybase使用sp_helptext查看系统存储过程的源码

sp_helptext存储过程用于显示已编译对象的源代码。 sp_helptext是Sybase ASE内置的存储过程,可从任何位置调用。 但实际上,如果直接使用,常常会得到(令人头大的)错误提示: Msg 17461 Object does not exi…

基于JavaSpringboot+vue国风汉服文化交流宣传系统

基于JavaSpringbootvue国风汉服文化交流宣传系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

【可解释AI】图神经网络的可解释性方法及GNNexplainer代码示例

图神经网络的可解释性方法及GNNexplainer代码示例 GNNExplainerIntroductionModelSingle-instance explanations(Explanation via Structural Information)Joint learning of graph structural and node feature information(Explanation via…

SuperMap iClient3D for Cesium 构建隧道

作者:kele 背景 前段时间看到一篇构建隧道的文章(https://blog.csdn.net/supermapsupport/article/details/128453116),突然想到一个使用场景:隧道通常是建在山体下面,是否可以通过这种方式构建出一条贯穿…

使用Python和机器学习进行文本情感分类

使用Python和机器学习进行文本情感分类 1. 效果图2. 原理3. 源码参考这篇博客将介绍如何使用Python进行机器学习的文本情感分类(Text Emotions Classification)。 1. 效果图 训练文本及情感分类前5条数据如下: 训练过程及测试文本情感分类效果图如下: 可以看到 对文本“S…

【量化交易笔记】5.SMA,EMA 和WMA区别

股票中的SMA,EMA和WMA是常用的技术分析指标。这些指标基于历史股价计算得出,可以帮助投资者了解股票的趋势,为决策提供依据。虽然它们都是平均值算法,但它们之间还是有一些区别的。 SMA 简单移动平均线(Simple Moving…

分布式的流处理平台Kafka

目录: 一、简介二、基本概念三、生产者使用详解四、发送消息五、消费者代码示例 一、简介 ApacheKafka 是一个分布式的流处理平台。它具有以下特点: 支持消息的发布和订阅,类似于 RabbtMQ、ActiveMQ 等消息队列;支持数据实时处理…

计算机组成原理第五章(2)---中断

5.1概述 产生和应用 在IO设备和主机交换数据时,由于设备本身的机电特性的影响,其工作速度比较低,与CPU无法匹配,如果采用程序查询的方式需要CPU进行等待,但是如果在等待的过程中CPU可以执行其他的程序,可…

【@Param注解】| 台面使用——>底层原理分析

🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 目录 🦁 定义🦁 台面使用🦁 底层原理分析🦁 尾声🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄…

java实现乘法的方法

我们都知道,乘法运算的核心思想就是两个数相乘,如果能将乘法运算转化成一个加数的运算,那么这个问题就很容易解决。比如我们要实现23的乘法,首先需要定义两个变量:2和3。我们将这两个变量定义为一个变量:2x…

PySide6/PyQT多线程之 信号与槽 / (Signal Slot)的高效利用

前言 PySide6/PyQT信号槽是一种事件处理方式,允许程序中的对象发送和接收信号。 在 PySide6/PyQT 精进的过程中,一定躲不开 信号和槽 这座大山,这是一个比较有意思的知识点: 初接触的看不懂,觉得复杂;看得…

本地 WAF 已死,云 WAF 永生

多年来,Web 应用程序防火墙 (WAF) 一直是应用程序保护的代名词。事实上,许多应用程序安全团队认为保护其应用程序的最佳选择是一流的本地 WAF 解决方案,尤其是当这些应用程序部署在本地或私有云中时。 但自从引入本地 WAF 以来,…

JMeter的使用(二)

九、直连数据库 通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。 获取某条学院的名字,放在百度搜索: JMeter 不具备直连数据库功能,必须整合第三方(jar包)实现配置数据库的连接通过JDBC Re…

@PostConstruct注解和@PreDestroy注解

前言 Bean注解指定初始化和销毁的方法,也介绍了使用InitializingBean和DisposableBean来处理bean的初始化和销毁。JDK中还提供了两个注解能够在bean创建完成并且属性赋值完成之后执行一些初始化工作和在容器销毁bean之前通知我们进行一些清理工作。 1.PostConstru…

LDAP概念和原理介绍

LDAP概念和原理介绍 相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始…

有什么牌子台灯性价比高?性价比最高的护眼台灯

由心感叹现在的孩子真不容易,学习压力比我们小时候大太多,特别是数学,不再是简单的计算,而更多的是培养学生其他思维方式,有时候我都觉得一年级数学题是不是超纲了。我女儿现在基本上都是晚上9点30左右上床睡觉&#x…

自动拣货仓库亮灯方案

方案目标概叙: 系统在美团平台下单后,骑手会收到取货码,凭借取货码到指定的智能仓库去取货,仓库标签系统调取相应订单信息,执行亮灯指令(屏幕显示订单信息及拣货数量,并亮灯)&#…

【MySQL】存放页面的大池子——InnoDB的表空间

概念: 页: 是InnoDB存储引擎管理数据库的最小磁盘单位,一个页的大小一般是16KB。一次至少读取一页的数据到内存,或者刷新一页的数据到磁盘。数据页:FIL_PAGE_INDEX类型的页,B树中的节点就是数据页。区&…