瘋狂Spring Cloud連載(1)Spring Cloud概述

楊大仙的程式空間發表於2017-10-31

 本文節選自《瘋狂Spring Cloud微服務架構實戰》

京東購買地址:https://item.jd.com/12256011.html

噹噹網購買地址:http://product.dangdang.com/25201393.html

Spring Cloud教學視訊http://blog.csdn.net/boxiong86/article/details/78399104

Spring Cloud概述

本章要點

    傳統應用的問題

    微服務與Spring Cloud

    本書介紹

本章將會簡述Spring Cloud的功能,描述什麼是Spring Cloud,它能為我們帶來什麼,為後面學習該框架的知識打下理論的基礎。

傳統的應用

單體應用

在此之前,筆者所在公司開發Java程式,大都使用StrutsSpringHibernateMyBatis)等技術框架,一個專案會釋出一個單體應用。例如開發一個進銷存系統,將會開發一個war包部署到Tomcat中,每一次需要開發新的模組或新增新功能時,都會在原來的基礎上不斷的新增。若干年後,這個war包不斷的膨脹,程式設計師在進行除錯時,伺服器也可能需要啟動半天,維護這個系統的效率極為低下。這樣一個war包,涵蓋了庫存、銷售、會員、報表等模組,如圖1-1


1-1單體應用

這樣的單體應用隱患非常多,任何的一個bug,都有可能導致整個系統當機筆者印象最深刻的是,曾經有一客戶在高峰期,匯出一張銷售明細報表(資料量較大)最終造成整個系統癱瘓,前臺的銷售人員無法售賣維護這樣一個系統,不僅效率極低,而且充滿風險,專案組的各個成員惶惶不可終日,我們需要本質上的改變。

架構演進

針對以上的單體應用的問題,我們參考SOA架構,將各個模組劃分獨立的服務模組(war,並且使用了資料庫的讀寫分離,架構如圖1-2


1-2架構演進

各個模組之間會存在相互呼叫的依賴關係,例如銷售模組會呼叫會員模組的介面,為了減少各個模組之間的耦合,我們加入了企業服務匯流排(ESB),各模組與ESB之間的架構如圖1-3所示。


1-3 ESB

ESB後,各個模組將服務釋出到ESB中,它們與ESB之間使用SOAP協議進行通訊1-2與圖1-3的架構實現後,整個系統的效能有了明顯的提升,各個模組的耦合度也降低了。執行了一段日子後,又出現了新的問題,由於銷售終端數量的增多,銷售模組明顯超過其承受能力,為了保證銷售前端的正常執行,我們使用了Nginx做負載均衡,請見圖1-4


1-4使用Nginx

隨著銷售模組的增多,帶了許多問題,例如管理這些模組,對於運維工程師來說,是一項艱鉅的任務,一旦銷售模組有所修改,他們將通宵達旦進行升級。另外,企業服務匯流排也有可能成為效能的瓶頸,雖然目前仍未出現問題,但我們需要未雨綢繆

架構要求

從前面的架構演進可知,應用中的每一個點,都有可能成為系統的問題點。隨著網際網路應用的普及,在大資料、高併發的環境下,我們的系統架構需要面對更為嚴苛的挑戰,我們需要一套新的架構,它起碼能滿足以下要求:

     高效能:這是應用程式的基本要求。

     獨立:其中一個模組出現bug或者其他問題,不可影響其他模組或者整個應用。

     容易擴充套件:應用中的每一個節點,都可以根據實際需要進行擴充套件。

     便於管理對於各個模組的資源,可以輕鬆進行管理、升級,減少維護成本。

     狀態監控與警報對整個應用程式進行監控,當某一個節點出現問題時,能及時發出警報。

為了能解決遇到的問題達到以上的架構要求,我們開研究Spring Cloud

微服務與Spring Cloud

什麼是微服務

微服務一詞來源Martin Fowler的“Microservices”一文,微服務是一種架構風格,將單體應用劃分為小型服務單元,微服務之間使用HTTPAPI進行資源訪問與操作。

在對單體應用的劃分上,微服務與前面的SOA架構有點類似但是SOA架構側重於將每個單體應用的服務整合ESB,而微服務做得更加徹底,強調將整個模組變成服務元件,微服務對模組的劃分粒度可能會更細。以我們前面的銷售、會員模組為例,在SOA架構中,需要將相應的服務釋出到ESB容器就可以了,而在微服務架構中,這兩個模組本身,會變為一個或多個的服務元件SOA架構與微服務架構,請見圖1-5與圖1-6


1-5 SOA架構


1-6微服務架構

在微服務的架構上,Martin Fowler的文章肯定了Netflix的貢獻,接下來,我們瞭解一下Netflix OSS

關於Netflix OSS

Netflix是一個網際網路影片提供商,在幾年前,Netflix公司成立了自己的開源中心,名稱為Netflix Open Source Software Center,簡稱Netflix OSS。這個開源組織專注於大資料、雲端計算方面的技術,提供了多個開源框架,這些框架包括大資料工具、構建工具、基於雲平臺的服務工具等。Netflix所提供的這些框架,很好的遵循微服務所推崇的理念,實現了去中心化的服務管理、服務容錯等機制

Spring CloudNetflix

Spring Cloud並不是一個具體的框架,大家可以把它理解為一個工具箱,它提供的各類工具,可以幫助我們快速的構建分散式系統。

Spring Cloud的各個專案基於Spring Boot,將Netflix的多個框架進行封裝,並且通過自動配置的方式將這些框架繫結到Spring的環境中,從而簡化了這些框架的使用。由於Spring Boot的簡便,使得我們在使用Spring Cloud時,很容易的將Netflix各個框架整合進我們的專案中。Spring Cloud下的“Spring Cloud Netflix”模組,主要封裝了Netflix的以下專案:

     Eureka:基於REST服務的分散式中介軟體,主要用於服務管理。

     Hystrix容錯框架,通過新增延遲閥值以及容錯的邏輯,來幫助我們控制分散式系統間元件的互動

     Feign一個REST客戶端,目的是為了簡化Web Service客戶端的開發

     Ribbon負載均衡框架,在微服務叢集中為各個客戶端的通訊提供支援,它主要實現中間層應用程式的負載均衡

     Zuul為微服務叢集提供過代理、過濾、路由等功能。

Spring Cloud的主要模組

除了Spring Cloud Netflix模組外,Spring Cloud還包括以下幾個重要的模組:

     Spring Cloud Config為分散式系統提供了配置伺服器和配置客戶端,通過對它們的配置,可以很好的管理叢集中的配置檔案。

     Spring Cloud Sleuth服務跟蹤框架,可以與ZipkinApache HTraceELK等資料分析、服務跟蹤系統進行整合,為服務跟蹤、解決問題提供了便利。

     Spring Cloud Stream用於構建訊息驅動微服務的框架,該框架在Spring Boot的基礎上整合Spring Integration來連線訊息代理中介軟體

     Spring Cloud Bus連線RabbitMQKafka訊息代理的叢集訊息匯流排。

關於本書

下載本書的軟體及原始碼

讀者可以到以下的地址下載本書的軟體以及原始碼:http://pan.baidu.com/s/1nvbZSeP,該地址下有一個“Spring Cloud”目錄,下面有一個codes.zip的壓縮包,下載解壓後即可拿到codes目錄。本書所的軟體,基本上都可以在soft目錄下找到。

如果讀者無法從以上的渠道獲取本書的軟體及原始碼,歡迎發郵件與筆者聯絡,郵箱地址:yangenxiong@163.com,也可以直接訪問筆者部落格直接交流:https://my.oschina.net/JavaLaw/blog

匯入本書的案例

Eclipse中,選擇匯入已存在的Maven專案,再選擇codes的具體目錄即可。由於每個案例都會包含多個Maven專案,因此建議以小節為單位匯入,匯入介面請見圖1-7


1-7匯入本章案例

在匯入案例前,請先按照第2章,把開發環境搭建好。

本章小結

本章1.1小節,對傳統的單體應用、SOA架構做了一個簡單的總結,在此過程中分析我們所遇到的問題。在1.2小節,簡單介紹了微服務與Spring Cloud。接下來,我們正式開始講述本書的知識點。

 本文節選自《瘋狂Spring Cloud微服務架構實戰》

Spring Cloud教學視訊http://blog.csdn.net/boxiong86/article/details/78399104

本書程式碼共享地址:https://gitee.com/yangenxiong/SpringCloud

相關文章