Spring Cloud Alibaba 是阿里巴巴提供的微服務開發一站式解決方案,是阿里巴巴開源中間件與 Spring Cloud 體系的融合。程序員
馬老師左手雙十一,右手阿里開源組件,不只佔據了程序員的購物車,還要攻佔你們的開發工具。spring
提起微服務,不得不提 Spring Cloud 全家桶系列,SpringCloud 是若干個框架的集合,包括 spring-cloud-config、spring-cloud-bus 等近 20 個子項目,提供了服務治理、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分佈式消息隊列、配置管理等領域的解決方案。編程
Spring Cloud 經過 Spring Boot 風格的封裝,屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、容易部署的分佈式系統開發工具包。架構
通常來講,Spring Cloud 包含如下組件,主要以 Netflix 開源爲主:app
同 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 組件。ide
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 Alibaba 做爲整套的微服務解決組件,只依靠目前阿里的開源組件是不夠的,更多的是集成當前的社區組件,因此 Spring Cloud Alibaba 能夠集成 Zuul,OpenFeign等網關,也支持 Spring Cloud Stream 消息組件。
那麼做爲微服務解決方案, 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等組件,開發者能夠在阿里雲上實現對象存儲,分佈式任務調度等功能。
Spring Cloud Alibaba 雖然誕生時間不久,可是背靠大樹好乘涼,賴於阿里巴巴強大的技術影響力,已經成爲微服務解決方案的重要選擇之一。
我認爲 Spring Cloud Alibaba 的優點有如下幾點:
阿里巴巴無疑是國內開源技術領域的最有影響力的公司之一,已經有Dubbo、Druid,FastJson等成功的開源組件,
再加上阿里竭盡全力的推廣,社區發展也很是快。
Dubbo是國內應用最廣的分佈式服務框架之一,基於Dubbo改造的Dubbox等也有不少公司在使用,
Spring Cloud Alibaba對Dubbo作了比較好的集成,能夠吸引很多使用Dubbo的開發者。
雲原生(Cloud Native)是今年技術領域特別熱門的一個詞,雲原生是一種專門針對雲上應用而設計的方法,用於構建和部署應用,以充分發揮雲計算的優點。
Spring Cloud Alibaba 集成了阿里雲的商業化組件,能夠說自然支持雲原生特性。
今天簡單介紹了 Spring Cloud Alibaba 的系列組件,以及支持的功能。
做爲Spring Cloud開源社區的新人,你是否看好 Spring Cloud Alibaba 的發展,歡迎留言一塊兒討論。
本文做者:邴越
本文爲阿里雲內容,未經容許不得轉載。