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

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

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 新一代微服務解決方案

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 消息組件。

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 調用。

<code>@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);
}/<code>

服務限流降級

作為穩定性的核心要素之一,服務限流和降級是微服務領域特別重要的一環,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等組件,開發者可以在阿里雲上實現對象存儲,分佈式任務調度等功能。

為什麼我看好 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 集成了阿里雲的商業化組件,可以說天然支持雲原生特性。

總結

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


分享到:


相關文章: