Java之Spring Cloud概念介紹(非原創)

文章大綱

1、理解微服務
2、Spring Cloud知識介紹
3、Spring Cloud全家桶
4、參考資料下載
5、參考文章web

1、理解微服務

  咱們經過軟件架構演進過程來理解什麼是微服務,軟件架構的發展經歷了從單體結構、垂直架構、SOA架構到微服務架構的過程。算法

1. 單體架構

1.1 特色
(1)全部的功能集成在一個項目工程中。
(2)全部的功能打一個war包部署到服務器。
(3)應用與數據庫分開部署。
(4)經過部署應用集羣和數據庫集羣來提升系統的性能。spring

1.2 優勢
(1)項目架構簡單,前期開發成本低,週期短,小型項目的首選。數據庫

1.3 缺點
(1)所有功能集成在一個工程中,對於大型項目不易開發、擴展及維護。
(2)系統性能擴展只能經過擴展集羣結點,成本高、有瓶頸。
(3)技術棧受限。安全

2. 垂直架構

2.1 特色
(1)以單體結構規模的項目爲單位進行垂直劃分項目即將一個大項目拆分紅一個一個單體結構項目。
(2)項目與項目之間的存在數據冗餘,耦合性較大,好比上圖中三個項目都存在客戶信息。
(3)項目之間的接口多爲數據同步功能,如:數據庫之間的數據庫,經過網絡接口進行數據庫同步。服務器

2.2 優勢
(1)項目架構簡單,前期開發成本低,週期短,小型項目的首選。
(2)經過垂直拆分,原來的單體項目不至於無限擴大。
(3)不一樣的項目可採用不一樣的技術。網絡

2.3 缺點
(1)所有功能集成在一個工程中,對於大型項目不易開發、擴展及維護。
(2)系統性能擴展只能經過擴展集羣結點,成本高、有瓶頸。架構

3. SOA架構

3.1特色
(1)基於SOA的架構思想將重複公用的功能抽取爲組件,以服務的方式給各各系統提供服務。
(2)各個項目(系統)與服務之間採用webservice、rpc等方式進行通訊。
(3)ESB企業服務總線做爲項目與服務之間通訊的橋樑。app

3.2 優勢
(1)將重複的功能抽取爲服務,提升開發效率,提升系統的可重用性、可維護性。
(2)能夠針對不一樣服務的特色制定集羣及優化方案。
(3)採用ESB減小系統中的接口耦合。負載均衡

3.3 缺點
(1)系統與服務的界限模糊,不利於開發及維護。
(2)雖然使用了ESB,可是服務的接口協議不固定,種類繁多,不利於系統維護。
(3)抽取的服務的粒度過大,系統與服務之間耦合性高。

4. 微服務架構

  爲適應企業的業務發展,提升軟件研發的生產力,下降軟件研發的成本,軟件架構也做了升級和優化,將一個獨立的系統拆分紅若干小的服務,每一個小服務運行在不一樣的進程中,服務與服務之間採用http 輕量協議(好比流行的RESTful)傳輸數據,每一個服務所擁有的功能具備獨立性強、高內聚的特色,這樣的設計就實現了單個服務的高內聚,服務與服務之間的低耦合效果,這一個一個的小服務就是微服務,基於這種方法設計的系統架構即微服務架構。

4.1 特色
(1)將系統服務層徹底獨立出來,並將服務層抽取爲一個一個的微服務。
(2)微服務遵循單一原則。
(3)微服務之間採用RESTful等輕量協議傳輸。

4.2 優勢
(1)服務拆分粒度更細,有利於資源重複利用,提升開發效率。
(2)能夠更加精準的制定每一個服務的優化方案,提升系統可維護性。
(3)微服務架構採用去中心化思想,服務之間採用RESTful等輕量協議通訊,相比ESB更輕量。
(4)適用於互聯網時代,產品迭代週期更短。

4.3 缺點
(1)微服務過多,服務治理成本高,不利於系統維護。
(2)分佈式系統開發的技術成本高(容錯、分佈式事務等),對團隊挑戰大。

5. SOA架構和微服務架構的區別

  首先SOA和微服務架構一個層面的東西,而對於ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。

(1)SOA(Service Oriented Architecture)「面向服務的架構」:他是一種設計方法,其中包含多個服務, 服務之間經過相互依賴最終提供一系列的功能。一個服務 一般以獨立的形式存在與操做系統進程中。各個服務之間 經過網絡調用。

(2)微服務架構:其實和 SOA 架構相似,微服務是在 SOA 上作的昇華,微服務架構強調的一個重點是「業務須要完全的組件化和服務化」,原有的單個業務系統會拆分爲多個能夠獨立開發、設計、運行的小應用。這些小應用之間經過服務完成交互和集成。

微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想

2、Spring Cloud知識介紹

1. 微服務的技術棧

負載均衡,網關路由:高可用、集羣部署,校驗、請求轉發、服務集成。
服務治理:服務註冊、發現。
容錯:避免雪崩。
監控跟蹤:監控資源利用、服務響應、容器資源利用狀況。
消息總線:消息隊列、異步通訊。
配置管理:統一配置管理。

2. Spring Cloud是什麼

  Spring Cloud爲開發人員構建微服務架構提供了完整的解決方案,SpringCloud是若干個框架的集合,它包括spring-cloud-config、spring-cloud-bus等近20個子項目,它提供了服務治理、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分佈式消息隊列、配置管理等領域的解決方案。

3. Spring Cloud技術棧

微服務的興起出現了不少優秀的公司和技術:
服務治理:Dubbo(阿里巴巴)、Dubbox(噹噹)、Eureka(Netflix)等 。
配置管理:Disconf(百度)、QConf(360)、Diamood(淘寶)等 。
服務跟蹤:Hydra(京東)、Zipkin(Twitter)、Sleuth(Spring Cloud)等 。

Spring Cloud 提供一站式的微服務架構解決方案,以下圖:

4. 爲何使用Spring Cloud

  微服務架構的優勢代表它能夠提升咱們的生產力,可是分佈式系統自己的技術成本問題給互聯網那些創業型公司很多的挑戰,阿里、百度等巨頭所提供的微服務技術只是解決其中某個問題,而整合封裝這些優秀的技術恐怕是Spring最擅長的領域了,Spring Cloud也正由於此而誕生。
  使用Spring Cloud來構建微服務架構能夠省去你整合各家技術的成本,Spring Cloud爲咱們構建微服務架構提供了一站式的解決方案,就比如當初Spring誕生是爲解決EJB企業應用開發的衆多問題而提供的一站式輕量級企業應用開發解決方案同樣,隨着使用Spring Cloud公司數量的增長,相信微服務將被Spring Cloud一統江湖。

5. 服務治理

5.1 什麼是服務治理
  微服務架構的缺點中最主要的就是因爲微服務數量衆多致使維護成本巨大,服務治理爲解決此問題而產生的。服務治理的做用是讓維護人員從人工維護中解放出來,由服務自維護,微服務做爲服務提供方主動向服務治理中心註冊,服務的消費方經過服務治理中心查詢須要的服務並進行調用。
以下圖:

5.2 Spring Cloud Eureka
  Spring Cloud Eureka 是對Netflix公司的Eureka的二次封裝,它實現了服務治理的功能,Spring Cloud Eureka提供服務端與客戶端,服務端便是服務註冊中心,客戶端完成服務的註冊與發現。服務端和客戶端均採用Java語言編寫(Eureka支持多語言)。
  以下圖顯示了Eureka Server與Eureka Client的關係:

5.3 架構

5.4 實際項目流程圖

6. 負載均衡

6.1 什麼是負載均衡
  負載均衡是微服務架構中必須使用的技術,經過負載均衡來實現系統的高可用、集羣擴容等功能。負載均衡可經過硬件設備及軟件來實現,硬件好比:F五、Array等 ,軟件好比:LVS、Nginx等 。
以下圖是負載均衡的架構圖:

  用戶請求先到達負載均衡器(也至關於一個服務),負載均衡器根據負載均衡算法將請求轉發到微服務。負載均衡算法有:輪訓、隨機、加權輪訓、加權隨機、地址哈希等方法,負載均衡器維護一份服務列表,根據負載均衡算法將請求轉發到相應的微服務上,因此負載均衡能夠爲微服務集羣分擔請求,下降系統的壓力。

6.2 Spring Cloud Ribbon
  Spring Cloud Ribbon是基於客戶端的負載均衡工具,負載均衡分爲服務端負載均衡和客戶端負載均衡,3.1小節的圖形指的是服務端負載均衡,客戶端負載均衡與服務端負載均衡的區別在於客戶端要維護一份服務列表,Ribbon從Eureka Server獲取服務列表,Ribbon根據負載均衡算法直接請求到具體的微服務,中間省去了負載均衡服務。
  以下圖是Ribbon負載均衡的流程圖:

(1)在消費微服務中使用Ribbon實現負載均衡,Ribbon先從Eureka Server中獲取服務列表。
(2)Ribbon根據負載均衡的算法進行負載均衡,將請求轉發到其它微服務。

6.3 實際項目流程圖

7. 容錯保護

7.1 什麼是容錯保護
  容錯保護是指微服務在執行過程當中出現錯誤並從錯誤中恢復的能力。微服務容錯性很差很容易致使雪崩效應,什麼是雪崩效應?摘自百度百科中的定義:

  微服務的雪崩效應表如今服務與服務之間調用,當其中一個服務沒法提供服務可能致使其它服務也死掉,好比:單點登陸服務調用用戶信息服務查詢用戶信息,因爲用戶信息服務沒法提供服務致使單點登陸服務一直等待,從而致使用戶登陸、用戶退出功能沒法使用,像這樣由一個服務所引發的一連串的多個服務沒法提供服務便是微服務的雪崩效應。

7.2 Spring Cloud Hystrix
  Spring Cloud Hystrix 是基於Netflix的開源框架Hystrix的整合,它實現了斷路器、線程隔離、信號隔離等容錯功能。
  下圖是Hystrix斷路器示意圖:

8. 服務網關

8.1 什麼是服務網關
  服務網關是在微服務前邊設置一道屏障,請求先到服務網關,網關會對請求進行過慮、校驗、路由等處理。有了服務網關能夠提升微服務的安全性,校驗不經過的請求將被拒絕訪問。
  前邊介紹的Ribbon客戶端負載均衡技術能夠不用通過網關,由於一般使用Ribbon完成微服務與微服務之間的內部調用,而對那些對外提供服務的微服務,好比:用戶登陸、提交訂單等,則必須通過網關來保證微服務的安全。

8.2 Spring Cloud Zuul
  Spring Cloud Zuul是整合Netflix公司的Zuul開源項目實現的微服務網關,它實現了請求路由、負載均衡、校驗過慮等 功能。

8.3 實際項目的流程圖

3、Spring Cloud全家桶

1. Spring Cloud Config

配置管理開發工具包,可讓你把配置放到遠程服務器,目前支持本地存儲、Git以及Subversion。

2. Spring Cloud Bus

事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

3. Spring Cloud Netflix

針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

4. Netflix Eureka

雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層服務器的故障轉移。

5. Netflix Hystrix

容錯管理工具,旨在經過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

6. Netflix Zuul

邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。

7. Netflix Archaius

配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操做、輪詢框架、回調機制等功能。

8. Spring Cloud for Cloud Foundry

經過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。

9. Spring Cloud Sleuth

日誌收集工具包,封裝了Dapper,Zipkin和HTrace操做。

10. Spring Cloud Data Flow

大數據操做工具,經過命令行方式操做數據流。

11. Spring Cloud Security

安全工具包,爲你的應用程序添加安全控制,主要是指OAuth2。

12. Spring Cloud Consul

封裝了Consul操做,consul是一個服務發現與配置工具,與Docker容器能夠無縫集成。

13. Spring Cloud Zookeeper

操做Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。

14. Spring Cloud Stream

數據流操做開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。

15. Spring Cloud CLI

基於 Spring Boot CLI,可讓你以命令行方式快速創建雲組件。

4、參考資料下載

參考資料中包含了簡單代碼學習,有興趣朋友能夠下載:
連接:https://pan.baidu.com/s/1i1hrwqfUetwsY-AJT4RFPg
提取碼:1mmc

5、參考文章

http://yun.itheima.com/course?hm

相關文章
相關標籤/搜索