javascript
Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
阿里妹導讀:一年多前,Java 界最近發生了一件大事,阿里開源 Spring Cloud Alibaba,并推出首個預覽版。Spring Cloud 本身是一套微服務規范,并不是一個拿來即可用的框架,而 Spring Cloud Alibaba 的開源為開發者們提供了這套規范的實現方式。同時,Spring Cloud Alibaba 提供的完整的微服務組件、中文文檔和本地化的開源服務提高了開發者們接入微服務的速率,并降低了后續的運維難度。
經過一年多的孵化,Spring Cloud Alibaba 作為 Spring 社區的唯一一個國產開源項目,正式從 Spring Cloud Incubator 孵化器畢業,并發布了適配 Spring Cloud Edgware、Finchley、Greenwich 三個版本的新版本。
Spring Cloud Alibaba 是 Spring 社區第一個也是唯一一個國產開源項目。
?
Spring Cloud Alibaba 畢業后從孵化器倉庫遷移到了 Github Alibaba 倉庫下,新的倉庫地址點擊這里。 新的 maven 坐標如下:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope> </dependency>Spring Cloud Alibaba 各版本兼容表:
?
Spring Cloud Alibaba 介紹
Spring Cloud 是 Spring 社區打造出的一款基于 Spring Boot 用于快速構建分布式系統的框架,主要包括以下特性:
?
Spring Cloud Alibaba 是阿里巴巴開源中間件跟 Spring Cloud 體系的融合:
作為 Spring Cloud 體系下的新實現,Spring Cloud Alibaba 跟官方的組件或其它的第三方實現如 Netflix, Consul,Zookeeper 等對比,具備了更多的功能:
Spring Cloud Alibaba 功能
總體架構
依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。
服務注冊 & 配置管理
服務注冊 & 配置管理是微服務應用中必不可少的兩大基礎功能。
Spring Cloud Alibaba 基于 Nacos 提供 spring-cloud-alibaba-starter-nacos-discovery & spring-cloud-alibaba-starter-nacos-config 實現了服務注冊 & 配置管理功能。
依靠 @EnableDiscoveryClient 進行服務的注冊,兼容 RestTemplate & OpenFeign 的客戶端進行服務調用。
OpenFeign 客戶端:
@FeignClient(name = "echo-service") public interface EchoService {@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)String echo(@PathVariable("str") String str); }RestTemplate 客戶端:
@LoadBalanced @Bean public RestTemplate restTemplate1() {return new RestTemplate(); } .... restTemplate.getForObject("http://echo-service/echo/hello-spring-cloud-alibaba",String.class);配置管理直接以約定俗成的方式構造 dataId & Group 從 Nacos 讀取配置設置到 Spring Environment 中即可。
流控降級
流控降級是微服務穩定性的法寶,用于解決各種不穩定的場景可能會導致的嚴重后果。
在限流層面:我們根據系統的處理能力對流量進行控制,在保證系統吞吐量比較高的同時又不會把系統打垮。
在降級層面:在服務出現不穩定因素的時候暫時切斷服務的調用,等待一段時間再進行嘗試。一方面防止給不穩定服務“雪上加霜”,另一方面保護服務的調用方不被拖垮。
Spring Cloud Alibaba 基于 Sentinel 提供 spring-cloud-alibaba-starter-sentinel 對 Spring 體系內基本所有的客戶端,網關進行了適配,包括了 WebServlet, WebFlux, RestTemplate, OpenFeign, Netflix Zuul, Spring Cloud Gateway。
只需引入 starter,即可對這些組件生效。只需定義規則進行流控降級:
限流規則:
降級規則:
服務調用
Spring Cloud 默認的服務調用依賴 OpenFeign 或 RestTemplate 使用 REST 進行調用。
Spring Cloud Alibaba Dubbo 只需使用 @DubboTransported 注解即可將底層的 Rest 協議無縫切換成 Dubbo RPC 協議,進行 RPC 調用。這一舉措讓 Spring Cloud 的客戶端調用多了一個新的 RPC 選擇:
@Bean @LoadBalanced @DubboTransported public RestTemplate restTemplate() {return new RestTemplate(); }@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 Stream 提供 Binder 的新實現: Spring Cloud Stream RocketMQ Binder,也新增了 Spring Cloud Bus 消息總線的新實現 Spring Cloud Bus RocketMQ。
Spring Cloud Stream 對消息的編程模型進行了統一封裝,用同一套代碼進行消息的發送/接收,屏蔽底層消息中間件的實現細節,讓我們在關注點放到業務邏輯上。如果想要更換底層消息中間件,直接引入 Binder 的新實現即可,代碼層面幾乎無需修改。這是一段使用 Spring Cloud Stream RocketMQ & Spring Cloud Function 完成消息的接收,并轉換成大寫 & 添加 alibaba- 前綴的新消息,再發送給新的 topic 的過程:
spring.cloud.stream.bindings.input.destination=test-topic spring.cloud.stream.bindings.input.group=test-group1spring.cloud.stream.bindings.output.destination=test-topic-uppercasespring.cloud.stream.function.definition=uppercase|addprefix @SpringBootApplication @EnableBinding(Processor.class) public class FunctionApplication {public static void main(String[] args) {new SpringApplicationBuilder(FunctionApplication.class).web(WebApplicationType.NONE).run(args);}@Beanpublic Function<String, String> uppercase() {return x -> x.toUpperCase();}@Beanpublic Function<String, String> addprefix() {return x -> "alibaba-" + x;}}分布式事務
Seata 是 阿里巴巴 開源的 分布式事務中間件,以 高效 并且對業務 0 侵入 的方式,解決 微服務 場景下面臨的分布式事務問題。
在 Spring Cloud 這一層面,我們通過在微服務中傳遞事務上下文的方式完成了 Seata 在 Spring Cloud 層面的接入:
- Spring MVC 環境下支持自動還原 Seata 事務上下文
- 支持服務調用者通過 RestTemplate 或 FeignClient 調用時,自動傳遞 Seata 事務上下文
- 支持 FeignClient 和 Hystrix、Sentinel 同時使用的場景
這是一段使用 Spring Cloud Alibaba Seata 完成 storage 和 order 服務進行數據存儲的分布式事務代碼:
Roadmap
Spring Boot Admin 是一個開源社區項目,用于管理和監控 SpringBoot 應用程序。但是它沒有跟 Spring Cloud 做深度的整合。我們希望做一個 Spring Cloud Admin,它能提供如下功能:
- 增加服務治理控制臺,整合微服務控制能力
- 服務查詢、管理
- 配置管理
- 限流降級等
- 項目管理/監控
- 參考 Spring Cloud Azure Playground?http://azure-spring-cloud.azurewebsites.net/?,創造 Spring Cloud Alibaba Playground,把一些最佳實踐,視頻教程,自動生成項目等功能放上去
- 增加 Spring Cloud Alibaba 最佳實踐項目
- 針對 Spring Cloud Alibaba 各種特性,開發對應的實戰 Demo
- 替換 Spring Cloud 服務調用客戶端 OpenFeign & Ribbon。開發更通用的服務調用客戶端,替換 Spring Cloud 服務- - 調- 用客戶端 OpenFeign & Ribbon
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德在提升定位精度方面的探索和实践
- 下一篇: 来自 Spring Cloud 官方的消