閱讀935 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Spring Cloud係列(1)Spring Cloud概述

本站小福利 點我獲取阿裏雲優惠券

原文作者:楊大仙的程序空間

1 Spring Cloud概述

        本文要點

             傳統應用的問題

             微服務與Spring Cloud

             本書介紹

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

1.1 傳統的應用

1.1.1 單體應用

        在此之前,筆者所在公司開發Java程序,大都使用Struts、Spring、Hibernate(MyBatis)等技術框架,每一個項目都會發布一個單體應用。例如開發一個進銷存係統,將會開發一個war包部署到Tomcat中,每一次需要開發新的模塊或添加新功能時,都會在原來的基礎上不斷的添加。若幹年後,這個war包不斷的膨脹,程序員在進行調試時,服務器也可能需要啟動半天,維護這個係統的效率極為低下。這樣一個war包,涵蓋了庫存、銷售、會員、報表等模塊,如圖1-1。

圖1-1 單體應用

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

1.1.2 架構演進

        針對以上的單體應用的問題,我們參考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

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

1.1.3 架構要求

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

              高性能:這是應用程序的基本要求。

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

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

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

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

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

1.2 微服務與Spring Cloud

1.2.1 什麼是微服務

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

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

圖1-5 SOA架構

圖1-6 微服務架構

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

1.2.2 關於Netflix OSS

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

1.2.3 Spring Cloud與Netflix

        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:為微服務集群提供過代理、過濾、路由等功能。

1.2.4 Spring Cloud的主要模塊

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

              Spring Cloud Config:為分布式係統提供了配置服務器和配置客戶端,通過對它們的配置,可以很好的管理集群中的配置文件。

              Spring Cloud Sleuth:服務跟蹤框架,可以與Zipkin、Apache HTrace和ELK等數據分析、服務跟蹤係統進行整合,為服務跟蹤、解決問題提供了便利。

              Spring Cloud Stream:用於構建消息驅動微服務的框架,該框架在Spring Boot的基礎上,整合了“Spring Integration”來連接消息代理中間件。

              Spring Cloud Bus:連接RabbitMQ、Kafka等消息代理的集群消息總線。

1.3 本章小結

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

我的官網
我的博客

我的官網https://guan2ye.com

我的CSDN地址https://blog.csdn.net/chenjianandiyi

我的簡書地址https://www.jianshu.com/u/9b5d1921ce34

我的githubhttps://github.com/javanan

我的碼雲地址https://gitee.com/jamen/

阿裏雲優惠券https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=vf2b5zld&utm_source=vf2b5zld

最後更新:2017-11-03 09:33:45

  上一篇:go  Spring Cloud連載(2)搭建開發環境
  下一篇:go  不可不知的SQL Server還原過程