北京道達天際科技有限公司 北京 100089
在互聯網初期,業務比較單一,一個小型的應用服務就可滿足用戶需求,典型代表就是一個應用、一個數據庫、一個Web容器,彈體架構的應用服務就可以正常運行[1]。
在單體架構發展一段時間之后,系統為了應對更大的數據量,就會進行不同的層級劃分,每個層級有對應的職責,UI 層負責和用戶進行交互、業務邏輯層負責具體的業務功能、數據庫層負責和上層進行數據交換和存儲。
隨著系統的進一步擴大,系統之間的調用關系呈指數上升,服務的SOA化應運而生,SOA代表面向服務的架構,將應用程序按照不同的職責劃分為不同的模塊,不同的模塊直接通過特定的協議和接口進行交互。
隨著不斷地對系統進行優化,服務個體的獨立性越來越強,業務拆分的粒度越來越細,業務系統需要徹底進行組件化和服務化,此時就需要一種更適合的架構來支撐整個系統的運行,微服務架構由之而來,其實微服務架構是SOA架構思想的一種擴展[2]。
目前,國內使用 Spring Cloud 技術的公司并不多見,不是因為 Spring Cloud 不好,主要原因有以下幾點:
(1)Spring Cloud 中文文檔較少,對于在使用過程中出現的問題,沒有太多的解決方案獲取路徑。
(2)國內的互聯網公司以及互聯網技術日新月異,針對很多系統而言,國內的很多互聯網公司發布的開源架構也可滿足需求,且相關文檔較為豐富,出現問題時的解決方案較多。
(3)大型公司基本都有自己的分布式解決方案,而中小型公司的系統體量以及業務場景不需要微服務即可滿足,所以這些中小型公司就沒有采用Spring Cloud的必要性。
Spring cloud基于Spring Boot提供了一套微服解決方案,為開發人員提供了快速構建分布式系統的工具,并利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,可做到一鍵啟動和部署。具體優點如下:
(1)提供良好的開箱即用經驗的典型用例和可擴展性機制覆蓋。
(2)服務拆分粒度更細,對于資源的重復利用以及開發的效率有很大提升。
(3)可以更精準的制定優化服務方案,系統的可維護性較高[3]。
(4)微服務架構采用去中心化思想,服務之間采用Restful等輕量級通訊,比ESB更輕量。
(5)適于互聯網時代,產品迭代周期更短。
但是Spring Cloud除了以上優勢外,還有許多劣勢,詳細如下:
(1)微服務過多,治理成本高,系統維護的成本較高。
(2)分布式系統開發的成本高對研發團隊的壓力大。
Spring Cloud包含了許多子項目,這些子項目中的眾多的組件幫助使用者方便地完成服務注冊和發現、服務調用方式、斷路器、負載均衡、服務路由和過濾、分布式配置、集群選主,分布式消息等功能,主要功能詳細介紹如下:
Eureka意為古希臘語:發現。Eureka由Eureka Server和Eureka Client組成,Eureka Server 是服務的注冊中心,用于管理注冊服務的列表。
Netflix Ribbon是負責進行客戶端負載均衡的組件;一般與Rest Template結合,在訪問Eureka Client提供的服務時進行負載均衡處理。也就是說,Ribbon用于服務調用者向被調用者進行服務調用,并且如果服務者有多個節點時,會進行客戶端的負載均衡處理[4];
Netf lix Feign與Ribbon功能類似,用于調用方與被調用方的服務調用,同時進行客戶端負載均衡的處理;不過它能提供類似本地調用的方式調用遠程的Eureka Client提供的服務;它實際上是在Ribbon基礎上進行了進一步的封裝來提高調用服務的簡便性。
Hystrix是一個用于處理分布式系統的延遲和容錯的開源庫,能夠保證在一個依賴出現問題的情況下,不會導致整體服務失敗,避免級聯故障,以提供分布式系統的彈性。
Netfix Zuul是讓所有的外部調用都要先經過一個總的入口,這個總的入口就相當于一道墻,把外部與內部的所有服務接口隔開,所有外部調用都要先經過這個總入口,由這個總的入口來決定,要調用哪個服務。
Spring Cloud Config是一個基于http協議的遠程配置實現方式。通過統一的配置管理服務器進行配置管理,客戶端通過https協議主動地拉取服務的配置信息,完成配置獲取。
Spring Cloud Bus通過輕量消息代理連接各個分布的節點。用于廣播狀態的變化或其他消息指令。其中一個核心思想是通過分布式的啟動器對spring boot應用進行擴展,也可以用來建立一個多個應用之間的通信頻道。目前唯一實現的方式是用AMQP消息代理作為通道。
Spring Cloud Security是Spring提供的一個安全框架,提供認證和授權功能,最主要的是它提供了簡單的使用方式,同時又有很高的靈活性[5]。
通過以上對Spring Cloud的描述可以看出,雖然Spring Cloud有許多缺點,但就總體而言,Spring Cloud的優勢大于劣勢,目前Spring Cloud分布式微服務架構下的一站式解決方案,是各個微服務架構落地技術的集合體,將各個服務進行解耦,很好地解決了系統臃腫、高可用等問題,為用戶帶來了更好的使用體驗,此外還提供了一系列分布式系統快速構建的工具極大地簡化了研發人員的開發工作。