天天看點

Spring Cloud與Docker微服務架構實戰

Spring Cloud與Docker微服務架構實戰

周立 中生代技術

作者簡介

周立

Spring Cloud中國社群聯合發起人之一,近7年的軟體系統開發經驗,多年系統架構經驗;參與開發多個大型項目,有電信某電信網管項目、某O2O電商平台、某征信系統等;對Spring Cloud、微服務、持續內建、持續傳遞有一定見地。

熱愛技術交流,曾代表公司參加全球微服務架構高峰論壇、QCon等技術沙龍。擁抱開源,多個項目開源在Github與Git@OSC上,并獲得開源中國的推薦,例如電子書《使用Spring Cloud與Docker實戰微服務》等。

目前,筆者的研究重心是使用Spring Cloud、Docker、微服務,著有《Spring Cloud與Docker微服務架構實戰》,已在京東上架。

筆者部落格:http://itmuch.com,定期分享Spring Cloud相關部落格。

一、為什麼要統一管理微服務配置

對于傳統的單體應用,我們常使用配置檔案管理所有配置。例如一個Spring Boot開發的單體應用,我們可将配置内容放在application.yml檔案中。如果需要切換環境,我們可設定多個Profile,并在啟動應用時指定spring.profiles.active={profile}。在本書《Eureka Server的高可用》一節,我們使用的也是這種方式。當然,我們也可借助Maven的Profile實作環境切換。

然而,在微服務架構中,微服務的配置管理一般有以下需求:

(1) 集中管理配置。一個使用微服務架構的應用系統可能會包含成百上千個微服務,是以集中管理配置是非常有必要的;

(2) 不同環境,不同配置。例如,資料源配置在不同的環境(開發、測試、預釋出、生産等)中是不同的;

(3) 運作期間可動态調整。例如,我們可根據各個微服務的負載情況,動态調整資料源連接配接池大小或熔斷門檻值,并且在調整配置時不停止微服務;

(4) 配置修改後可自動更新。如配置内容發生變化,微服務能夠自動更新配置。

綜上所述,對于微服務架構而言,一個通用的配置管理機制是必不可少的,常見做法是使用配置伺服器幫助我們管理配置。

二、Spring Cloud Config簡介

Spring Cloud Config為分布式系統外部化配置提供了伺服器端和用戶端的支援,它包括Config Server和Config Client兩部分。由于Config Server和Config Client都實作了對Spring Environment和PropertySource抽象的映射,是以,Spring Cloud Config非常适合Spring應用程式,當然也可與任何其他語言編寫的應用程式配合使用。

Config Server是一個可橫向擴充、集中式的配置伺服器,它用于集中管理應用程式各個環境下的配置,預設使用Git存儲配置内容(也可使用Subversion、本地檔案系統或Vault存儲配置,限于篇幅,本書不作讨論),是以可以很友善地實作對配置的版本控制與内容審計。

Config Client是Config Server的用戶端,用于操作存儲在Config Server中的配置屬性。

Spring Cloud與Docker微服務架構實戰

圖9-1 Spring Cloud Config架構圖

如圖9-1,所有的微服務都指向Config Server。各個微服務在啟動時,會請求Config Server以擷取所需要的配置屬性,然後緩存這些屬性以提高性能。

三、編寫Config Server

四、編寫Config Client