您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“apollo知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、總結(jié):
1.管理:應(yīng)用管理、命名空間管理、部門管理、用戶管理、角色管理、權(quán)限管理、審計(jì)管理
2.數(shù)據(jù)結(jié)構(gòu):應(yīng)用、元素item、元素變更記錄、元素發(fā)布記錄、元素灰度規(guī)則(臨時(shí)命名空間)
1.使用:配置服務(wù)器地址、配置本地緩存地址,配置環(huán)境evn、配置集群、配置appid
2.使用配置方法:java環(huán)境、系統(tǒng)管理、配置文件、-D參數(shù)
二、應(yīng)用三板斧
(一)配置中心部署
1.將兩個(gè)數(shù)據(jù)庫(kù)腳本導(dǎo)入到mysql數(shù)據(jù)庫(kù)
2.修改configService、adminService、portal項(xiàng)目中的數(shù)據(jù)庫(kù)連接和遠(yuǎn)程服務(wù)調(diào)用地址配置
3.啟動(dòng)configService、adminService、portal三個(gè)項(xiàng)目
(二)程序應(yīng)用實(shí)例
1.pom文件
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-core</artifactId> <version>1.4.0</version> </dependency>
2.app.properties(resources/META-INF目錄下)
# test app.id=umember env=DEV apollo.meta=http://localhost:8080
3.測(cè)試代碼
package com.unilife.test; import java.io.BufferedReader; import java.io.InputStreamReader; import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.ConfigChangeListener; import com.ctrip.framework.apollo.ConfigService; import com.ctrip.framework.apollo.model.ConfigChange; import com.ctrip.framework.apollo.model.ConfigChangeEvent; import com.google.common.base.Charsets; public class TestApollo { public static void main(String[] args) throws Exception{ Config appConfig=ConfigService.getAppConfig(); try { String k1=appConfig.getProperty("jdbc.type", null); // k1 = v11 String k2=appConfig.getProperty("k2", null); // k2 = v21 System.out.println(k1); System.out.println(k2); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } appConfig.addChangeListener(new ConfigChangeListener() { public void onChange(ConfigChangeEvent changeEvent) { //do something System.out.println("Changes for namespace :"+ changeEvent.getNamespace()); for (String key : changeEvent.changedKeys()) { ConfigChange change = changeEvent.getChange(key); System.out.println("Change - key: "+change.getPropertyName()+", oldValue: "+change.getOldValue()+", newValue: "+change.getNewValue()+", changeType: "+change.getChangeType()); } } }); while (true) { System.out.print("> "); String input = new BufferedReader(new InputStreamReader(System.in, Charsets.UTF_8)).readLine(); if (input == null || input.length() == 0) { continue; } input = input.trim(); if (input.equalsIgnoreCase("quit")) { System.exit(0); } String temp=appConfig.getProperty(input,null); System.out.println(temp); } } }
三、理論(轉(zhuǎn))
1、SpringCloudConfig和Apollo的對(duì)比
2、apollo的介紹
3、apollo架構(gòu)設(shè)計(jì)原理
4、客戶端通過apollo拉取配置的原理
1、SpringCloudConfig和Apollo的對(duì)比
如上圖對(duì)比
SpringCloudConfig優(yōu)勢(shì)是對(duì)SpringBoot原生支持,且是SpringCloud組件。缺點(diǎn)是無(wú)界面管理,且需要git,SpringCloudBus、Mq支持其動(dòng)態(tài)更新。
Apollo優(yōu)勢(shì)是技術(shù)棧單一,僅需要Mysql就可以支持動(dòng)態(tài)更新配置,便于維護(hù)。缺點(diǎn)是不是SpringCloud體系,雖然開源,版本更新也活躍,但是對(duì)SpringCloud的支持沒有SpringCloudConfig的好。
2、apollo的介紹
Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。
Apollo支持4個(gè)維度管理Key-Value格式的配置:
application (應(yīng)用)
environment (環(huán)境)
cluster (集群)
namespace (命名空間)
同時(shí),Apollo基于開源模式開發(fā),開源地址
3、apollo架構(gòu)設(shè)計(jì)原理
上圖簡(jiǎn)要描述了Apollo的總體設(shè)計(jì),我們可以從下往上看:
Config Service提供配置的讀取、推送等功能,服務(wù)對(duì)象是Apollo客戶端
Admin Service提供配置的修改、發(fā)布等功能,服務(wù)對(duì)象是Apollo Portal(管理界面)
Config Service和Admin Service都是多實(shí)例、無(wú)狀態(tài)部署,所以需要將自己注冊(cè)到Eureka中并保持心跳在Eureka之上我們架了一層Meta Server用于封裝Eureka的服務(wù)發(fā)現(xiàn)接口
Client通過域名訪問Meta Server獲取ConfigService服務(wù)列表(IP+Port),而后直接通過IP+Port訪問服務(wù),同時(shí)在
Client側(cè)會(huì)做load balance、錯(cuò)誤重試
Portal通過域名訪問Meta Server獲取AdminService服務(wù)列表(IP+Port),而后直接通過IP+Port訪問服務(wù),同時(shí)在
Portal側(cè)會(huì)做load balance、錯(cuò)誤重試
為了簡(jiǎn)化部署,我們實(shí)際上會(huì)把Config Service、Eureka和Meta Server三個(gè)邏輯角色部署在同一個(gè)JVM進(jìn)程中
4、客戶端通過apollo拉取配置的原理
上圖簡(jiǎn)要描述了Apollo客戶端的實(shí)現(xiàn)原理:
客戶端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而能第一時(shí)間獲得配置更新的推送。
客戶端還會(huì)定時(shí)從Apollo配置中心服務(wù)端拉取應(yīng)用的最新配置。
這是一個(gè)fallback機(jī)制,為了防止推送機(jī)制失效導(dǎo)致配置不更新
客戶端定時(shí)拉取會(huì)上報(bào)本地版本,所以一般情況下,對(duì)于定時(shí)拉取的操作,服務(wù)端都會(huì)返回304 - Not Modified
定時(shí)頻率默認(rèn)為每5分鐘拉取一次,客戶端也可以通過在運(yùn)行時(shí)指定System Property: apollo.refreshInterval來覆蓋,單位為分鐘。
客戶端從Apollo配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會(huì)保存在內(nèi)存中
客戶端會(huì)把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份
在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時(shí)候,依然能從本地恢復(fù)配置
應(yīng)用程序從Apollo客戶端獲取最新的配置、訂閱配置更新通知
配置更新推送實(shí)現(xiàn)
前面提到了Apollo客戶端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而能第一時(shí)間獲得配置更新的推送。
長(zhǎng)連接實(shí)際上我們是通過Http Long Polling實(shí)現(xiàn)的,具體而言:
客戶端發(fā)起一個(gè)Http請(qǐng)求到服務(wù)端
服務(wù)端會(huì)保持住這個(gè)連接60秒
如果在60秒內(nèi)有客戶端關(guān)心的配置變化,被保持住的客戶端請(qǐng)求會(huì)立即返回,并告知客戶端有配置變化的namespace信息,客戶端會(huì)據(jù)此拉取對(duì)應(yīng)namespace的最新配置
如果在60秒內(nèi)沒有客戶端關(guān)心的配置變化,那么會(huì)返回Http狀態(tài)碼304給客戶端
客戶端在收到服務(wù)端請(qǐng)求后會(huì)立即重新發(fā)起連接,回到第一步
考慮到會(huì)有數(shù)萬(wàn)客戶端向服務(wù)端發(fā)起長(zhǎng)連,在服務(wù)端我們使用了async servlet(Spring DeferredResult)來服務(wù)Http Long Polling請(qǐng)求。
“apollo知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。