文章大綱 1、理解微服務 2、Spring Cloud知識介紹 3、參考資料下載 4、參考文章web
1、理解微服務 咱們經過軟件架構演進過程來理解什麼是微服務,軟件架構的發展經歷了從單體結構、垂直架構、SOA架構到微服務架構的過程。算法
1.1 特色 (1)全部的功能集成在一個項目工程中。 (2)全部的功能打一個war包部署到服務器。 (3)應用與數據庫分開部署。 (4)經過部署應用集羣和數據庫集羣來提升系統的性能。spring
1.2 優勢 (1)項目架構簡單,前期開發成本低,週期短,小型項目的首選。數據庫
1.3 缺點 (1)所有功能集成在一個工程中,對於大型項目不易開發、擴展及維護。 (2)系統性能擴展只能經過擴展集羣結點,成本高、有瓶頸。 (3)技術棧受限。安全
2.1 特色 (1)以單體結構規模的項目爲單位進行垂直劃分項目即將一個大項目拆分紅一個一個單體結構項目。 (2)項目與項目之間的存在數據冗餘,耦合性較大,好比上圖中三個項目都存在客戶信息。 (3)項目之間的接口多爲數據同步功能,如:數據庫之間的數據庫,經過網絡接口進行數據庫同步。服務器
2.2 優勢 (1)項目架構簡單,前期開發成本低,週期短,小型項目的首選。 (2)經過垂直拆分,原來的單體項目不至於無限擴大。 (3)不一樣的項目可採用不一樣的技術。網絡
2.3 缺點 (1)所有功能集成在一個工程中,對於大型項目不易開發、擴展及維護。 (2)系統性能擴展只能經過擴展集羣結點,成本高、有瓶頸。架構
3.1特色 (1)基於SOA的架構思想將重複公用的功能抽取爲組件,以服務的方式給各各系統提供服務。 (2)各個項目(系統)與服務之間採用webservice、rpc等方式進行通訊。 (3)ESB企業服務總線做爲項目與服務之間通訊的橋樑。負載均衡
3.2 優勢 (1)將重複的功能抽取爲服務,提升開發效率,提升系統的可重用性、可維護性。 (2)能夠針對不一樣服務的特色制定集羣及優化方案。 (3)採用ESB減小系統中的接口耦合。框架
3.3 缺點 (1)系統與服務的界限模糊,不利於開發及維護。 (2)雖然使用了ESB,可是服務的接口協議不固定,種類繁多,不利於系統維護。 (3)抽取的服務的粒度過大,系統與服務之間耦合性高。
爲適應企業的業務發展,提升軟件研發的生產力,下降軟件研發的成本,軟件架構也做了升級和優化,將一個獨立的系統拆分紅若干小的服務,每一個小服務運行在不一樣的進程中,服務與服務之間採用http 輕量協議(好比流行的RESTful)傳輸數據,每一個服務所擁有的功能具備獨立性強、高內聚的特色,這樣的設計就實現了單個服務的高內聚,服務與服務之間的低耦合效果,這一個一個的小服務就是微服務,基於這種方法設計的系統架構即微服務架構。
4.1 特色 (1)將系統服務層徹底獨立出來,並將服務層抽取爲一個一個的微服務。 (2)微服務遵循單一原則。 (3)微服務之間採用RESTful等輕量協議傳輸。
4.2 優勢 (1)服務拆分粒度更細,有利於資源重複利用,提升開發效率。 (2)能夠更加精準的制定每一個服務的優化方案,提升系統可維護性。 (3)微服務架構採用去中心化思想,服務之間採用RESTful等輕量協議通訊,相比ESB更輕量。 (4)適用於互聯網時代,產品迭代週期更短。
4.3 缺點 (1)微服務過多,服務治理成本高,不利於系統維護。 (2)分佈式系統開發的技術成本高(容錯、分佈式事務等),對團隊挑戰大。
首先SOA和微服務架構一個層面的東西,而對於ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。
(1)SOA(Service Oriented Architecture)「面向服務的架構」:他是一種設計方法,其中包含多個服務, 服務之間經過相互依賴最終提供一系列的功能。一個服務 一般以獨立的形式存在與操做系統進程中。各個服務之間 經過網絡調用。
(2)微服務架構:其實和 SOA 架構相似,微服務是在 SOA 上作的昇華,微服務架構強調的一個重點是「業務須要完全的組件化和服務化」,原有的單個業務系統會拆分爲多個能夠獨立開發、設計、運行的小應用。這些小應用之間經過服務完成交互和集成。
微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想
2、Spring Cloud知識介紹
負載均衡,網關路由:高可用、集羣部署,校驗、請求轉發、服務集成。 服務治理:服務註冊、發現。 容錯:避免雪崩。 監控跟蹤:監控資源利用、服務響應、容器資源利用狀況。 消息總線:消息隊列、異步通訊。 配置管理:統一配置管理。
Spring Cloud爲開發人員構建微服務架構提供了完整的解決方案,SpringCloud是若干個框架的集合,它包括spring-cloud-config、spring-cloud-bus等近20個子項目,它提供了服務治理、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分佈式消息隊列、配置管理等領域的解決方案。
微服務的興起出現了不少優秀的公司和技術: 服務治理:Dubbo(阿里巴巴)、Dubbox(噹噹)、Eureka(Netflix)等 。 配置管理:Disconf(百度)、QConf(360)、Diamood(淘寶)等 。 服務跟蹤:Hydra(京東)、Zipkin(Twitter)、Sleuth(Spring Cloud)等 。
Spring Cloud 提供一站式的微服務架構解決方案,以下圖:
微服務架構的優勢代表它能夠提升咱們的生產力,可是分佈式系統自己的技術成本問題給互聯網那些創業型公司很多的挑戰,阿里、百度等巨頭所提供的微服務技術只是解決其中某個問題,而整合封裝這些優秀的技術恐怕是Spring最擅長的領域了,Spring Cloud也正由於此而誕生。 使用Spring Cloud來構建微服務架構能夠省去你整合各家技術的成本,Spring Cloud爲咱們構建微服務架構提供了一站式的解決方案,就比如當初Spring誕生是爲解決EJB企業應用開發的衆多問題而提供的一站式輕量級企業應用開發解決方案同樣,隨着使用Spring Cloud公司數量的增長,相信微服務將被Spring Cloud一統江湖。
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.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.1 什麼是容錯保護 容錯保護是指微服務在執行過程當中出現錯誤並從錯誤中恢復的能力。微服務容錯性很差很容易致使雪崩效應,什麼是雪崩效應?摘自百度百科中的定義:
微服務的雪崩效應表如今服務與服務之間調用,當其中一個服務沒法提供服務可能致使其它服務也死掉,好比:單點登陸服務調用用戶信息服務查詢用戶信息,因爲用戶信息服務沒法提供服務致使單點登陸服務一直等待,從而致使用戶登陸、用戶退出功能沒法使用,像這樣由一個服務所引發的一連串的多個服務沒法提供服務便是微服務的雪崩效應。
7.2 Spring Cloud Hystrix Spring Cloud Hystrix 是基於Netflix的開源框架Hystrix的整合,它實現了斷路器、線程隔離、信號隔離等容錯功能。 下圖是Hystrix斷路器示意圖:
8.1 什麼是服務網關 服務網關是在微服務前邊設置一道屏障,請求先到服務網關,網關會對請求進行過慮、校驗、路由等處理。有了服務網關能夠提升微服務的安全性,校驗不經過的請求將被拒絕訪問。 前邊介紹的Ribbon客戶端負載均衡技術能夠不用通過網關,由於一般使用Ribbon完成微服務與微服務之間的內部調用,而對那些對外提供服務的微服務,好比:用戶登陸、提交訂單等,則必須通過網關來保證微服務的安全。
8.2 Spring Cloud Zuul Spring Cloud Zuul是整合Netflix公司的Zuul開源項目實現的微服務網關,它實現了請求路由、負載均衡、校驗過慮等 功能。
8.3 實際項目的流程圖