Spring Cloud 系列之 Apollo 配置中心(一) (3)

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

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

1.3.4 Eureka

基于Eureka和Spring Cloud Netflix提供服务注册和发现

Config Service和Admin Service会向Eureka注册服务,并保持心跳

为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的(通过Spring Cloud Netflix)

1.3.5 Portal

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

通过Meta Server获取Admin Service服务列表(IP+Port),通过IP+Port访问服务

在Portal侧做load balance、错误重试

1.3.6 Client

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

通过Meta Server获取Config Service服务列表(IP+Port),通过IP+Port访问服务

在Client侧做load balance、错误重试

服务端

Spring Cloud 系列之 Apollo 配置中心(一)

上图简要描述了配置发布的大致过程:

用户在Portal操作配置发布

Portal调用Admin Service的接口操作发布

Admin Service发布配置后,发送ReleaseMessage给各个Config Service

Config Service收到ReleaseMessage后,通知对应的客户端

客户端

Spring Cloud 系列之 Apollo 配置中心(一)

上图简要描述了Apollo客户端的实现原理:

客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling实现)

客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。

这是一个fallback机制,为了防止推送机制失效导致配置不更新

客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified

定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。

客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中

客户端会把从服务端获取到的配置在本地文件系统缓存一份

在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置

应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

环境准备

点击链接观看:Apollo 搭建服务端视频(获取更多请关注公众号「哈喽沃德先生」)

Java

Apollo 服务端:1.8+

Apollo 客户端:1.7+

由于需要同时启动服务端和客户端,所以建议安装Java 1.8+。

MySQL

版本要求:5.6.5+

Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。

下载Quick Start安装包

Apollo 给我们准备好了一个Quick Start安装包,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。

安装包共50M,如果访问github网速不给力的话,可以从百度网盘下载。

从Github下载

checkout或下载apollo-build-scripts项目

由于Quick Start项目比较大,所以放在了另外的repository,请注意项目地址

https://github.com/nobodyiam/apollo-build-scripts

从百度网盘下载

通过页面的网盘链接下载

下载到本地后,在本地解压apollo-quick-start.zip

为啥安装包要58M这么大?

因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容器

安装 Apollo 创建数据库

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

注意:如果你本地已经创建过Apollo数据库,请注意备份数据。我们准备的sql文件会清空Apollo相关的表。

创建 ApolloPortalDB 数据库

通过各种MySQL客户端导入sql/apolloportaldb.sql即可。

创建 ApolloConfigDB 数据库

通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。

配置数据库连接信息

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyxpx.html