Apollo(入门)
Quick Start
配置中心是一种统一管理各种应用配置的基础服务组件
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
配置中心
独立于程序的只读变量
伴随应用的整个生命周期
多种加载方式
分布式下产生的
统一配置管理各种应用配置的基础服务组件
主流配置中心
- Disconf
- Spring Cloud Config
- Apollo
- Nacos
Apollo包括服务端和客户端
服务器打包后直接运行,不需要Tomcat等应用容器
客户端Java不依赖任何框架,能运行于所有java运行时环境,同时对Spring/Spring Boot环境有支持
特性
- 统一管理不同环境,不同集群的配置
- 配置修改实时生效(热发布)
- 版本发布管理
- 灰度发布(发布后,只对部分应用实例生效,等观察一段时间没问题后在推应用实例)
- 权限管理,发布审核,操作审计
- 客户端配置信息监控
- 提供java和.Net原生客户端
- 提供开发平台API
执行流程
暂时无法在飞书文档外展示此内容
安装
- 从百度网盘下载
- 通过网盘链接下载,提取码: 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
同时客户端还会监听配置变化事件,一旦有变化就会输出变化的配置信息。
发布配置
-
创建项目,最后提交
-
新增配置,点击发布就可以发布了
代码实现
编写测试类
需要配置环境变量 ,以系统属性的方式配置
在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进程中
核心概念
- application(应用)运行时需要知道当前应用是谁,从而去获取对应的配置)——(关键字:appId)
- environment(环境)配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪一个环境,从而可以获取应用的配置–(env)
- cluster(集群)一个应用下不同实例的分组,比如按照数据中心分,上海机房的应用实例分为一个集群,北京机房的应用实例分为另一个集群。
- namespace(命名空间)一个应用下不同配置的分组,可以简单的把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC配置文件,应用自身的配置文件等
项目管理
修改系统参数吧
添加配置
创建公告的配置中心
可以选择namespace,并且可以选择关联的 namespace
添加集群
同步配置
读取指定的集群下的配置
加-Dapollo.cluster=SHAJQ
配置发布流程
- 用户在portal操作配置发布
- portal调用Admin service 的接口操作发布
- Admin service 发布配置后,发送Release Message 给Config service
- Config service收到Release Message后,通知对应的客户端
apollo自己为了不发生耦合,自己写了个消息队列
配置的数据都在apolloconfigdb中的releasmenssage
发布原理
-
Config service 通知客户端
-
客户端读取,定时从Apollo配置中心服务端拉取应用的最新配置
-
备用机制,为了防止推送机制失效导致配置不更新
-
客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端会返回304 - not modified
-
定时频率默认为5分钟拉取一次,客户端也可以通过在运行时指定System Property ;
·apollo.refreshInterval·
来覆盖,单位为分。
配置文件
Apollo Meta Server
Apollo 支持应用在不同的环境有不同的配置,常用的指定方式如下:
- Java system property 的apollo.meta:·-Dapollo.meta=http://localhost:8080·
- 在resources目录下新建apollo-env.properties文件
apollo:
id : apollo-quickstart
bootstrap:
enabled: true
# 多的namespace中间用,隔开
namespaces: application
灰度发布
只修改一部分实例
定义
黑白之间能够平滑过渡的一种发布方式。即一部分用户继续用A,另一部分用产品特性B,如果用户对B没有反对,那么逐渐扩大范围,把所有用户都迁移到B上。
实现的功能
- 对于一些对程序比较大影响的配置,可以先在一个或多个实例生效,观察一段时间后全量发布。
- 一些需要调优的配置参数,通过灰度发布功能实现A/B测试。可以在不同的机器上应用不同的配置,调整,测评一段时间后找出较优的配置在全量发布。
全量发布
全部发布,都是一样的配置。
- 作者:麦克猫Cat
- 本文版权归作者和CSDN共有,欢迎交流