基於Spring Cloud的微服務構建學習-1 基礎知識 什麼是微服務架構 微服務是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信協議。 每個微服務都維護者自身的數據存儲、業 ...
基於Spring Cloud的微服務構建學習-1 基礎知識
什麼是微服務架構
微服務是系統架構上的一種設計風格,它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RESTful API進行通信協議。
每個微服務都維護者自身的數據存儲、業務開發、自動化測試案例以及獨立部署機制。由於有了輕量級的通信協議,所以這些微服務可以使用不同的語言來編寫。
為什麼需要微服務
在業務發展初期,由於所有的業務邏輯在一個應用中,開發、測試、部署都還比較容易且方便。但是,隨著企業發展,系統為了應對不同的業務需求會不斷為該單體項目增加不同的業務模塊(前端展現模塊以及提供支持的各種藉口模塊。。。),隨著業務需求的增長,單體應用變得越來越臃腫。往往修改一個小功能,都有可能影響到其他功能的運行。最終增加了維護成本,且難以控制(性能容量評估)。
使用微服務會帶來什麼問題
微服務雖然帶來了很多吸引人的優點,但是也因為服務的拆分引發了很多原本在單體應用中沒有的問題:
- 運維的新挑戰:在微服務架構中,運維人員需要維護的進程數量將會大大增加。如何有效編排運維過程是一個重要的問題(自動化)。
- 介面的一致性:雖然拆分了服務,但業務邏輯上的依賴並不會消除,只是從單體應用的代碼依賴變為通信依賴。因此我們需要更完善的介面和版本管理,或是嚴格遵循開閉原則
- 分散式的複雜性:由於拆分後的各個微服務都是獨立部署並運行在各自的進程內,它們只能通過通信來進行協作,所以分散式環境的問題都將是微服務架構系統設計時要考慮的重要因素,比如網路延遲、分散式事務、非同步消息等。
微服務的九大特性
- 服務組件化:組件,是一個可以獨立更換和升級的單元。就像PC中的CPU、記憶體、顯卡、硬碟一樣,獨立且可以更換升級而不影響其他單元。
可插拔
- 按業務組織團隊:面對大型項目的時候,對於微服務團隊的拆分更加建議按業務線的方式進行拆分,一方面可以有效減少服務內部修改所產生的內耗;另一方面,團隊邊界可以變得更加清晰。
- 做“產品”的態度:在實施微服務架構的團隊中,每個小團隊都應該以做產品的方式,對其產品的整個生命周期負責。有助於增加開發者對具體業務的理解,發現更多的問題。
- 智能端點與啞管道:在微服務架構中,通常會使用①RESTful API或輕量級的消息發送協議,實現信息傳遞與服務調用的觸發②在輕量級消息匯流排上傳遞消息,類似RabbitMQ等一些提供可靠非同步交換的中間件。
- 去中心化治理:在集中化的架構治理方案中,通常在技術平臺上都會制定統一的標準,但是也許該技術在某一個問題上處理效果並不好,不得不花費大力氣去解決,由於底層原因,最終成為系統的瓶頸,而微服務就不存在這樣的問題,微服務採用輕量級的契約定義介面,使得我們對於服務 本身的具體技術平臺不再那麼敏感。降低了對開發人員的技術水平要求。
- 去中心化管理數據:每個微服務都有自己的資料庫。分散式事務本身的實現難度非常大,所以在微服務架構中,儘量做到服務之間“無事務”的調用,而對於數據一致性,達到最終一致性即可。
- 基礎設施自動化:雖然應用程式個頭變小了,但數量增多了,增加了運維難度。所以在構建微服務架構中,務必從一開始就構建起“持續交付”平臺來支撐整個實施過程。該平臺需要兩大內容:自動化測試和自動化部署
- 容錯設計:在單體應用中,一般不存在單個組件故障而其他部件還在運行的情況,一般是一掛全掛,而在微服務中則存在這種情況,這也是微服務的好處(實現這種好處就需要有良好的容錯設計)。在微服務架構中,快速檢測出故障源並儘可能地自動恢復服務是必須被設計和考慮的。通常,我們都希望在每個服務中實現監控和日誌記錄的組件,比如服務狀態、斷路器狀態、吞吐量、網路延遲等關鍵數據的儀錶盤等。
- 演進式設計:
1.以單體系統的方式設計和實施(系統初期體量不大,構建維護成本不高)
2.將經常變化的業務進行微服務處理
3.穩定的業務模塊變成一個核心微服務
為什麼選擇Spring Cloud
微服務架構屬於分散式架構,分散式架構中遇到的問題在微服務的架構中也會面對。
現在已經有了很多解決分散式系統難題的現成的開源框架,針對同一個問題,解決方案也是多種多樣的,但是他們的側重點不同,所以還需要根據具體項目作出選擇。
對於剛接觸微服務的人來說,如何選擇框架也是一個艱難的問題。
Spring Cloud集成了很多主流的分散式框架,提供了綜合的解決方案,省去了很多框架學習時間以及開發時間(約定由於配置、自動化配置)。
參考文獻:
Spring Cloud微服務實戰
轉載註明出處:http://www.cnblogs.com/xiemubg/p/7275435.html