您好,登錄后才能下訂單哦!
本篇內容介紹了“apollo知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、總結:
1.管理:應用管理、命名空間管理、部門管理、用戶管理、角色管理、權限管理、審計管理
2.數據結構:應用、元素item、元素變更記錄、元素發布記錄、元素灰度規則(臨時命名空間)
1.使用:配置服務器地址、配置本地緩存地址,配置環境evn、配置集群、配置appid
2.使用配置方法:java環境、系統管理、配置文件、-D參數
二、應用三板斧
(一)配置中心部署
1.將兩個數據庫腳本導入到mysql數據庫
2.修改configService、adminService、portal項目中的數據庫連接和遠程服務調用地址配置
3.啟動configService、adminService、portal三個項目
(二)程序應用實例
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.測試代碼
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); } } }
三、理論(轉)
1、SpringCloudConfig和Apollo的對比
2、apollo的介紹
3、apollo架構設計原理
4、客戶端通過apollo拉取配置的原理
1、SpringCloudConfig和Apollo的對比
如上圖對比
SpringCloudConfig優勢是對SpringBoot原生支持,且是SpringCloud組件。缺點是無界面管理,且需要git,SpringCloudBus、Mq支持其動態更新。
Apollo優勢是技術棧單一,僅需要Mysql就可以支持動態更新配置,便于維護。缺點是不是SpringCloud體系,雖然開源,版本更新也活躍,但是對SpringCloud的支持沒有SpringCloudConfig的好。
2、apollo的介紹
Apollo(阿波羅)是攜程框架部門研發的開源配置管理中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,并且具備規范的權限、流程治理等特性。
Apollo支持4個維度管理Key-Value格式的配置:
application (應用)
environment (環境)
cluster (集群)
namespace (命名空間)
同時,Apollo基于開源模式開發,開源地址
3、apollo架構設計原理
上圖簡要描述了Apollo的總體設計,我們可以從下往上看:
Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端
Admin Service提供配置的修改、發布等功能,服務對象是Apollo Portal(管理界面)
Config Service和Admin Service都是多實例、無狀態部署,所以需要將自己注冊到Eureka中并保持心跳在Eureka之上我們架了一層Meta Server用于封裝Eureka的服務發現接口
Client通過域名訪問Meta Server獲取ConfigService服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在
Client側會做load balance、錯誤重試
Portal通過域名訪問Meta Server獲取AdminService服務列表(IP+Port),而后直接通過IP+Port訪問服務,同時在
Portal側會做load balance、錯誤重試
為了簡化部署,我們實際上會把Config Service、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程中
4、客戶端通過apollo拉取配置的原理
上圖簡要描述了Apollo客戶端的實現原理:
客戶端和服務端保持了一個長連接,從而能第一時間獲得配置更新的推送。
客戶端還會定時從Apollo配置中心服務端拉取應用的最新配置。
這是一個fallback機制,為了防止推送機制失效導致配置不更新
客戶端定時拉取會上報本地版本,所以一般情況下,對于定時拉取的操作,服務端都會返回304 - Not Modified
定時頻率默認為每5分鐘拉取一次,客戶端也可以通過在運行時指定System Property: apollo.refreshInterval來覆蓋,單位為分鐘。
客戶端從Apollo配置中心服務端獲取到應用的最新配置后,會保存在內存中
客戶端會把從服務端獲取到的配置在本地文件系統緩存一份
在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置
應用程序從Apollo客戶端獲取最新的配置、訂閱配置更新通知
配置更新推送實現
前面提到了Apollo客戶端和服務端保持了一個長連接,從而能第一時間獲得配置更新的推送。
長連接實際上我們是通過Http Long Polling實現的,具體而言:
客戶端發起一個Http請求到服務端
服務端會保持住這個連接60秒
如果在60秒內有客戶端關心的配置變化,被保持住的客戶端請求會立即返回,并告知客戶端有配置變化的namespace信息,客戶端會據此拉取對應namespace的最新配置
如果在60秒內沒有客戶端關心的配置變化,那么會返回Http狀態碼304給客戶端
客戶端在收到服務端請求后會立即重新發起連接,回到第一步
考慮到會有數萬客戶端向服務端發起長連,在服務端我們使用了async servlet(Spring DeferredResult)來服務Http Long Polling請求。
“apollo知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。