Apollo配置中心使用

apollo配置中心使用

    • Apollo配置中心-简介
    • apollo源码
    • Apollo配置基本概念
    • Apollo特性
    • Apollo基础模型
    • Apollo架构设计
    • Apollo架构设计-实时推送设计
    • Apollo架构设计-可用性
    • Apollo架构设计-监控
    • Apollo架构设计-扩展
    • Apollo-本地部署
      • 准备工作
      • 安装步骤
        • mysql命令行创建ApolloPortalDB
        • mysql客户端创建ApolloPortalDB
        • 创建ApolloConfigDB
        • 配置数据库连接信息

Apollo配置中心-简介

Apollo(阿波罗)是由作者宋顺基于开源模式开发,他是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。
更多产品介绍参见Apollo配置中心介绍
本地快速部署请参见Quick Start

演示环境(Demo):
http://81.68.181.139
账号/密码:apollo/admin
如访问GitHub速度缓慢,可以访问Gitee镜像,不定期同步

apollo源码

apollo官网源码:https://github.com/apolloconfig/apollo
在这里插入图片描述

快速安装指南:https://github.com/apolloconfig/apollo-quick-start
在这里插入图片描述

apollo gitee源码:https://gitee.com/apolloconfig/apollo
如访问GitHub速度缓慢,可以访问Gitee镜像,不定期同步
在这里插入图片描述

apollo使用文档:https://www.apolloconfig.com/#/zh/README
在这里插入图片描述

Apollo配置基本概念

配置是独立于程序的只读变量
配置首先是独立于程序的,同一份程序在不同的配置下会有不同的行为。
其次,配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置。
常见的配置有:DB Connection Str、Thread Pool Size、Buffer Size、Request Timeout、Feature Switch、Server Urls等。
**配置伴随应用的整个生命周期:**配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。
**配置可以有多种加载方式:**配置也有很多种加载方式,常见的有程序内部hard code,配置文件,环境变量,启动参数,基于数据库等。
配置需要治理
权限控制:由于配置能改变程序的行为,不正确的配置甚至能引起灾难,所以对配置的修改必须有比较完善的权限控制
不同环境、集群配置管理:同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要有完善的环境、集群配置管理
框架类组件配置管理:还有一类比较特殊的配置 - 框架类组件配置,比如CAT客户端的配置。虽然这类框架类组件是由其他团队开发、维护,但是运行时是在业务实际应用内的,所以本质上可以认为框架类组件也是应用的一部分。这类组件对应的配置也需要有比较完善的管理方式。

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进行配置的修改和发布,并且具备完善的授权和权限控制。
**部署简单:**配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少;目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来;Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数。

Apollo基础模型

在这里插入图片描述
1.用户在配置中心对配置进行修改并发布
2.配置中心通知Apollo客户端有配置更新
3.Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

Apollo架构设计

在这里插入图片描述
4大核心模块:
Config Service:提供配置的读取、推送等功能,服务对象是Apollo客户端。
Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)。
Client:为应用获取配置,支持实时更新、通过MetaServer获取ConfigService的服务列表、使用客户端软负载SLB方式调用ConfigService,同时在Client侧会做load balance、错误重试(即通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务)。
Portal:配置管理界面、通过MetaServer获取AdminService的服务列表、使用客户端软负载SLB方式调用AdminService,同时在Portal侧会做load balance、错误重试(即通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务)。

3大辅助模块:
Eureka:用于服务发现和注册、Config/AdminService注册实例并定期报心跳、和ConfigService住在一起部署。
MetaServer:
封装Eureka的服务发现接口,相当于一个Eureka Proxy。
Portal通过域名访问MetaServer获取AdminService的地址列表。
Client通过域名访问MetaServer获取ConfigService的地址列表。
逻辑角色,和ConfigService住在一起部署。
NginxLB:
和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表。
和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表。
和域名系统配合,协助用户访问Portal进行配置管理。
为了简化部署,实际上把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中。

Apollo架构设计-实时推送设计

在这里插入图片描述
1、用户在Portal操作配置发布。
2、Portal调用Admin Service的接口操作发布。
3、Admin Service发布配置后,发送ReleaseMessage给各个Config Service。
4、Config Service收到ReleaseMessage后,通知对应的客户端。

Apollo架构设计-可用性

在这里插入图片描述

Apollo架构设计-监控

CAT: Apollo客户端和服务端目前支持CAT自动打点,所以如果自己公司内部部署了CAT的话,只要引入cat-client后Apollo就会自动启用CAT打点。如果不使用CAT的话,也不用担心,只要不引入cat-client,Apollo是不会启用CAT打点的。
Apollo也提供了Tracer相关的SPI,可以方便地对接自己公司的监控系统。
参考:https://github.com/apolloconfig/apollo/releases/tag/v0.4.0
**SkyWalking:**可以参考@hepyu贡献的apollo-skywalking-pro样例。
**Metrics:**从1.5.0版本开始,Apollo服务端支持通过/prometheus暴露prometheus格式的metrics,如http://${someIp:somePort}/prometheus

Apollo架构设计-扩展

1、Portal实现用户登录功能:参考文档
2、Portal接入邮件服务:参考文档
3、Portal 共享 session:参考文档
4、Portal启用webhook通知:参考文档

Apollo-本地部署

参考部署文档:https://github.com/apolloconfig/apollo-quick-start
在这里插入图片描述

准备工作

1、jak 版本要求: 1.8+
2、mysql 版本要求:5.6.5+
3、下载Quick Start安装包:checkout或下载apollo-build-scripts项目。或者通过网盘链接下载,提取码: 9wwe,下载到本地后,在本地解压apollo-quick-start.zip。

安装步骤

1、创建数据库:Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。

mysql命令行创建ApolloPortalDB

下面以MySQL原生客户端为例:windows》mysql安装目录》选择 mysql 5.7command line client.
在这里插入图片描述
输入登录mysql数据库密码,查看数据: show databases ,如果已经存在,则备份数据库即可。
在这里插入图片描述
mysql命令行执行:source sql文件绝对路径, windows和linux同理。
windows机器命令行复制粘贴: 选中要复制的内容》右键( 即复制), 在需要粘贴的位置在右键(即粘贴)。
在这里插入图片描述
查看apolloportaldb是否已经创建成功。
在这里插入图片描述
使用库:use apolloportaldb
查看表: show tables;
在这里插入图片描述导入成功后,可以通过执行以下sql语句来验证:
select Id, AppId, Name from ApolloPortalDB.App;
以上表示sql文件执行成功。

mysql客户端创建ApolloPortalDB

通过各种MySQL客户端导入sql/apolloportaldb.sql即可。以下介绍navicat创建数据库并导入数据。
运行navicat,点击文件》新建数据库连接》mysql.
在这里插入图片描述
数据连接数据ip、端口、用户账号、密码,点击连接测试,提示连接成功,则表示数据库正常。
在这里插入图片描述
选中创建的连接》右键》选择新建数据库》
在这里插入图片描述
输入数据库名称 ApolloPortalDB、字符集为 utf8mb4、排序规则为 utf8mb4_general_ci
在这里插入图片描述
创建成功如下:
在这里插入图片描述
找到自己下载的apolloportaldb.sql 文件,注释或删除2行创建数据库命令。
在这里插入图片描述
选择刚创建的数据库 apolloportaldb》选择运行sql文件
在这里插入图片描述
选择修改后的 apolloportaldb.sql 文件,点击运行即可。
在这里插入图片描述
在这里插入图片描述
运行结果如下,日志中错误没有提示及日志内容提示successfully,表示sql文件执行成功。
在这里插入图片描述
选中apolloportaldb数据库》右键》关闭数据库,然后重新打开结果如下,表示sql文件执行成功。
在这里插入图片描述

创建ApolloConfigDB

同上创建《创建ApolloPortalDB》。
在这里插入图片描述

配置数据库连接信息

Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

注意:填入的用户需要具备对ApolloPortalDB和ApolloConfigDB数据的读写权限。

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

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

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

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

相关文章

实时的软件生成 —— Prompt 编程打通低代码的最后一公里?

原文:实时的软件生成 —— Prompt 编程打通低代码的最后一公里?_运行_问题_示例 PS:这也是一篇畅想,虽然经过了一番试验,依旧有一些不足,但是大体上站得住脚。 传统的软件生成方式需要程序员编写大量的代…

矩阵间关系的建立

参考文献 2-D Compressive Sensing-Based Visually Secure Multilevel Image Encryption Scheme 加密整体流程如下: 我们关注左上角这一部分: 如何在两个图像之间构建关系,当然是借助第3个矩阵。 A. Establish Relationships Between Different Images 简单说明如下: …

Redis类型 Stream Bitfield

Stream 类型 Stream类型就是Redis里的mq,是redis为了占领市场份额的产物 今天我们就来介绍一下Stream Redis的消息队列一般是两个方案 第一个是Lpush Rpop 队列的异步队列方案(一对一) 第二个方案就是pubsub(发布订阅)模式 (一对多) 注:这里如果没有消费者了,队列中的数据就直…

android RK3328 gpio处理,android高级面试2024

public static class CommandResult { public int result -1; public String errorMsg; public String successMsg; } /** 执行命令—单条 param command param isRoot return */ public static CommandResult execCommand(String command, boolean isRoot) { Str…

已上线项目,突然有一天网站虽进得去,但是接口拿不到数据,作为前端的你如何排查问题?

在开始写这篇博客之前,想说几句题外话哈,虽然自己的粉丝不多,但自己每篇博客都是用心在写,可能后面会针对部分文章开启只有VIP才能访问,原因你们也懂得(▽),无非是想赚点外块呗,不过主要现在也是知识付费时代,毕竟自己写出的东西也是本人亲身经历着,也是具有一定的价值…

试题G(买二赠一)

问题描述】 某商场有 N 件商品,其中第 i 件的价格是 Ai。现在该商场正在进行 “买二 赠一” 的优惠活动,具体规则是: 每购买 2 件商品,假设其中较便宜的价格是 P(如果两件商品价格一样, 则 P 等于其中一件…

Python之Opencv进阶教程(2):统计图片灰度级别的像素数量

1、什么是灰度像素数量 在OpenCV中,可以使用**cv2.calcHist()**函数来计算图像的直方图。直方图是一种图形统计表,用于表示图像中每个灰度级别(或颜色通道)的像素数量或密度分布。以下是一个示例代码,演示了如何使用O…

CTK插件框架学习-插件注册调用(03)

CTK插件框架学习-新建插件(02)https://mp.csdn.net/mp_blog/creation/editor/136923735 一、CTK插件组成 接口类:对外暴露的接口,供其他插件调用实现类:实现接口内的方法激活类:负责将插件注册到CTK框架中 二、接口、插件、服务…

CSS绘制三角形和梯形

以上效果对应的CSS依次如下,从左往右依次看就很直观了。 .border {width: 30px;height: 30px;margin: 10px;background-color: lightblue;&_1 {border: solid 1px #b160e7;}&_2 {border-top: solid 15px lightcoral;border-right: solid 15px lightgoldenr…

互联网、因特网、万维网的区别

互联网 internet:凡是能彼此通信的设备组成的网络就叫互联网,即使只有两台计算机,无论以何种技术使其彼此通信,都叫互联网。所以,根据互联网的覆盖规模可以分为: 局域网(Local Area Network&am…

阿里云服务器经济型e实例特点、适用场景介绍和问题解答

阿里云服务器ECS经济型e系列是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU处理器采用Intel Xeon Platinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比&#xff0c…

腾讯云docker创建容器镜像及仓库

这里为了尽量简单,直接用腾讯云容器版本服务器 腾讯云有自己的镜像加速地址,速度还可以,单纯拉取容器还是够用的 但是当我push容器出现各种各样问题因为网络原因,国内访问docker官方镜像站非常麻烦,所以使用阿里的镜像…

储能系统--充电桩中国市场展望(四)

一、充电桩发展 充电桩产业十余年萌芽成长,迈入高速增长时代。2006-2015年为中国充电桩行业萌芽期,2006年,比亚迪在深圳总 部建立了第一座汽车充电站。2008年,北京市奥运会期间建设了国内第一个集中式充电站,在这个阶…

ctf.show_web

11.ctf.show_web11 解题步骤 密码为空,用 bp 抓包,去掉 session。 $password$_SESSION[password]:输入的password和session的结果一致 后端代码就是拿这个session的value值与我们输入的密码进行匹配, 由于这个value值我没解密出来, 所以这…

Unity中如何实现草的LOD

1)Unity中如何实现草的LOD 2)用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理 3)关于进游戏程序集加载的问题 4)预制件编辑模式一直在触发自动保存 这是第379篇UWA技术知识分享的推送,精选了UWA社区的热…

Sakana 与 Jamba

这篇不是什么技术文章,入门没门槛,浅显易懂。 测试完了DBRX,还行吧,但是也没说给我带来多大惊喜,看的出来dataset选的挺好,比如中文语料的识别,也看得出来对推理做了很大的功夫,几乎所有的复杂逻辑全按COT by default呈现,这些是优点,要说缺点,没啥特点,现在说实话…

C语言:文件操作(2)

4.2 fputc的使用 这里写自定义目录标题 fputc的定义: 主要功能:一个字符一个字符的写进文件,将int类型的字符character写进文件流(FILE* stream)中,返回一个整形。如果成功fputc会返回写进文件的字符&…

C++STLmap,set

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

52 vue 中 image 资源直接使用 路径 和 使用require 的差异

前言 这也是 最近碰到的一个比较有趣的问题 是在 http 请求较多的场景下触发的情况 一般 我们的 Vue 中使用图片的地方, 一般会使用 require(“$imgPath”) 或者 “/$imgPath” 来配置图片的资源 然后 这个在目标页面 http 请求比较多的情况下, 两者 会有一些 差异, 我们…

嵌入式Qt 布局管理器QBoxLayout

一.存在问题 二.布局管理器 三.布局接口函数的使用 TestBtn1.setText("Test Button 1"); TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); TestBtn1.setMinimumSize(160, 30); 使用setSizePolicy,那么 TestBtn1按钮 就会随着…