1. 程式人生 > >Spring Cloud Alibaba 新一代微服務解決方案

Spring Cloud Alibaba 新一代微服務解決方案

本篇是「跟我學 Spring Cloud Alibaba」系列的第一篇,

每期文章會在公眾號「架構進化論」進行首發更新,歡迎關注。

 

1、Spring Cloud Alibaba 是什麼

Spring Cloud Alibaba 是阿里巴巴提供的微服務開發一站式解決方案,是阿里巴巴開源中介軟體與 Spring Cloud 體系的融合。

馬老師左手雙十一,右手阿里開源元件,不僅佔據了程式設計師的購物車,還要攻佔大家的開發工具。

 

先說說 Spring Cloud

提起微服務,不得不提 Spring Cloud 全家桶系列,SpringCloud 是若干個框架的集合,包括 spring-cloud-config、spring-cloud-bus 等近 20 個子專案,提供了服務治理、服務閘道器、智慧路由、負載均衡、斷路器、監控跟蹤、分散式訊息佇列、配置管理等領域的解決方案。

Spring Cloud 通過 Spring Boot 風格的封裝,遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、容易部署的分散式系統開發工具包。

一般來說,Spring Cloud 包含以下元件,主要以 Netflix 開源為主:

 

Spring Cloud Alibaba

同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務解決方案,包含開發分散式應用微服務的必需元件,方便開發者通過 Spring Cloud 程式設計模型輕鬆使用這些元件來開發分散式應用服務。

依託 Spring Cloud Alibaba,您只需要新增一些註解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中介軟體來迅速搭建分散式應用系統。

作為 Spring Cloud 體系下的新實現,Spring Cloud Alibaba 跟官方的元件或其它的第三方實現如 Netflix, Consul,Zookeeper 等對比,具備了更多的功能:

 

 

2、Spring Cloud Alibaba 包含元件

這幅圖是 Spring Cloud Alibaba 系列元件,其中包含了阿里開源元件,阿里雲商業化元件,以及整合Spring Cloud 元件。

 

 

 

阿里開源元件

Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

RocketMQ:開源的分散式訊息系統,基於高可用分散式叢集技術,提供低延時的、高可靠的訊息釋出與訂閱服務。

Dubbo:這個就不用多說了,在國內應用非常廣泛的一款高效能 Java RPC 框架。

Seata:阿里巴巴開源產品,一個易於使用的高效能微服務分散式事務解決方案。

Arthas:開源的Java動態追蹤工具,基於位元組碼增強技術,功能非常強大。

 

阿里商業化元件

作為一家商業公司,阿里巴巴推出 Spring Cloud Alibaba,很大程度上市希望通過搶佔開發者生態,來幫助推廣自家的雲產品。所以在開源社群,夾帶了不少私貨,這部分元件我在阿里工作時都曾經使用過,整體易用性和穩定性還是很高的。

Alibaba Cloud ACM:一款在分散式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。

Alibaba Cloud OSS:阿里雲物件儲存服務(Object Storage Service,簡稱 OSS),是阿里雲提供的雲端儲存服務。

Alibaba Cloud SchedulerX:阿里中介軟體團隊開發的一款分散式任務排程產品,提供秒級、精準的定時(基於 Cron 表示式)任務排程服務。

 

整合 Spring Cloud 元件

Spring Cloud Alibaba 作為整套的微服務解決元件,只依靠目前阿里的開源元件是不夠的,更多的是整合當前的社群元件,所以 Spring Cloud Alibaba 可以整合 Zuul,OpenFeign等閘道器,也支援 Spring Cloud Stream 訊息元件。

 

3、Spring Cloud Alibaba 功能

那麼作為微服務解決方案, Spring Cloud Alibaba是如何支援微服務治理的各個功能。

 

服務註冊與發現

Spring Cloud Alibaba 基於 Nacos 提供 spring-cloud-alibaba-starter-nacos-discovery & spring-cloud-alibaba-starter-nacos-config 實現了服務註冊 & 配置管理功能。依靠 @EnableDiscoveryClient 進行服務的註冊,相容 RestTemplate & OpenFeign 的客戶端進行服務呼叫。

適配 Spring Cloud 服務註冊與發現標準,預設集成了 Ribbon 的支援。

 

支援多協議的服務呼叫

Spring Cloud 預設的服務呼叫依賴 OpenFeign 或 RestTemplate 使用 REST 進行呼叫。

使用 @DubboTransported 註解可將底層的 Rest 協議無縫切換成 Dubbo RPC 協議,進行 RPC 呼叫。

@FeignClient("dubbo-provider")
@DubboTransported(protocol = "dubbo")
public interface DubboFeignRestService {
  @GetMapping(value = "/param")
  String param(@RequestParam("param") String param);


  @PostMapping("/saveB")
  String saveB(@RequestParam("a") int a, @RequestParam("b") String b);
}

  

服務限流降級

作為穩定性的核心要素之一,服務限流和降級是微服務領域特別重要的一環,Spring Cloud Alibaba 基於 Sentinel,對 Spring 體系內基本所有的客戶端,閘道器進行了適配,

預設支援 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入。

Sentinel應用比較簡單,只需引入 starter,即可生效,可以在執行時通過控制檯實時修改限流降級規則,還支援檢視限流降級 Metrics 監控。

 

微服務訊息驅動

支援為微服務應用構建訊息驅動能力,基於 Spring Cloud Stream 提供 Binder 的新實現: Spring Cloud Stream RocketMQ Binder,

也新增了 Spring Cloud Bus 訊息匯流排的新實現 Spring Cloud Bus RocketMQ。

 

分散式事務

使用 Seata 解決微服務場景下面臨的分散式事務問題。

使用 @GlobalTransactional 註解,在微服務中傳遞事務上下文,可以對業務零侵入地解決分散式事務問題。

 

阿里雲提供的商業能力

通過上面提到的OSS,schedulerx等元件,開發者可以在阿里雲上實現物件儲存,分散式任務排程等功能。

 

4、為什麼我看好 Spring Cloud Alibaba

Spring Cloud Alibaba 雖然誕生時間不久,但是背靠大樹好乘涼,賴於阿里巴巴強大的技術影響力,已經成為微服務解決方案的重要選擇之一。

我認為 Spring Cloud Alibaba 的優勢有以下幾點:

  • 阿里巴巴強大的技術輸出能力

阿里巴巴無疑是國內開源技術領域的最有影響力的公司之一,已經有Dubbo、Druid,FastJson等成功的開源元件,

再加上阿里不遺餘力的推廣,社群發展也非常快。

  • 整合Dubbo,利用Dubbo在微服務領域的超高人氣

Dubbo是國內應用最廣的分散式服務框架之一,基於Dubbo改造的Dubbox等也有很多公司在使用,

Spring Cloud Alibaba對Dubbo做了比較好的整合,可以吸引不少使用Dubbo的開發者。

  • 雲原生趨勢,整合阿里雲商業化元件

雲原生(Cloud Native)是今年技術領域特別熱門的一個詞,雲原生是一種專門針對雲上應用而設計的方法,用於構建和部署應用,以充分發揮雲端計算的優勢。

Spring Cloud Alibaba 集成了阿里雲的商業化元件,可以說天然支援雲原生特性。

 

4、總結

今天簡單介紹了 Spring Cloud Alibaba 的系列元件,以及支援的功能。

作為Spring Cloud開源社群的新人,你是否看好 Spring Cloud Alibaba 的發展,歡迎留言一起討論。