日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apollo 配置中心:分布式部署

發布時間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apollo 配置中心:分布式部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,并且具備規范的權限、流程治理等特性,適用于微服務配置管理場景。

服務端架構

上圖簡要描述了 Apollo 的總體設計:

  • Config Service 提供配置的讀取、推送等功能,服務對象是 Apollo 客戶端

  • Admin Service 提供配置的修改、發布等功能,服務對象是 Apollo Portal(管理界面)

  • Config Service 和 Admin Service 在生產環境都是多實例、無狀態部署,所以需要將自己注冊到 Eureka 中并保持心跳

  • 在 Eureka 之上有一層 Meta Server 用于封裝 Eureka 的服務發現接口

  • Client 通過域名訪問 Meta Server 獲取 Config Service 服務列表(IP+Port),而后直接通過 IP+Port 訪問服務,同時在 Client 側會做 load balance、錯誤重試

  • Portal 通過域名訪問 Meta Server 獲取 Admin Service 服務列表 IP+Port,而后直接通過 IP+Port 訪問服務,同時在 Portal 側會做 load balance、錯誤重試

部署策略


上圖描述了 Apollo 的部署策略:

  • PortalDB 主要保存權限、支持的環境等數據,Apollo Portal 環境只需要部署一套,管理所有環境(DEV、FAT、UAT、PRO)

  • ConfigDB 保存應用相關的配置數據,每個環境需要獨立的 ConfigDB 數據庫

  • 為保證穩定性,PortalDB 和 ConfigDB 需要支持 Master-Slave 模式

  • 為簡化部署,實際上會把 Config Service、Eureka 和 Meta Server 部署在同一個 JVM 進程中,Admin Service 部署在另一個 JVM 線程中

  • Meta Server、Eureka 、Config Service 和 Admin Service 在生產環境可部署在兩個機房,實現雙活

客戶端架構

上圖簡要描述了 Apollo 客戶端的實現原理:

  • 客戶端和服務端保持了一個長連接,從而能第一時間獲得配置更新的推送

  • 客戶端會定時從 Apollo 配置中心服務端拉取應用的最新配置(防止推送機制失效導致配置不更新)

  • 客戶端從 Apollo 配置中心服務端獲取到應用的最新配置后,會保存在內存中

  • 客戶端會把從服務端獲取到的配置在本地文件系統緩存一份,在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置

  • 應用程序從 Apollo 客戶端獲取最新的配置、訂閱配置更新通知

分布式部署

通過以上的介紹,可以看出 Apollo 的整體架構并不簡單,但其實也不用擔心,在部署上也并沒那么復雜。接下來主要介紹 Apollo 的分布式部署,之后的文章中會介紹如何在 Java、.NET 客戶端中使用,部署將使用 Docker 的方式,所以讀者最好有一定的 Docker 基礎。

有 Apollo 用戶已經提供了現成的 Dcoker 鏡像?,我們可以直接使用。不過這里還是將通過編譯源代碼的方式來介紹,目的是從最原始操作開始,了解整個過程的實現。

環境要求

  • JDK 1.8+ (安裝后,修改 Path 環境變量)

  • Maven 3.5+ (安裝后,修改 Path 環境變量,建議修改 Maven 源地址,加快下載速度)

  • MySQL 5.6.5+

  • Docker

JDK 和 Maven 只在編譯 Apollo 源代碼時使用,實際使用 Docker 部署并不需要。

創建數據庫

從部署策略圖中可以看出,搭建 Apollo 環境需要使用到 PortalDB、ConfigDB 兩個數據庫,這兩個數據庫的初始腳本官方源碼中已提供:

我們需要在自己的數據庫上執行以上兩個文件的腳本,這里將搭建一個基于 PRO 的分布式環境(?如果需要支持多個環境,需要在對應環境的數據庫上建 ConfigDB,服務啟動改成對應環境的數據庫連接,更多請參考?調整ApolloPortalDB配置?和?調整ApolloConfigDB配置?),如下:


構建 Docker 鏡像

  • 下載最新?apollo master 分支?代碼(當前是 1.5.0-SNAPSHOT),網上很多介紹都需要修改源代碼后再進行編譯,這個版本已有哥們提交了 Merge Request ,使在 Docker 部署上更簡化了。如有特殊需要,也可自行修改源碼。

  • 下載完成后在根目錄下執行?.\scripts\build.bat(我是在 windows 進行編譯的),編譯成功后在?apollo-adminservice、apollo-configservice、apollo-portal下的 target 目錄會生成對應壓縮包?pollo-configservice-1.5.0-SNAPSHOT-github.zip、apollo-adminservice-1.5.0-SNAPSHOT-github.zip、apollo-portal-1.5.0-SNAPSHOT-github.zip,這個幾個文件就是我們在構建 Docker 鏡像需要的

  • Apollo源碼中已經提供了構建 Docker 鏡像的 Dockerfile 文件,apollo-configservice\src\main\docker\Dockfile、apollo-adminservice\src\main\docker\Dockfile、apollo-portal\src\main\docker\Dockfile可以直接使用,最終如下:

  • 分別構建 Docker 鏡像,然后可以通過 docker push 推送到自己的 Docker 倉庫,比如?我的倉庫?,或者在要部署是機器上生成 Docker 鏡像直接使用,最終得到?apollo-configservice、apollo-adminservice、apollo-portal?3個鏡像。

  • 編寫 docker-compose

    apollo-configservice && apollo-adminservice:

    apollo-portal:

    初始數據庫數據修改

    ApolloPortalDB 庫的 ServerConfig 表?apollo.portal.envs?和?configView.memberOnly.envs值修改為:pro;(因為這里我們搭建的是 PRO 的分布式環境)

    ApolloConfigDB 庫的 ServerConfig 表?eureka.service.url?值修改為:http://${實例1的 apollo-configservice 地址}/eureka/,http://${實例2的 apollo-configservice 地址}/eureka/;

    啟動服務

    這里將在同一個機器上啟動 1 個 apollo-portal 實例(端口 8070),2 個 apollo-configservice(端口 8080、8081)和 2 個 apollo-adminservice(端口 8090、8091)。

    注意:啟動的過程會比較慢,一般會在 100~200s 左右

    通過訪問?http://${apollo-portal 服務IP}:8070?,輸入默認用戶名密碼 apollo/admin 登錄:(當前的測試腳本提供一個默認的測試項目,新版本的 sql 腳本可能沒有 SampleApp)

    通過 管理員工具 => 系統信息 可查看當前環境信息:

    可以看出 Config Services 和 Admin Services 都是兩個實例,我們可以模擬 kill 其中一臺,服務依然是可以正常使用的。

    接下來就可以創建應用,添加配置信息,提供給客戶端使用,具體客戶端如何使用后續將會繼續介紹。

    參考鏈接

    • Apollo

    • Apollo 分布式部署指南


    總結

    以上是生活随笔為你收集整理的Apollo 配置中心:分布式部署的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。