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