天天看點

Spring Cloud Alibaba專題--2.2.5.RELEASE--Spring Cloud Alibaba介紹(三)

引子:

上文Spring Cloud Alibaba專題–服務層的架構演進(二)中說到,微服務的架構搭建因為門檻過高,嘗試搭建微服務架構的過程像更像是從入門到放棄的勸退過程。就像初期的Spring一樣。Spring雖然相比老一代strus2架構搭建簡單了很多,但是其配置複雜度仍然讓很多人诟病。針對這個問題,Spring官方推出了Spring Boot。通過約定大于配置的規範,以及大量預設開箱即用的Starter,使得Spring的配置極大的簡化,那麼微服務門檻高的問題是不是也能照葫蘆畫瓢解決呢?答案是肯定的,這個類似于Spring Boot的産品就是Spring Cloud

一:Spring Cloud介紹

Spring Cloud為開發人員提供了快速建構分布式系統的能力

1.Spring Cloud制定了譬如服務端負載均衡,配置發現,消息總線等等相關的标準,通過這些标準,任何實作了标準的相關領域的中間件都可以非常輕松的接入Spring Cloud。基于同一标準實作的中間件可以直接替換。

2.在提供這一系列标準後,Spring Cloud官方實作了套自己的實作,比如服務發現中心Eureka,配置中心Spring Cloud Config,負載均衡器Ribbon等等

3.處理自家的實作,Spring Cloud也人性化的給常用的其他的中間件做了接入Spring Cloud的驅動,即對應的spirng-cloud-xxxx.starter(自己家的産品當然也有這個),比如配置中心Consul,Zookeeper等等

(1)Spirng Cloud支援的元件

功能 翻譯 選擇
Distributed/versioned configuration 分布式/版本化配置管理 Spring Cloud Config、Consul、Nacos、Zookeeper
Routing 路由 Zuul、Spring Cloud Gateway
Service-to-service calls 端到端的調用 RestTempalte、Feign
Service registration and discovery 端到端的調用 Euraka、Consul、Nacos、Zookeeper
Load balancing 負載均衡 Ribbon
Circuit Breakers 斷路器 Hystrix、Sentinel、Resilience4J
Global locks 全局鎖 Spring Cloud Cluster(已經遷移到Spring Integration)
Leadership election and cluster state 選舉與叢集狀态 Spring Cloud Cluster(已經遷移到Spring Integration)
Distributed messaging 分布式消息 Spring Cloud Stream+Kafka/RabbitMQ/RocketMQ

(2)Spirng Cloud元件能力腦圖

Spring Cloud Alibaba專題--2.2.5.RELEASE--Spring Cloud Alibaba介紹(三)

注:以上圖檔來自網際網路

二:Spring Cloud Alibaba

Spirng Cloud Alibaba已經2019年8月1日成功孵化。可以在Spring的官網中看到

Spring Cloud Alibaba專題--2.2.5.RELEASE--Spring Cloud Alibaba介紹(三)

1.Spring Cloud Alibaba簡介

Spring Cloud Alibaba 緻力于提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需元件,友善開發者通過 Spring Cloud 程式設計模型輕松使用這些元件來開發分布式應用服務。

依托 Spring Cloud Alibaba,您隻需要添加一些注解和少量配置,就可以将 Spring Cloud 應用接入阿裡微服務解決方案,通過阿裡中間件來迅速搭建分布式應用系統。

主要功能

  • 服務限流降級:預設支援 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運作時通過控制台實時修改限流降級規則,還支援檢視限流降級 Metrics 監控。
  • 服務注冊與發現:适配 Spring Cloud 服務注冊與發現标準,預設內建了 Ribbon 的支援。
  • 分布式配置管理:支援分布式系統中的外部化配置,配置更改時自動重新整理。
  • 消息驅動能力:基于 Spring Cloud Stream 為微服務應用建構消息驅動能力。
  • 分布式事務:使用 @GlobalTransactional 注解, 高效并且對業務零侵入地解決分布式事務問題。
  • 阿裡雲對象存儲:阿裡雲提供的海量、安全、低成本、高可靠的雲存儲服務。支援在任何應用、任何時間、任何地點存儲和通路任意類型的資料。
  • 分布式任務排程:提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務排程服務。同時提供分布式的任務執行模型,如網格任務。網格任務支援海量子任務均勻配置設定到所有 Worker(schedulerx-client)上執行。
  • 阿裡雲短信服務:覆寫全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

注:以上文字來自Spring Cloud Alibaba官網

可以看到,雖然Spring Cloud Alibaba是Spring Cloud的一個子項目,但是這個子項目同樣是和Spirng Cloud一樣是微服務開發的一站式解決方案,這不是重複了嗎?

2.為什麼要使用Spring Cloud Alibaba

  • 一個很重要的原因就是SpringCloud中一些元件閉源了,不再維護,如果在生産環境出現了問題,官方不再免費維護了。比如:注冊中心Eureka在2.0版本之後宣布閉源了,容錯元件Hystrix、網關元件Zuul也已經宣布停止維護了
  • 雖然說SpringCloud在官方給出了最優的替換方案,但是那些替換方案不再屬于SpringCloud技術棧。換句話說:就是SpringCloud的技術棧不再完整了!此時,我們就有必要尋找一個新的完整的技術棧

同樣是業界一流的開源大廠,相對于Spring官方,Alibaba不僅擁有衆多的開源産品,而且開源的很多産品都是經過内部雙11、雙12大促的考驗,在不斷總結和優化後開源出來的産品。這個時候以Alibaba的技術背景下的分布式一站式解決方案進入孵化器,也就是現在的Spring Cloud Alibaba

是以:在目前的背景下,Spring Cloud Alibaba是作為首選的分布式一站式解決方案

3.使用Spring Cloud Alibaba的好處

1.既然是一站式解決方案,常見的分布式元件的內建,适配及标準實作,官方都已經做了,分布式環境搭建将變得非常簡單,再也不用為了內建某個元件,辛苦的寫Starter以及初始化資料了(寫的還不一定好使=_=!!)

2.依賴這Spring Cloud這座大山(雖然部分元件不在維護,但絲毫不能影響Spirng Cloud在分布式解決方案中做的鋪墊),出了支援原來Spring Cloud的能力外,對于阿裡系的Dubbo等相關的技術站同樣支援,而且,針對Spirng Cloud能力做增強(以前不支援的能力)和優化(自家的東西優化)

3.幾年前,很多人還在為了争論用Dubbo好還是用Spring Cloud好(當然,這兩個東西在一塊比并不合适),現在,Spring Cloud Alibaba在分布式解決方案上形成了大統一

4.版本說明

(1)元件版本關系

Spring Cloud Alibaba專題--2.2.5.RELEASE--Spring Cloud Alibaba介紹(三)

(2)畢業版本依賴關系(推薦使用)

Spring Cloud Alibaba專題--2.2.5.RELEASE--Spring Cloud Alibaba介紹(三)

(3)本專題使用的版本

雖然Spring Cloud Alibaba 2021.1版本已經可以使用了,最新版雖然擁有更強的功能,但是同樣可能存在更多的bug,這裡選擇目前時間次新的版本2.2.5RELEASE

5.Spring Cloud Alibaba的使用

Spring Cloud Alibaba基于Spring Cloud,而Spring Cloud又是基于Spring Boot,按照上面的版本對應關心,Spring Cloud Alibaba使用的是2.2.5.RELEASE,Spring Cloud的版本應為Hoxton.SR8,而Spring Boot的版本應為2.3.2.RELEASE

依賴版本聲明

Spring Cloud Alibaba,Spring Cloud以及Spring Boot都提供了依賴版本聲明的pom,我們可以使用Maven的dependencyManagement來控制依賴版本,這樣,隻要是對應的pom中規定了的依賴包,我們引入的時候就不必聲明版本号了,注意,使用Spring Cloud Alibaba,或Spring Cloud的任意一個驅動包,都會自動将對應的Spring Cloud依賴以及Spring Boot的依賴加入,項目中一旦引入一個,就不用再自己聲明依賴Spring Cloud或Spring Boot了

<properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
        <dubbo.version>2.7.8</dubbo.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>
 <dependencyManagement>
        <dependencies>
            <!--spring-cloud-alibaba dependencies pom 依賴包-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring-cloud-alibaba dependencies pom 依賴包-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring-cloud dependencies pom 依賴包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
</dependencyManagement>
           

繼續閱讀