Apollo 快速开始

Apollo是携程框架部门研发的分布式配置中心,它能够集中化管理应用的配置,支持多环境、多集群的配置管理。文章详细介绍了Apollo的核心概念,包括application、environment、cluster和namespace,以及其服务架构和模块,包括ConfigService、AdminService和Meta Server。此外,还提供了Apollo与Spring Cloud Config的对比、角色权限配置、单机和分布式环境的安装步骤,以及传统Spring环境下的客户端集成。文章还涵盖Apollo动态修改配置的原理和常见问题,如环境配置、服务发现和本地缓存路径,帮助读者深入理解并实践Apollo配置中心。

一、apollo是什么

[官方文档很全,也很详细]官网地址:https://github.com/ctripcorp/apollo

apollo是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。

在这里插入图片描述

用户在配置中心对配置进行修改并发布
配置中心通知Apollo客户端有配置更新
Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

1. 为什么要配置中心?

微服务为什么要配置中心?
参考URL: https://blog.youkuaiyun.com/yang75108/article/details/86987941https://blog.youkuaiyun.com/yang75108/article/details/86987941
GitHub 9K Star!Apollo作者手把手教你微服务配置中心之道
参考URL: https://mp.weixin.qq.com/s/iDmYJre_ULEIxuliu1EbIQ

在没有引入配置中心之前,一般企业研发都会面临如下痛点:

  1. 配置散乱格式不标准
    有的用properties格式,有的用xml格式,还有的存DB,团队倾向自造轮子,做法五花八门。

  2. 主要采用本地静态配置,配置修改麻烦
    配置修改一般需要经过一个较长的测试发布周期。在分布式微服务环境下,当服务实例很多时,修改配置费时费力。

  3. 易引发生产事故
    团队在发布的时候将测试环境的配置带到生产上,引发生产事故。

  4. 配置缺乏安全审计和版本控制功能
    谁改的配置?改了什么?什么时候改的?无从追溯,出了问题也无法及时回滚。

2. apollo功能特性

官网:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D

统一管理不同环境、不同集群的配置
配置修改实时生效(热发布)
版本发布管理
灰度发布
权限管理、发布审核、操作审计
客户端配置信息监控
提供Java和.Net原生客户端
提供开放平台API
部署简单  

二、核心概念

Apollo支持4个维度管理Key-Value格式的配置:

application (应用)
environment (环境)
cluster (集群)
namespace (命名空间)

1. application (应用)

  • application 就是实际使用配置的应用,就是指我们的业务服务。
  • 每个应用都需要有唯一的身份标识 - appId,我们认为应用身份是跟着代码走的,所以需要在代码中配置。

2. environment (环境)

  • 配置对应的环境,Apollo客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置。
  • 我们认为环境和代码无关,同一份代码部署在不同的环境就应该能够获取到不同环境的配置。
  • 所以环境默认是通过读取机器上的配置(server.properties中的env属性)指定的,不过为了开发方便,我们也支持运行时通过System Property等指定,具体信息请参见Java客户端使用指南。

3. cluster (集群)

  • 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群。
  • 对不同的cluster,同一个配置可以有不一样的值,如zookeeper地址。
  • 集群默认是通过读取机器上的配置(server.properties中的idc属性)指定的,不过也支持运行时通过System Property指定,具体信息请参见Java客户端使用指南。

4. namespace (命名空间)

Apollo核心概念之“Namespace”
参考URL: https://github.com/ctripcorp/apollo/wiki/Apollo%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B9%8B%E2%80%9CNamespace%E2%80%9D

  • Namespace是配置项的集合,类似于一个配置文件的概念
  • 一个应用下不同配置的分组,可以简单地把namespace类比为文件,不同类型的配置存放在不同的文件中,如数据库配置文件,rpc配置文件,应用自身的配置文件等
  • 应用可以直接读取到公共组件的配置namespace,如DAL,RPC等
  • 应用也可以通过继承公共组件的配置namespace来对公共组件的配置做调整,如DAL的初始数据库连接数

如果应用有公共组件(如hermes-producer,cat-client等)供其它应用使用,就需要通过自定义namespace来实现公共组件的配置。

三、架构和模块

【推荐-写的很好】微服务架构~携程Apollo配置中心架构剖析
参考URL: https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ

在这里插入图片描述

1. 四个核心模块及其主要功能

  1. ConfigService

    Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端。

  2. AdminService

    Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
    Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳

  3. Client

    Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能

    通过Meta Server获取Config Service服务列表(IP+Port),通过IP+Port访问服务,而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试

  4. Portal

    提供Web界面供用户管理配置

    Portal通过Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。

在这里插入图片描述上图简要描述了配置发布的大致过程:

  • 用户在Portal操作配置发布
  • Portal调用Admin Service的接口操作发布
  • Admin Service发布配置后,发送ReleaseMessage给各个Config Service
  • Config Service收到ReleaseMessage后,通知对应的客户端

2. 三个辅助服务发现模块

  • Eureka

    • 基于Eureka提供服务注册和发现
    • Config Service和Admin Service会向Eureka注册服务,并保持心跳
    • 为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的
  • Meta Server

    • Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port)

    • Client通过域名访问Meta Server获取Config Service服务列表(IP+Port)

    • Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client

    • 增设一个Meta Server的角色主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个Http接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的服务注册和发现组件

    • Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的,所以IP、端口和Config Service一致

  • NginxLB

    • 和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表
    • 和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表
    • 和域名系统配合,协助用户访问Portal进行配置管理

四、Apollo和Spring Cloud Config配置中心对比

在这里插入图片描述

五、角色权限配置

在这里插入图片描述

总结: 项目管理员(应用负责人)的权限还是比较大的,可以配置配置的修改和发布权限。 要限制某个账号某个环境不可修改或不可发布,使用一个非项目管理员的账号。

六、单机测试安装步骤

官方参考: https://github.com/nobodyiam/apollo-build-scripts

1. 准备:下载Quick Start安装包

官方准备了一个 Quick Start安装包,针对本地测试使用。Quick Start会在本地同时启动服务端和客户端。

不过这里需要注意的是,Quick Start只针对本地测试使用,如果要部署到生产环境,还请另行参考分布式部署指南。

下载解压Quick Start安装包

[root@localhost ~]# unzip -d apollo-quick-start-1.6.1 apollo-quick-start-1.6.1.zip 

2. 创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB
导入安装包sql/目录下的两个sql脚本。

3. 配置数据库连接信息

Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh,修改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=密码(如果没有密码,留空即可)

4. 启动服务

Quick Start脚本会在本地启动3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值