天天看點

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 Alibaba

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

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

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

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

2、Spring Cloud Alibaba 包含元件

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

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

阿裡開源元件

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 的發展,歡迎留言一起讨論。

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