Spring Cloud Alibaba是什么
先來看一下官方是怎么定義Spring Cloud Alibaba的:
Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需組件,方便開發者通過Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。
從官方的文檔可以看出Spring Cloud Alibaba是一個微服務一站式解決方案,提供了對Spring Cloud的標准實現,即包含了多個治理微服務的組件。 我們之前使用Spring Cloud的時候其實是在使用Spring Cloud Netflix的解決方案,使用到了Netflix中大家都非常熟悉的組件:Eureka、Zuul、Hystrix、Ribbon等,下面是Spring Cloud Netflix的官方介紹:
Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)..
簡單翻譯一下:Spring Cloud Netflix提供了Netflix OSS集成到Spring Boot應用,通過自動化配置、綁定到spring環境和其他的習慣的spring編程模型。通過少量的注解你就可以快速啟用和配置通用模式到你的應用,使用經過Netflix實戰檢驗的組件去構建大型分布式系統。這個模式提供了包含服務發現(Eureka)、斷路器(Hystrix)、智能路由(Zuul)、客戶端負責均衡(Ribbon)等組件。
到目前為止我們可以將Spring Cloud Alibaba和Spring Cloud Netflix做一個比較(阿里巴巴官方也是將Spring Cloud Alibaba和Spring Cloud Netflix做比較),他們倆都是Spring Cloud標准實現的微服務一站式解決方案提供商。下圖是阿里官方開發者社區在介紹關於Spring Cloud Alibaba文章時,將其與各大提供商做比較的對比圖:
進駐Spring Cloud孵化器
2018年10月31日,Spring Cloud Alibaba正式入駐Spring Cloud官方孵化器並發布了第一個預覽版本。我們知道Spring Cloud 本身其實只是一套微服務規范,並不是一個拿來即可用的框架,而 Spring Cloud Alibaba 的開源為開發者們提供了這套規范的實現方式。同時,Spring Cloud Alibaba 提供的完整的微服務組件、中文文檔和本地化的開源服務提高了開發者們接入微服務的速率,並降低了后續的運維難度。
Spring Cloud for Alibaba 0.2.0 released
Spring Cloud for Alibaba項目包含了阿里巴巴開源組件和多個雲產品。該項目旨在實現並公開眾所周知的Spring Framework模式和抽象,以便給使用阿里巴巴產品的 Java 開發者帶來使用 Spring Boot 和 Spring Cloud 的更多便利。
Spring Cloud Alibaba進入到官方孵化器之后,預計將在2019年的某個時候將從孵化器畢業,並加入Spring Cloud 發布列車。下面是官方博客原文:
Spring Cloud Alibaba will work towards graduating from incubation to officially join a Spring Cloud Release Train sometime in 2019
如果讀者朋友們想及時了解Spring官方社區的動態信息,可以通過下面的方式郵件訂閱Sring官方博客內容:
Spring Cloud Netflix進入維護模式
2018年12月12日,在這個雙12的喜慶日子里,Spring官方社區發生了一件震驚Java界的大事,Netflix官方宣布了旗下大部分的微服務組件進入了Maintenance Mode(維護模式)。
博文連接 :spring-cloud-greenwich-rc1-available-now
最近,Netflix 宣布 Hystrix正在進入維護模式。自2016年以來,Ribbon已處於類似狀態。盡管Hystrix和Ribbon現已處於維護模式,但它們仍然在Netflix大規模部署。
Hystrix Dashboard和Turbine已被Atlas取代。這些項目的最后一次提交別是2年和4年前。Zuul 1和Archaius 1都已經被后來不兼容的版本所取代。
以下Spring Cloud Netflix模塊組件和相應的Starter將進入維護模式:
1.spring-cloud-netflix-archaius
2.spring-cloud-netflix-hystrix-contract
3.spring-cloud-netflix-hystrix-dashboard
4.spring-cloud-netflix-hystrix-stream
5.spring-cloud-netflix-hystrix
6.spring-cloud-netflix-ribbon
7.spring-cloud-netflix-turbine-stream
8.spring-cloud-netflix-turbine
9.spring-cloud-netflix-zuul
官方還特意解釋了什么是Maintenance Mode(維護模式)。
將模塊組件置於維護模式,意味着Spring Cloud團隊將不會再為這些模塊組件添加新的功能。但是我們將修復blocker級別的bug以及安全問題,我們也會考慮並審查社區的小型pull request。
我們打算繼續為這些模塊提供至少一年的支持,直到Greenwich的發布版本基本可用為止。
筆者認為,Netflix的組件短期內使用還是沒有問題的,畢竟是已經被業界廣泛使用過的,是經得住大規模生產環境的考驗的,所以對於還在使用Netflix組件的企業來說也不必驚慌失措,但是由於不再會有新特性的出現,維護力度持續下降,長期使用肯定是不被推薦的了。對於國內的Java開發者來說,對Spring Cloud Alibaba的開源組件可能會更加的期盼,我認為它將會是Spring Cloud Netflix的完美替代者,並且我堅信Spring Cloud Alibaba的組件一定會更加符合國情,對於國內的開發者會更加人性化,所以Netflix進入維護模式這件事情反而更加激發了我對學習、研究Spring Cloud Alibaba的興趣,並且期盼它能夠盡早地從Spring 社區它孵化成功。我相信到那時Spring Cloud Alibaba將會幫助更多的國內企業更好更快地落地微服務。
Spring Cloud Alibaba正式畢業
終於在經過了大約10個月的孵化器期之后,2019年7月24日Spring官方社區在一篇關於簡化Spring Cloud發布系列的官方博文中宣布了Spring Cloud Alibaba正式從 Spring Cloud Incubator 孵化器畢業,成為了Spring社區的正式項目。
simplifying-the-spring-cloud-release-train
出於這些原因,Spring Cloud團隊決定采用一種簡化發布流程的模型,使我們能夠在保持所有可觀收益的同時解決弊端。方案就是IaaS服務提供商將在自己的GitHub組織中托管和維護其代碼。這種方式同樣適用於當前發布系列中已經存在的集成項目。Spring Cloud Azure還沒有加入發布系列,Spring Cloud Alibaba團隊已經從孵化器組織畢業,並且已經開始采用這種新的方式管理項目。
至此Spring社區中將會加入一個也是唯一一個國產的開源項目Spring Cloud Alibaba。Spring Cloud Alibaba畢業后發布了適配Spring Cloud中Edgware、Finchley、Greenwich三個版本的對應版本。
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>
同時國內版Github碼雲也提供了Spring Cloud Alibaba極速下載鏡像。
Java界引發熱議
筆者和技術圈的朋友討論過Spring Cloud Alibaba,他們一致認為Spring Cloud Alibaba的出現一定會在國內的Java業界引起熱議,果不其然,還沒有等到Spring Cloud Alibaba孵化成功,那些所謂的“自媒體大佬”就蠢蠢欲動,開始了對Spring Cloud Alibaba的評頭論足,一時間國內Java圈議論紛紛,有贊賞的、也有貶低的,下面是幾篇訪問量較大的文章,感興趣的朋友可以到網上了解一下,當個吃瓜群眾也是很Nice的。
Spring Cloud Alibaba技術棧
通過前面的介紹,我們已經知道了Spring Cloud Alibaba從孵化到畢業的周期,也知道了它是一個和Spring Cloud Netflix類似的解決方案,同時也被國內Java圈被譽為是在Spring Cloud Netflix進入維護模式之后微服務最好的替代方案,下面我們就從整體方向來了解一下Spring Cloud Alibaba的技術棧。
主要功能
- 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ限流降級功能的接入,可以在運行時通過控制台實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
- 服務注冊與發現:適配Spring Cloud 服務注冊與發現標准,默認集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系統中的外部化配置,配置更改時自動刷新。 消息驅動能力:基於 Spring Cloud Stream為微服務應用構建消息驅動能力。
- 分布式事務:使用 @GlobalTransactional 注解,高效並且對業務零侵入地解決分布式事務問題。
- 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- 分布式任務調度:提供秒級、精准、高可靠、高可用的定時(基於 Cron
表達式)任務調度服務。同時提供分布式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。 - 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
組件
Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
RocketMQ:一款開源的分布式消息系統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分布式事務解決方案。
Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。
Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精准、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。
Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
技術選型
圖片來自於阿里官方的開發者社區博文,根據上面的架構圖,依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。
但是接入阿里微服務解決方案是有代價的,Spring Cloud Alibaba的組件並不是全部開源免費的,Alibaba Cloud ACM、Alibaba Cloud OSS、Alibaba Cloud SchedulerX、Alibaba Cloud SMS這四個組件是不開源的,換句話說是需要花錢的,並且會和阿里雲平台綁定,這些是需要開發者去考慮的。
當業務需要這些組件時其實市面上也還是有替代方案的,Alibaba Cloud ACM其實不需要使用,開源的Nacos已經非常強大。Alibaba Cloud OSS對象存儲服務可以使用Redis、memcache這樣的NoSQL數據庫代替,使用FastDFS也是不錯的選擇。對於Alibaba Cloud SchedulerX定時任務組件,可以使用elastic-job和xxl-job代替,這兩個開源框架都已經在很多企業中使用,是非常成熟的Java分布式定時任務解決方案。Alibaba Cloud SMS短信服務,短信服務提供商非常多,這個應該是不會困擾到企業的技術選型的。
缺少網關組件
使用Spring Cloud Alibaba的所有開源組件已經可以搭建出適用大部分企業的基礎架構,滿足一般需求是沒什么問題的了。如果說Spring Cloud Alibaba還有什么缺點的話,我認為除了哪些不開源的組件之外,缺少網關組件是Spring Cloud Alibaba不足的另外一個地方,但好在Spring官方社區還有網關組件Spring Cloud Gateway,或者使用開源的網關Soul(號稱Java最好的網關解決方案)。