国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

由淺入深剖析 Apollo(阿波羅)架構(gòu)

這篇具有很好參考價值的文章主要介紹了由淺入深剖析 Apollo(阿波羅)架構(gòu)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、介紹

二、架構(gòu)和模塊

三、架構(gòu)剖析

1.最簡架構(gòu)

?2. 高可用保障

?3.多接口擴展

四、總結(jié)


一、介紹

Apollo(阿波羅)是攜程框架部研發(fā)并開源的一款生產(chǎn)級的配置中心產(chǎn)品,它能夠集中管理應(yīng)用在不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場景。

Apollo 目前在國內(nèi)開發(fā)者社區(qū)比較熱,在?Github?上有超過 5k 顆星,在國內(nèi)眾多互聯(lián)網(wǎng)公司有落地案例,可以說 Apollo 是目前配置中心產(chǎn)品領(lǐng)域 Number1 的產(chǎn)品,其成熟度和企業(yè)級特性要遠遠強于 Spring Cloud 體系中的 Spring Cloud Config 產(chǎn)品。

Apollo 采用分布式微服務(wù)架構(gòu),它的架構(gòu)有一點復(fù)雜。Apollo 的作者宋順雖然給出了一個架構(gòu)圖,但是如果沒有一定的分布式微服務(wù)架構(gòu)基礎(chǔ)的話,則普通的開發(fā)人員甚至是架構(gòu)師也很難一下子理解。只有完全理解了 Apollo 的架構(gòu)才能在生產(chǎn)實踐中更好的部署和使用 Apollo。另外,通過學(xué)習(xí) Apollo 的架構(gòu),大家可以深入理解微服務(wù)架構(gòu)的一些基本原理。

二、架構(gòu)和模塊

下圖為官方的架構(gòu)圖:

apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件

如果沒有足夠的分布式微服務(wù)架構(gòu)的基礎(chǔ),對攜程的一些框架產(chǎn)品 (比如 Software Load Balancer (SLB) 不了解的話,那么首次看這個架構(gòu)圖是不太好理解的。

下面是 Apollo 的七個模塊,其中四個模塊是和功能相關(guān)的核心模塊,另外三個模塊是輔助服務(wù)發(fā)現(xiàn)的模塊:

四個核心模塊及其主要功能:

模塊 主要功能
ConfigService

服務(wù)于Apollo客戶端

提供配置獲取接口
提供配置推送接口

AdminService

服務(wù)于管理界面Portal

提供配置管理接口
提供配置修改發(fā)布接口

Client 為應(yīng)用獲取配置,支持實時更新
通過MetaServer獲取ConfigService的服務(wù)列表
使用客戶端軟負載SLB方式調(diào)用ConfigService
Portal 配置管理界面
通過MetaServer獲取AdminService的服務(wù)列表
使用客戶端軟負載SLB方式調(diào)用AdminService

三個輔助服務(wù)發(fā)現(xiàn)模塊

模塊 主要功能
Eureka 用于服務(wù)發(fā)現(xiàn)和注冊
Config/AdminService注冊實例并定期報心跳
和ConfigService組在一起部署
MetaServer

相當于一個Eureka Proxy

邏輯角色,和ConfigService組在一起部署

Portal通過域名訪問MetaServer獲取AdminService的地址列表
Client通過域名訪問MetaServer獲取ConfigService的地址列表

NginxLB

和域名系統(tǒng)配合,協(xié)助用戶訪問Portal進行配置管理

和域名系統(tǒng)配合,協(xié)助Portal訪問MetaServer獲取AdminService地址列表
和域名系統(tǒng)配合,協(xié)助Client訪問MetaServer獲取ConfigService地址列表

三、架構(gòu)剖析

1.最簡架構(gòu)

如果不考慮分布式微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)問題,Apollo 的最簡架構(gòu)如下圖所示:
apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件
注意事項:

  1. ConfigService 是一個獨立的微服務(wù),服務(wù)于 Client 進行配置獲取
  2. Client 和 ConfigService 保持長連接,通過一種拖拉結(jié)合 (push & pull) 的模式,實現(xiàn)配置實時更新的同時,保證配置更新不丟失。
  3. AdminService 是一個獨立的微服務(wù),服務(wù)于 Portal 進行配置管理。Portal 通過調(diào)用 AdminService 進行配置管理和發(fā)布。
  4. ConfigService 和 AdminService 共享 ConfigDB,ConfigDB 中存放項目在某個環(huán)境的配置信息。ConfigService/AdminService/ConfigDB 三者在每個環(huán)境 (DEV/FAT/UAT/PRO) 中都要部署一份。
  5. Portal 有一個獨立的 PortalDB,存放用戶權(quán)限、項目和配置的元數(shù)據(jù)信息。Portal 只需部署一份,它可以管理多套環(huán)境。

?2. 高可用保障

為了保證高可用,ConfigService 和 AdminService 都是無狀態(tài)以集群方式部署的,這個時候就存在一個服務(wù)發(fā)現(xiàn)問題:Client 怎么找到 ConfigService?Portal 怎么找到 AdminService?為了解決這個問題,Apollo 在其架構(gòu)中引入了 Eureka 服務(wù)注冊中心組件,實現(xiàn)微服務(wù)間的服務(wù)注冊和發(fā)現(xiàn),更新后的架構(gòu)如下圖所示:

apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件

眾所周知, Eureka 是自帶服務(wù)發(fā)現(xiàn)的 Java 客戶端的,如果 Apollo 只支持 Java 客戶端接入,不支持其它語言客戶端接入的話,那么 Client 和 Portal 只需要引入 Eureka 的 Java 客戶端,就可以實現(xiàn)服務(wù)發(fā)現(xiàn)功能。發(fā)現(xiàn)目標服務(wù)后,通過客戶端軟負載 (SLB,例如 Ribbon) 就可以路由到目標服務(wù)實例。這是一個經(jīng)典的微服務(wù)架構(gòu),基于 Eureka 實現(xiàn)服務(wù)注冊發(fā)現(xiàn) + 客戶端 Ribbon 配合實現(xiàn)軟路由,如下圖所示:

apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件

注意事項:?

  1. Config/AdminService 啟動后都會注冊到 Eureka 服務(wù)注冊中心,并定期發(fā)送?;钚奶?。
  2. Eureka 采用集群方式部署,使用分布式一致性協(xié)議保證每個實例的狀態(tài)最終一致。

?3.多接口擴展

在攜程,應(yīng)用場景不僅有 Java,還有很多遺留的.Net 應(yīng)用。Apollo 的作者也考慮到開源到社區(qū)以后,很多客戶應(yīng)用是非 Java 的。但是 Eureka(包括 Ribbon 軟負載) 原生僅支持 Java 客戶端,如果要為多語言開發(fā) Eureka/Ribbon 客戶端,這個工作量很大也不可控。

為此,Apollo 的作者引入了 MetaServer 這個角色,其實可以將其視為一個 Eureka 的 Proxy代理,其將 Eureka 的服務(wù)發(fā)現(xiàn)接口以更簡單明確的 HTTP 接口的形式暴露出來,方便 Client/Protal 通過簡單的 HTTPClient 就可以查詢到 Config/AdminService 的地址列表。獲取到服務(wù)實例地址列表之后,再以簡單的客戶端軟負載 (Client SLB) 策略路由定位到目標實例并發(fā)起調(diào)用。

現(xiàn)在還有一個問題,MetaServer 本身也是無狀態(tài)以集群方式部署的,那么 Client/Protal 該如何發(fā)現(xiàn) MetaServer 呢?一種傳統(tǒng)的做法是借助硬件或者軟件負載均衡器,例如在攜程采用的是擴展后的 NginxLB(也稱 Software Load Balancer),由運維為 MetaServer 集群配置一個域名,指向 NginxLB 集群,NginxLB 再對 MetaServer 進行負載均衡和流量轉(zhuǎn)發(fā)。Client/Portal 通過域名 +NginxLB 間接訪問 MetaServer 集群。

引入 MetaServer 和 NginxLB 之后的架構(gòu)如下圖所示:

apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件

?

現(xiàn)在還剩下最后一個環(huán)節(jié):Portal 也是無狀態(tài)以集群方式部署的,用戶如何發(fā)現(xiàn)和訪問 Portal?答案也是簡單的傳統(tǒng)做法,用戶通過域名 +NginxLB 間接訪問 Portal 集群。

包括用戶端的最終的 Apollo 架構(gòu)全貌如下圖所示:apollo架構(gòu),中間件,Java,java,微服務(wù),架構(gòu),spring cloud,中間件

四、總結(jié)

  1. 官方的視角是從上往下的俯視視角,而本文是側(cè)面視角。經(jīng)過三部分的剖析之后,相信大家對 Apollo 的微服務(wù)架構(gòu)會有更清晰的認識,
  2. ConfgService/AdminService/Client/Portal 是 Apollo 的四個核心微服務(wù)模塊,相互協(xié)作完成配置中心業(yè)務(wù)功能,Eureka/MetaServer/NginxLB 是輔助微服務(wù)之間進行服務(wù)發(fā)現(xiàn)的模塊。
  3. Apollo 采用微服務(wù)架構(gòu)設(shè)計,架構(gòu)和部署都有一些復(fù)雜,但是每個服務(wù)職責單一,易于擴展。
  4. Apollo 只需要一套 Portal 就可以集中管理多套環(huán)境 (DEV/FAT/UAT/PRO) 中的配置,這個是它的架構(gòu)的一大亮點。
  5. 服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)的基礎(chǔ),在 Apollo 的微服務(wù)架構(gòu)中,既采用 Eureka 注冊中心式的服務(wù)發(fā)現(xiàn),也采用 NginxLB 集中 Proxy 式的服務(wù)發(fā)現(xiàn)。

最后附上Apollo的官方代碼,代碼中有許多值得學(xué)習(xí)和借鑒的地方,大家如果感興趣的話可以參考:
https://github.com/ctripcorp/apollo文章來源地址http://www.zghlxwxcb.cn/news/detail-635890.html

到了這里,關(guān)于由淺入深剖析 Apollo(阿波羅)架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 由淺入深Netty代碼調(diào)優(yōu)

    由淺入深Netty代碼調(diào)優(yōu)

    序列化,反序列化主要用在消息正文的轉(zhuǎn)換上 序列化時,需要將 Java 對象變?yōu)橐獋鬏數(shù)臄?shù)據(jù)(可以是 byte[],或 json 等,最終都需要變成 byte[]) 反序列化時,需要將傳入的正文數(shù)據(jù)還原成 Java 對象,便于處理 目前的代碼僅支持 Java 自帶的序列化,反序列化機制,核心代碼如

    2024年02月05日
    瀏覽(22)
  • 【由淺入深學(xué)習(xí)MySQL】之索引進階

    【由淺入深學(xué)習(xí)MySQL】之索引進階

    本系列為:MySQL數(shù)據(jù)庫詳解,為千鋒資深教學(xué)老師獨家創(chuàng)作 致力于為大家講解清晰MySQL數(shù)據(jù)庫相關(guān)知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【關(guān)注】持續(xù)追更~ 文末有本文重點總結(jié),技術(shù)類問題,也歡迎大家和我們溝通交流! 從今天開始本系列

    2024年02月05日
    瀏覽(22)
  • 手拉手Vue組件由淺入深

    手拉手Vue組件由淺入深

    組件 (Component) 是 Vue.js 最強大的功能之一,它是html、css、js等的一個聚合體,封裝性和隔離性非常強。 組件化開發(fā): ??? 1、將一個具備完整功能的項目的一部分分割多處使用 ??? 2、加快項目的進度 ??? 3、可以進行項目的復(fù)用 組件注冊分為:全局注冊和局部注冊 目錄

    2024年01月18日
    瀏覽(22)
  • 由淺入深理解C#中的事件

    本文較長,給大家提供了目錄,可以直接看自己感興趣的部分。 前面介紹了C#中的委托,事件的很多部分都與委托類似。實際上,事件就像是專門用于某種特殊用途的簡單委托,事件包含了一個私有的委托,如下圖所示: 有關(guān)事件的私有委托需要了解的重要事項如下: 1、事

    2024年02月03日
    瀏覽(29)
  • 由淺入深介紹 Python Websocket 編程

    由淺入深介紹 Python Websocket 編程

    1.1 websocket 協(xié)議簡介 Websocket協(xié)議是對http的改進,可以實現(xiàn)client 與 server之間的雙向通信; websocket連接一旦建立就始終保持,直到client或server 中斷連接,彌補了http無法保持長連接的不足,方便了客戶端應(yīng)用與服務(wù)器之間實時通信。 適用場景 html頁面實時更新, 客戶端的html頁面

    2024年02月03日
    瀏覽(22)
  • Springboot3+EasyExcel由淺入深

    Springboot3+EasyExcel由淺入深

    環(huán)境介紹 技術(shù)棧 springboot3+easyexcel 軟件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3 EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。 他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。 官網(wǎng)https://easyexcel.opensource.ali

    2024年01月16日
    瀏覽(28)
  • 【由淺入深學(xué)MySQL】- MySQL連接查詢

    【由淺入深學(xué)MySQL】- MySQL連接查詢

    本系列為:MySQL數(shù)據(jù)庫詳解,為千鋒教育資深Java教學(xué)老師獨家創(chuàng)作 致力于為大家講解清晰MySQL數(shù)據(jù)庫相關(guān)知識點,含有豐富的代碼案例及講解。如果感覺對大家有幫助的話,可以【點個關(guān)注】持續(xù)追更~ 文末有重點總結(jié)和福利內(nèi)容! 技術(shù)類問題,也歡迎大家和我們溝通交流!

    2024年02月05日
    瀏覽(23)
  • 由淺入深了解機器學(xué)習(xí)和GPT原理

    由淺入深了解機器學(xué)習(xí)和GPT原理

    我不是一個機器學(xué)習(xí)專家,本來是一名軟件工程師,與人工智能的互動很少。我一直渴望深入了解機器學(xué)習(xí),但一直沒有找到適合自己的入門方式。這就是為什么,當谷歌在2015年11月開源TensorFlow時,我非常興奮,知道是時候開始學(xué)習(xí)之旅了。不想過于夸張,但對我來說,這就

    2024年02月09日
    瀏覽(20)
  • 什么是感知機——圖文并茂,由淺入深

    什么是感知機——圖文并茂,由淺入深

    生活中常常伴隨著各種各樣的邏輯判斷,比如看到遠方天空中飄來烏云,打開手機看到天氣預(yù)報說1小時后40%的概率下雨,此時時候我們常常會做出等會下雨,出門帶傘的判斷。 上述思考過程可以抽象為一個”與“的”神經(jīng)邏輯“。當”看到烏云“和”天氣預(yù)報40%下雨“同時

    2023年04月20日
    瀏覽(24)
  • 由淺入深詳解四種分布式鎖

    在多線程環(huán)境下,為了保證數(shù)據(jù)的線程安全, 鎖保證同一時刻,只有一個可以訪問和更新共享數(shù)據(jù) 。在單機系統(tǒng)我們可以使用 synchronized 鎖或者 Lock 鎖保證線程安全。 synchronized 鎖是 Java 提供的一種內(nèi)置鎖,在單個 JVM 進程中提供線程之間的鎖定機制,控制多線程并發(fā)。只適

    2023年04月19日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包