日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

思維導(dǎo)圖

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

文章已收錄Github精選,歡迎Star:https://github.com/yehongzhi/learningSummary

一、概述

Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠實(shí)時(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。

目前Apollo在github有22.6k顆星,在官網(wǎng)登記的使用的公司有451家,算是很流行的配置中心的框架技術(shù)。所以接下來(lái)跟著我一起學(xué)習(xí)Apollo配置中心吧。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

二、為什么使用配置中心

首先,沒有配置中心之前傳統(tǒng)的配置都是寫在配置文件中,比如各種yml、perproties、xml文件。

寫在各種文件里最大的問題在于如果需要改配置信息,需要重新部署發(fā)布應(yīng)用才能生效,這是第一個(gè)問題。

后面為了做到動(dòng)態(tài)讀取配置信息,后面有人改進(jìn)一下把配置信息存儲(chǔ)在數(shù)據(jù)庫(kù)的一張表,程序讀取表中的配置信息,這種方式很多公司都還在使用,因?yàn)楹?jiǎn)單,而且靈活(修改配置只需要執(zhí)行個(gè)SQL語(yǔ)句,不需要重新部署發(fā)布)。但是也不是最完美的,因?yàn)?strong>缺少了權(quán)限控制,沒有管理界面進(jìn)行統(tǒng)一配置,沒有歷史版本的配置信息,不支持回滾(防止誤操作)。

實(shí)際上配置中心在市面上已經(jīng)有很多,比如Nacos、Consul、spring-cloud-config、Apollo等等。

相對(duì)其他的,我覺得選擇Apollo的原因是,界面比較美觀,操作簡(jiǎn)便,部署簡(jiǎn)單,依賴較少,開箱即用。

三、安裝部署

首先要講一下Apollo部署三個(gè)服務(wù)apollo-configservice,apollo-adminservice,apollo-portal,后面我講架構(gòu)設(shè)計(jì)時(shí)會(huì)講一下這三個(gè)服務(wù)是用來(lái)干嘛的。

這里部署建議不要用官網(wǎng)的Quick Start,我一開始使用QuickStart的方式,搞了幾個(gè)鐘頭搞不定,總是在Eureka上多了一個(gè)UNKONWN的服務(wù),然后又無(wú)法訪問8070的管理界面,心態(tài)直接崩潰。上github找了一下,如下:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

作者在下面的回答是這樣的。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

這個(gè)問題發(fā)現(xiàn)不止有一個(gè)issue(#2931)反映了,但是沒有解決,作者建議使用標(biāo)準(zhǔn)部署。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

所以接下來(lái)就講標(biāo)準(zhǔn)部署,也就是分布式部署,有耐心的同學(xué)也可以直接去github看作者寫的分布式部署指南。

先介紹一下環(huán)境依賴,linux服務(wù)器(建議centos7),MySQL(版本要求:5.6.5+),部署的服務(wù)器需要安裝JDK環(huán)境(JAVA 1.8+)。

這里有兩種安裝方式,一種是下載安裝包,另一種是通過(guò)源碼構(gòu)建。一般如果不需要對(duì)Apollo定制開發(fā),直接用安裝包部署即可。我這里演示的就是安裝包部署的方式。

3.1 獲取安裝包

先到官網(wǎng)下載安裝包。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

下載后解壓,如下:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.2 創(chuàng)建數(shù)據(jù)庫(kù)

使用MySQL數(shù)據(jù)庫(kù)(版本要求:5.6.5+)。

3.2.1 創(chuàng)建ApolloPortalDB數(shù)據(jù)庫(kù)

使用github上面的sql腳本創(chuàng)建ApolloPortalDB數(shù)據(jù)庫(kù),導(dǎo)入相關(guān)的表以及數(shù)據(jù)。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.2.2 創(chuàng)建ApolloConfigDB數(shù)據(jù)庫(kù)

使用github上面的sql腳本創(chuàng)建ApolloConfigDB數(shù)據(jù)庫(kù),導(dǎo)入相關(guān)的表以及數(shù)據(jù)。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.3 修改配置

需要改一下數(shù)據(jù)庫(kù)連接信息,路徑在/config下。

3.3.1 apollo-configservice配置

修改apollo-configservice的數(shù)據(jù)庫(kù)連接信息Application-github.properties,如下:

# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = 賬號(hào)
spring.datasource.password = 密碼

3.3.2 apollo-adminservice配置

修改apollo-adminservice的數(shù)據(jù)庫(kù)連接信息application-github.properties,如下:

# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = 賬號(hào)
spring.datasource.password = 密碼

3.3.3 apollo-portal配置

修改apollo-portal的數(shù)據(jù)庫(kù)連接信息application-github.properties,如下:

# DataSource
spring.datasource.url = jdbc:mysql://192.168.0.107:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = 賬號(hào)
spring.datasource.password = 密碼

再修改apollo-env.properties配置,這是關(guān)于環(huán)境配置的,如下:

local.meta=http://localhost:8080
## 開發(fā)環(huán)境
dev.meta=http://192.168.0.107:8080
## 不需要配置的環(huán)境參考${lpt_meta}配置
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}

3.4 部署

然后把三個(gè)文件夾都上傳到Linux服務(wù)器。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.4.1 部署發(fā)布apollo-configservice

部署發(fā)布服務(wù)有順序,首先發(fā)布apollo-configservice,直接執(zhí)行scripts/startup.sh。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

有可能會(huì)出現(xiàn)這個(gè)錯(cuò)誤(我就出現(xiàn)了),不用擔(dān)心,實(shí)際上進(jìn)程還沒有結(jié)束,還在啟動(dòng),我們可以到日志記錄的文件夾(下圖來(lái)源于startup.sh腳本)查看日志。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

啟動(dòng)時(shí)間比較長(zhǎng),因?yàn)檫@個(gè)服務(wù)包括啟動(dòng)Eureka注冊(cè)中心,需要耐心等待。觀察apollo-configservice.log文件,當(dāng)看到如下信息后,表示啟動(dòng)成功。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

Eureka注冊(cè)中心啟動(dòng)成功,可以打開http://192.168.0.107:8080/查看:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.4.2 部署發(fā)布apollo-adminservice

接著發(fā)布apollo-adminservice,直接執(zhí)行scripts/startup.sh。查看日志的方式跟上面一樣。啟動(dòng)成功后,可以看到Eureka的服務(wù)列表中多了一個(gè)服務(wù)。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

3.4.3 部署發(fā)布apollo-portal

接著發(fā)布apollo-portal,直接執(zhí)行scripts/startup.sh。portal是提供Web界面的服務(wù),所以啟動(dòng)成功后,可以打開http://192.168.0.107:8070/登錄web界面,默認(rèn)賬號(hào)密碼是apollo/admin。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 


3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

到此,安裝就完成了!

四、SpringBoot整合Apollo

接下來(lái),整一個(gè)Demo(相當(dāng)于java客戶端),使用SpringBoot整合Apollo,實(shí)現(xiàn)動(dòng)態(tài)讀取配置。

4.1 Mave依賴

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.1.0</version>
</dependency>

4.2 AppId

在classpath路徑下,創(chuàng)建/META-INF/app.properties文件。如下:

# 應(yīng)用的唯一標(biāo)識(shí),后面創(chuàng)建工程需要用到
app.id=apollo-demo

4.3 Apollo Meta Server

其實(shí)就是配置Apollo服務(wù)器的地址。官網(wǎng)提供的方式有很多,我這里選其中一種比較簡(jiǎn)單的方式。在classpath路徑下創(chuàng)建apollo-env.properties文件,配置如下:

dev.meta=http://192.168.0.107:8080
# fat.meta=http://apollo.fat.xxx.com
# uat.meta=http://apollo.uat.xxx.com
# pro.meta=http://apollo.xxx.com

4.4 Environment

其實(shí)是配置環(huán)境,因?yàn)樯厦婵梢耘渲盟姆N環(huán)境,這里配置具體選擇哪個(gè)環(huán)境。這里介紹兩種方式:

第一種通過(guò)Java System Property。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

第二種通過(guò)配置文件。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

到相對(duì)應(yīng)的路徑下創(chuàng)建server.properties,配置如下:

env=DEV

4.5 @EnableApolloConfig

在啟動(dòng)類上加上注解@EnableApolloConfig。

@SpringBootApplication
//開啟apollo配置
@EnableApolloConfig
public class ApolloDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ApolloDemoApplication.class, args);
    }
}

4.6 測(cè)試類

這樣就完成了,接下來(lái)再創(chuàng)建一個(gè)Controller進(jìn)行測(cè)試一下。

@RestController
public class ApolloController {

    //冒號(hào)后面的是默認(rèn)值
    @Value("${configValue:default}")
    private String configValue;

    @RequestMapping("/apollo/getConfig")
    public String getConfig() {
        return configValue;
    }
}

4.7 管理界面創(chuàng)建對(duì)應(yīng)的配置

第一步,創(chuàng)建項(xiàng)目。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 


3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

第二步,創(chuàng)建配置。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

第三步,發(fā)布。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

4.8 測(cè)試

啟動(dòng)項(xiàng)目apollo-demo,然后請(qǐng)求路徑http://localhost:8888/apollo/getConfig,可以看到:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

控制臺(tái)可以看到推送配置信息的日志:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

五、架構(gòu)設(shè)計(jì)

講完了安裝和SpringBoot整合的demo后,我們是時(shí)候探究一下原理,為什么要有三個(gè)服務(wù),又是如何做到配置信息發(fā)布后,客戶端實(shí)時(shí)獲取到最新的配置的。繼續(xù)往下看。

首先看一張官網(wǎng)的架構(gòu)設(shè)計(jì)圖。

5.1 基礎(chǔ)模型

作者在官網(wǎng)上有個(gè)基礎(chǔ)模型的架構(gòu)圖,忽略掉很多細(xì)節(jié)后實(shí)際上非常簡(jiǎn)單:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

  1. 用戶在配置中心對(duì)配置進(jìn)行修改并發(fā)布。
  2. 配置中心通知Apollo客戶端有配置更新。
  3. Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用。

5.2 架構(gòu)模塊

如果我們把Apollo配置中心服務(wù)端展開的話,架構(gòu)圖如下:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

看到這里,整個(gè)架構(gòu)看起來(lái)就比較清晰了。接下來(lái)從上往下簡(jiǎn)單介紹一下:

Portal服務(wù):提供Web界面供用戶管理配置,通過(guò)MetaServer獲取AdminService服務(wù)列表(IP+Port),通過(guò)IP+Port訪問AdminService服務(wù)。

Client:實(shí)際上就是我們創(chuàng)建的SpringBoot項(xiàng)目,引入ApolloClient的maven依賴,為應(yīng)用提供配置獲取、實(shí)時(shí)更新等功能。

Meta Server:從Eureka獲取Config Service和Admin Service的服務(wù)信息,相當(dāng)于是一個(gè)Eureka Client。主要是為了封裝服務(wù)發(fā)現(xiàn)的細(xì)節(jié),對(duì)Portal和Client而言,永遠(yuǎn)通過(guò)一個(gè)Http接口獲取Admin Service和Config Service的服務(wù)信息,而不需要關(guān)心背后實(shí)際的服務(wù)注冊(cè)和發(fā)現(xiàn)組件。Meta Server只是一個(gè)邏輯角色,在部署時(shí)和Config Service是在一個(gè)JVM進(jìn)程中的,所以IP、端口和Config Service一致。

Eureka:注冊(cè)中心。Config Service和Admin Service會(huì)向Eureka注冊(cè)服務(wù)。為了簡(jiǎn)單起見,目前Eureka在部署時(shí)和Config Service是在一個(gè)JVM進(jìn)程中的。

Config Service:提供配置獲取接口。提供配置更新推送接口(基于Http long polling)。服務(wù)對(duì)象為Apollo客戶端(Client)。

Admin Service:提供配置管理接口。提供配置發(fā)布、修改等接口。服務(wù)對(duì)象為Portal。

5.3 配置發(fā)布后的實(shí)時(shí)推送設(shè)計(jì)

上面講完各個(gè)角色的用途,那這些角色是怎么配合一起工作的呢,我們來(lái)看一張圖:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

上圖簡(jiǎn)要描述了配置發(fā)布的大致過(guò)程:

  1. 用戶在Portal操作配置發(fā)布。
  2. Portal調(diào)用Admin Service的接口操作發(fā)布。
  3. Admin Service發(fā)布配置后,發(fā)送ReleaseMessage給各個(gè)Config Service。
  4. Config Service收到ReleaseMessage后,通知對(duì)應(yīng)的客戶端(Client)。

關(guān)鍵點(diǎn)在于AdminService發(fā)送ReleaseMessage給ConfigService,這一步是如何異步發(fā)送的呢,一般異步發(fā)送我們很容易想到消息隊(duì)列,但是實(shí)際上我們?cè)诎惭b部署時(shí)并沒有使用到消息隊(duì)列。

答案在于:

  • Admin Service在配置發(fā)布后會(huì)往ReleaseMessage表插入一條消息記錄,消息內(nèi)容就是配置發(fā)布的AppId+Cluster+Namespace。
  • 然后Config Service有一個(gè)線程會(huì)每秒掃描一次ReleaseMessage表,看看是否有新的消息記錄。
  • Config Service如果發(fā)現(xiàn)有新的消息記錄,那么就會(huì)通知到所有的消息監(jiān)聽器,監(jiān)聽器得到配置發(fā)布的AppId+Cluster+Namespace后,會(huì)通知對(duì)應(yīng)的客戶端。
3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

在實(shí)現(xiàn)上,考慮到Apollo的實(shí)際使用場(chǎng)景,以及為了盡可能減少外部依賴,我們沒有采用外部的消息中間件,而是通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的消息隊(duì)列。----來(lái)自官網(wǎng)

5.4 高可用

Apollo為了實(shí)現(xiàn)高可用,服務(wù)端使用了Eureka作為注冊(cè)中心,這一點(diǎn)在官網(wǎng)也有談到。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

除此之外,客戶端也做了高可用的一些架構(gòu)設(shè)計(jì),比如本地文件緩存。

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

這個(gè)緩存文件默認(rèn)就放在C:optdataapollo-democonfig-cache路徑下:

3千字Apollo配置中心的總結(jié),讓配置“智能”起來(lái)

 

這個(gè)文件的作用是,在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時(shí)候,依然能從本地恢復(fù)配置。

六、絮叨

這篇文章就講到這里。其實(shí)Apollo配置中心算是一個(gè)比較容易上手,架構(gòu)相對(duì)比較清晰的開源項(xiàng)目。目前很多互聯(lián)網(wǎng)公司都在推行微服務(wù)架構(gòu),在使用微服務(wù)的架構(gòu)時(shí),配置信息就會(huì)成倍數(shù)增加,因?yàn)榕渲脤?shí)際上代表的是“控制”,很多時(shí)候程序的運(yùn)行是靠配置去決定行為的,而且要能實(shí)時(shí)生效的,所以就必須要有個(gè)配置中心。

有些公司體量大一些會(huì)自己公司開發(fā)一套配置中心,其實(shí)實(shí)現(xiàn)起來(lái)也不是特別難,我上一間公司就自己實(shí)現(xiàn),使用MQ消息隊(duì)列+數(shù)據(jù)庫(kù),再自己簡(jiǎn)單地搭了一個(gè)增刪改查、刷新配置的web頁(yè)面,就完成了一個(gè)配置中心。

但是我覺得如果有現(xiàn)成的開源的會(huì)更加舒服,不用自己造輪子耗費(fèi)時(shí)間,精力,而且選一些像Apollo這種比較大眾主流的技術(shù)框架,學(xué)習(xí)成本也比較低,網(wǎng)上有很多資料。

那么Apollo配置中心就講到這里了,上面所有例子的代碼都上傳Github了:

https://github.com/yehongzhi/mall

覺得有用就點(diǎn)個(gè)贊吧,你的點(diǎn)贊是我創(chuàng)作的最大動(dòng)力~

拒絕做一條咸魚,我是一個(gè)努力讓大家記住的程序員。我們下期再見!!!

能力有限,如果有什么錯(cuò)誤或者不當(dāng)之處,請(qǐng)大家批評(píng)指正,一起學(xué)習(xí)交流!

分享到:
標(biāo)簽:配置 Apollo
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定