溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

apollo知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-16 11:20:17 來源:億速云 閱讀:134 作者:iii 欄目:大數(shù)據(jù)

本篇內(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ì)比

apollo知識(shí)點(diǎn)有哪些

如上圖對(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ì)原理

apollo知識(shí)點(diǎn)有哪些
上圖簡(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拉取配置的原理

apollo知識(shí)點(diǎn)有哪些
上圖簡(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í)用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI