1. 程式人生 > >微服務之SpringCloud架構第六篇(上)——配置中心(Apollo)

微服務之SpringCloud架構第六篇(上)——配置中心(Apollo)

隨著程式功能的日益複雜,程式的配置日益增多:各種功能的開關、引數的配置、伺服器的地址……

並且對配置的期望也越來越高,配置修改後實時生效,灰度釋出,分環境、分叢集管理配置,完善的許可權、稽核機制……

並且隨著採用分散式的開發模式,專案之間的相互引用隨著服務的不斷增多,相互之間的呼叫複雜度成指數升高,每次投產或者上線新的專案時苦不堪言,因此需要引用配置中心治理。

開源配置中心

  1. spring-cloud/spring-cloud-config
    spring出品,可以和spring cloud無縫配合

  2. 淘寶 diamond
    已經不維護

  3. disconf
    java開發,螞蟻金服技術專家發起,業界使用廣泛

  4. ctrip apollo
    Apollo(阿波羅)是攜程框架部門研發的開源配置管理中心,具備規範的許可權、流程治理等特性。

配置中心對別

功能特性

我們先從功能層面來對別

功能點 優先順序 spring-cloud-config ctrip apollo disconf 備註
靜態配置管理 基於file 支援 支援
動態配置管理 支援 支援 支援
統一管理 無,需要github 支援 支援
多環境 無,需要github 支援 支援
本地配置快取 支援 支援
配置鎖 支援 不支援 不支援 不允許動態及遠端更新
配置校驗 如:ip地址校驗,配置
配置生效時間 重啟生效,或手動refresh生效 實時 實時 需要結合熱載入管理, springcloudconfig需要 git webhook+rabbitmq 實時生效
配置更新推送 需要手工觸發 支援 支援
配置定時拉取 支援 配置更新目前依賴事件驅動, client重啟或者server端推送操作
使用者許可權管理 無,需要github 支援 支援 現階段可以人工處理
授權、稽核、審計 無,需要github 支援 現階段可以人工處理
配置版本管理 Git做版本管理 介面上直接提供釋出歷史和回滾按鈕 操作記錄有落資料庫,但無查詢介面
配置合規檢測 不支援 支援(但還需完善)
例項配置監控 需要結合springadmin 支援 支援,可以檢視每個配置在哪些機器上載入
灰度釋出 不支援 支援 不支援部分更新 現階段可以人工處理
告警通知 不支援 支援,郵件方式告警 支援,郵件方式告警
依賴關係 不支援 不支援 不支援 配置與系統版本的依賴系統執行時的依賴關係

技術路線相容性

引入配置中心,需要考慮和現有專案的相容性,以及是否引入額外的第三方元件。我們的java專案以SpringBoot為主,需要重點關注springboot支援性。

功能點 優先順序 spring-cloud-config ctrip apollo disconf 備註
SpringBoot支援 原生支援 支援 與spring boot無相關
SpringCloud支援 原生支援 支援 與spring cloud無相關
客戶端支援 Java Java、.Net java
業務系統侵入性 侵入性弱 侵入性弱 侵入性弱,支援註解及xml方式
依賴元件 Eureka Eureka zookeeper

可用性與易用性

引入配置中心後,所有的應用都需要依賴配置中心,因此可用性需要重點關注,另外管理的易用性也需要關注。

功能點 優先順序 spring-cloud-config ctrip apollo disconf 備註
單點故障(SPOF) 支援HA部署 支援HA部署 支援HA部署,高可用由zookeeper保證
多資料中心部署 支援 支援 支援
配置獲取效能 unkown unkown(官方說比spring快)
配置介面 無,需要通過git操作 統一介面(ng編寫) 統一介面

最終選擇

  • 支援不同環境(開發、測試、生產)、不同叢集
  • 完善的管理系統,許可權管理、釋出稽核、操作審計
  • SpringBoot整合友好 ,較小的遷移成本
  • 配置修改實時生效(熱釋出)
  • 版本釋出管理

綜上,ctrip applo是較好的選擇方案,最終選擇applo。

1、Apollo簡介

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

服務端基於Spring Boot和Spring Cloud開發,打包後可以直接執行,不需要額外安裝Tomcat等應用容器。

Java客戶端不依賴任何框架,能夠運行於所有Java執行時環境,同時對Spring/Spring Boot環境也有較好的支援。

2、Apollo編譯適配自己的註冊中心

Apollo專案中內建了Eureka註冊中心,如果我們想使用自己外部獨立的註冊中心,就要把Apollo專案中的Eureka剝離。

2、匯入資料庫檔案,資料庫檔案在原始碼srcripts/sql下,兩個SQL檔案,apolloconfigdb.sqlapolloportaldb.sql。MySQL版本需要在5.7以上。

3、修改原始碼。

(1)、apollo-configservice工程修改

     1.ConfigServiceApplication類的@EnableEurekaServer註解改成@EnableEurekaClient

     2.bootstrap.yml中的eureka.client.serviceUrl.defaultZone配置為獨立的Eureka Server的地址

(2)、apollo-adminservice工程修改

     1.bootstrap.yml中的eureka.client.serviceUrl.defaultZone配置為獨立的Eureka Server的地址

(3)、eureka-server工程修改

     1.把apollo-configservice工程中com.ctrip.framework.apollo.metaservice下的相關類移到

      eureka-server工程下面,並解決相關的編譯問題。

      2.pom.xml引入apollo-core依賴,如:

<dependency>

    <groupId>com.ctrip.framework.apollo</groupId>

    <artifactId>apollo-core</artifactId>

    <version>RELEASE/version>

</dependency>

      3.application.yml中的eureka.client.fetchRegistry要設為true

      4.將apollo-portal模組下的apollo-env.propertiesdev.meta或其他環境地址修改為configservice對應地址

local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://localhost:8080
uat.meta=http://localhost:8080
lpt.meta=http://localhost:8080
pro.meta=http://localhost:8080
dev.meta=hhttp://localhost:8080

     5.打包 
     執行專案根目錄scripts下 build.bat 或build.sh,執行maven打包命令,打好的jar包在相應模組target目錄下。 

     6.修改資料庫

  將apolloconfigdb serverconfig表的eureka.service.urlvalue值改為自己的eureka服務地址,如http://localhost:8761/eureka/
     將apolloportaldb serverconifg表的apollo.portal.envsvalue指改為第三步的對應的地址,如:dev,如果有多個環境用逗號分隔。

     7.執行

     分別將Apollo-configservice、Apollo-adminservice、Apollo-Portal模組下target中的zip包拷貝出來,解壓後,修改裡面配置檔案的資訊application-github.properties、apollo-env.properties,包括資料庫連線資訊、環境資訊。如:

# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://localhost:8080
uat.meta=http://localhost:8080
lpt.meta=http://localhost:8080
pro.meta=http://localhost:8080

然後依次在configservice、adminservice、portal下的scripts目錄中執行startup.sh。啟動無誤後,檢視註冊中心eureka:

說明已經註冊到我們自己的eureka中。

再次訪問配置中心Apollohttp://localhost:8070/,輸入使用者名稱密碼apollo/admin,進入potrtal管理頁面:

至此,配置中心服務端改造以及搭建基本完成,下一篇介紹配置中心客戶端的使用,包括配置獲取、配置同步、更新、以及配置管理等。