Apollo配置中心使用

apollo配置中心使用

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

Apollo配置中心

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
在这里插入图片描述
参考官网本地部署,该部署以linux服务器为例介绍部署,如果需要再windows上执行部署,需要下载源码自行编译打包部署。

准备工作

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 5.7通过命令行及客户端两种方式导入脚本文件。

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=密码(如果没有密码,留空即可)注意:数据库名大小写,可以通过命令设置不区分大小写。默认创建都是小写。
启动Apollo配置中心

1、 确保端口未被占用
Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。
例如,在Linux/Mac下,可以通过如下命令检查:

lsof -i:8080

2、脚本执行启动脚本
sh 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!

docker安装

Apollo 1.7.0版本开始会默认上传Docker镜像到Docker Hub,可以按照如下步骤获取。
在这里插入图片描述

mysql

1、mysql安装
参考《docker安装mysql服务》

2、客户端连接测试
在这里插入图片描述

Apollo Config Service

1、获取镜像

docker pull apolloconfig/apollo-configservice:${version}
version:指定下载版本,可以不指定,默认下载最新版本latest

2、运行镜像

docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.3.103:3306/apolloconfigdb?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \
-dit -v /tmp/logs:/opt/logs --name apollo-configservice apolloconfig/apollo-configservice:latest

参数说明:
SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址
SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名
SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

Apollo Admin Service

1、获取镜像

docker pull apolloconfig/apollo-adminservice:${version}
version:指定下载版本,可以不指定,默认下载最新版本latest

2、运行镜像

docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.3.103:3306/apolloconfigdb?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \
-dit -v /tmp/logs:/opt/logs --name apollo-adminservice apolloconfig/apollo-adminservice:latest

参数说明:
SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址
SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名
SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码

Apollo Portal

1、获取镜像

docker pull apolloconfig/apollo-portal
默认下载最新版本latest

2、运行镜像

docker run -p 8070:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.3.103:3306/apolloportaldb?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \
-e APOLLO_PORTAL_ENVS=dev \
-e DEV_META=http://192.168.3.103:8080 \
-dit -v /tmp/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal:latest

参数说明:
SPRING_DATASOURCE_URL: 对应环境ApolloPortalDB的地址
SPRING_DATASOURCE_USERNAME: 对应环境ApolloPortalDB的用户名
SPRING_DATASOURCE_PASSWORD: 对应环境ApolloPortalDB的密码
APOLLO_PORTAL_ENVS(可选): 对应ApolloPortalDB中的apollo.portal.envs配置项,如果没有在数据库中配置的话,可以通过此环境参数配置
DEV_META/PRO_META(可选): 配置对应环境的Meta Service地址,以${ENV}_META命名,需要注意的是如果配置了ApolloPortalDB中的apollo.portal.meta.servers配置,则以apollo.portal.meta.servers中的配置为准。
安装完成如下,3个服务全部启动成功。
在这里插入图片描述

登录测试

浏览器访问: http://192.168.3.103:8070/ ,登录账号/密码: apollo/admin
在这里插入图片描述
登录成功如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MultiPath HTTP:北大与华为合作部署FLEETY

当前的终端基本都能支持蜂窝网络和wifi网络,然而,不同的网络通路都不可避免的会出现信号不好或者其他因素引起的通路性能(吞吐量、时延等)下降。为了能够提升终端业务体验,很多不同的MultiPath方案被提出,其中,包括应用…

【数据分析面试】1. 计算年度收入百分比(SQL)

题目 你需要为公司的营收来源生成一份年度报告。计算截止目前为止,在表格中记录的第一年和最后一年所创造的总收入百分比。将百分比四舍五入到两位小数。 示例: 输入: annual_payments 表 列名类型amountINTEGERcreated_atDATETIMEstatusV…

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE(Conditional Variational Autoencoder,条件变分自编码器)是一种变分自编码器(VAE)的变体,用于生成有条件的数据。在传统的变分自编码器中,生成的数据是完全由潜在变量决定的&…

STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0” 使用字符数组使用printf,string参考 使用字符数组 使用STM32的串口发送数据,核心代码如下: char str[] "hello world!\n\r";while(1) {HAL_UART_Transmit(&huart2, str, sizeof (str), 10);HAL…

设计模式深度解析:AI如何影响装饰器模式与组合模式的选择与应用

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 AI如何影响装饰器模式与组合模式的选择与应用 在今天这个快速发展的技术时代&#…

高阶SQL语句(二)

一 子查询 也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句 是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。 ①子语句可以与主语句所查询的表相同,也可以是不…

解决WSL更新速度慢的方案

在Windows上安装Docker Desktop时,如果选择使用WSL,则可能会出现在运行程序前要求升级WSL的步骤。程序会提示使用下面指令来升级 wsl.exe --update但是升级速度特别慢,于是在网络不稳定的情况下经常会出现下载失败的情况。 百度里一直没搜到…

2024中国(杭州)国际数字物流技术与应用展览会将于7月8日举办

2024中国(杭州)国际数字物流技术与应用展览会 2024年7月8-10日 | 杭州国际博览中心 同期举办:2024长三角快递物流供应链与技术装备展览会 数字贸易创新引领合作动能 《十四五规划》明确指出关于“加快数字化发展,建设数字中国…

STM32CubeMX学习笔记28---FreeRTOS软件定时器

一、软件定时器简介 1 、基本概念 定时器,是指从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户 可以自定义定时器的周期与频率。类似生活中的闹钟,我们可以设置闹钟每天什么时候响, 还能设置…

微服务demo(三)nacosfeign

一、feign使用 1、集成方法 1.1、pom consumer添加依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version></dependency&…

C++刷题篇——08字符串重新排列

一、题目 二、解题思路 1、先对每个单词内部进行排序&#xff0c;再对单词间进行排序 2、使用map&#xff0c;key为单词&#xff0c;value为出现的次数 3、由于要对map排序&#xff0c;构造pair型的一维数组&#xff0c;将map的key、value放进去 4、构造函数&#xff0c;按照次…

算法学习——LeetCode力扣动态规划篇5(198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III )

算法学习——LeetCode力扣动态规划篇5 198. 打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统…

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

如何使用 ChatGPT 进行编码和编程

文章目录 一、初学者1.1 生成代码片段1.2 解释功能 二、自信的初学者2.1 修复错误2.2 完成部分代码 三、中级水平3.1 研究库3.2 改进旧代码 四、进阶水平4.1 比较示例代码4.2 编程语言之间的翻译 五、专业人士5.1 模拟 Linux 终端 总结 大多数程序员都知道&#xff0c;ChatGPT …

server端

一、创建项目 expess server 1.1 安装nodemon npm i nodemon 1.2 设置连接数据库mongodb 安装mongoose npm i mongoose 在根目录新建config文件夹/db.config.js // 引入mongodb数据库操作模块 const mongoose require("mongoose") // 连接数据库mongoose.con…

【力扣刷题日记】1173.即时食物配送I

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1173.即时食物配送I 表&#xff1a;Delivery 列名类型delivery_idintcustomer_idintorder_datedatecustomer…

软件杯 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

cesium加载.tif格式文件

最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…

LabVIEW车载轴承振动监测系统

LabVIEW车载轴承振动监测系统 随着汽车工业的快速发展&#xff0c;车用轴承的稳定性和可靠性对保障车辆安全运行越来越重要。目前&#xff0c;大多数车用轴承工作在恶劣的环境下&#xff0c;容易出现各种故障。开发了一种基于LabVIEW的车载轴承振动监测系统&#xff0c;提高车…

【Linux】详解文件系统以及周边知识

一、磁盘的基本知识 磁盘中可以被划分成一个一个的环&#xff0c;每个环都是一个磁道。每个磁道又可以被均分成一个一个的扇区&#xff0c;扇区是磁盘IO的基本单位&#xff08;想要修改扇区中的一个比特位就必须把该扇区的全部比特位都加载到内存中&#xff09;。磁盘中的盘面&…