艿艿的 Spring Cloud Alibaba!開整~

點擊上方“芋道源碼”,選擇“設爲星標

管她前浪,還是後浪?

能浪的浪,纔是好浪!

每天 8:55 更新文章,每天掉億點點頭髮...

源碼精品專欄

 

這是艿艿從春節開始默默在家擼的 Spring Cloud Alibaba 系列文章,已經完成給 Spring Cloud Alibaba 官方投稿,嘿嘿!

所有示例代碼,都在 https://github.com/YunaiV/SpringBoot-Labs 倉庫下。已經要 4000 Star,還不趕緊!!!嘿嘿~

下半年要開始憋點新東西,開森!美滋滋!2333333333333

    

摘要: 原創出處 http://www.iocoder.cn/Spring-Cloud-Alibaba/intro/ 「芋道源碼」歡迎轉載,保留摘要,謝謝!

  • 1. Spring Cloud 體系

  • 2. Spring Cloud Alibaba 套件

  • 3. 選擇 Spring Cloud 還是 Dubbo?

  • 666. 彩蛋


本文在提供完整代碼示例,可見 https://github.com/YunaiV/SpringBoot-Labs

原創不易,給點個 Star 嘿,一起衝鴨!

1. Spring Cloud 體系

相信很多胖友都看過如下一張圖:

  • SpringBean(對象) 爲中心,提供 IOC、AOP 等功能。

  • Spring BootApplication(應用) 爲中心,提供自動配置、監控等功能。

  • Spring CloudService(服務) 爲中心,提供服務的註冊與發現、服務的調用與負載均衡等功能。

先來一起看看 Spring Cloud 官方對自己的簡短介紹:

FROM https://github.com/spring-cloud

Tools for building common patterns in distributed systems with Spring

  • 基於 Spring 構建分佈式系統的工具集,簡稱“Spring 全家桶”。

再來一起看看 Spring Cloud 官方對功能點的介紹:

FROM https://spring.io/projects/spring-cloud

功能列表:

  • 【配置中心】Distributed/versioned configuration

  • 【註冊中心】Service registration and discovery

  • 【API 網關】Routing

  • 【服務調用】Service-to-service calls

  • 【負載均衡】Load balancing

  • 【服務容錯】Circuit Breakers

  • 【分佈式消息】Distributed messaging

------------ 分隔線 -------------

如下功能,從 Spring Cloud 遷移到 Spring Integration 中:

  • 【全局鎖】Global locks

  • 【領導選舉與集羣狀態】Leadership election and cluster state

雖然 Spring Cloud 提供了非常強大的功能,但是它並不提供所有的實現,而是通過 Spring Cloud Common 子項目,定義了統一的抽象 API。如下圖所示:

而後,不同廠商結合其自身的中間件,提供自己的 Spring Cloud 套件,例如說:

  • Netflix 結合自己的 Eureka、Ribbon、Hystrix 等開源中間件,實現了 spring-cloud-netflix

    Spring Cloud Netflix 是目前國內使用最爲流行的 Spring Cloud 套件。不過隨着 Netflix 在開源的調整,逐步會慢慢沒落。

  • Kubernetes 結合自己的 apiserver、configmap 等功能,實現了 spring-cloud-kubernetes

  • Alibaba 結合自己的 Nacos、Dubbo、Sentinel 等開源中間件,實現了 spring-cloud-alibaba

    目測 Spring Cloud Alibaba 在國內會火?!

當然,Spring Cloud 官方還是提供了一些功能的具體實現的,嘿嘿。例如說:

  • API 網關:Spring Cloud Gateway

  • 配置中心:Spring Cloud Config、Spring Cloud Vault

  • 鏈路追蹤:Spring Cloud Sleuth

  • 消息驅動:Spring Cloud Stream

  • 事件總線:Spring Cloud Bus

  • 服務調用:Spring Cloud OpenFeign

  • 負載均衡:Spring Cloud Load Balancer

下面,我們把 Spring Cloud 官方、Netflix、Alibaba 三者整理成如下表格:

Spring Cloud 技術棧整理

2. Spring Cloud Alibaba 套件

Spring Cloud Alibaba 套件,阿里開源組件、阿里雲商業組件整合進 Spring Cloud 體系當中,同時對 Spring Cloud Gateway、OpenFeign、Ribbon 等等進行集成。整體如下圖所示:

Spring Cloud Alibaba 全景圖

我們可以將 Spring Cloud Alibaba 套件中的阿里開源組件阿里雲商業組件整理成如下對照表:

開源 V.S. 商業

主要功能如下:

  • 服務註冊與發現:適配 Spring Cloud 服務註冊與發現標準,默認集成了 Ribbon 的支持。

  • 分佈式配置管理:支持分佈式系統中的外部化配置,配置更改時自動刷新。

  • 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運行時通過控制檯實時修改限流降級規則,還支持查看限流降級 Metrics 監控。

  • 消息驅動能力:基於 Spring Cloud Stream 爲微服務應用構建消息驅動能力。

  • 分佈式事務:使用 @GlobalTransactional 註解, 高效並且對業務零侵入地解決分佈式事務問題。

商業化獨有功能如下:

  • 分佈式任務調度:提供秒級、精準、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。

    曾經,阿里 SchedulerX 也是一個開源項目,現在已經木有消息了...嘿嘿,希望未來能夠重啓。

  • 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。

  • 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

    友情提示:艿艿還是比較推薦使用雲片來發送短信,客服妹子基本是秒回,特別是審覈短信模板的時候。

2.1 阿里開源組件

2.1.1 Nacos

Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

  • 《芋道 Spring Cloud Alibaba 註冊中心 Nacos 入門》

  • 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入門》

2.1.2 Dubbo

Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

  • 《芋道 Spring Cloud Alibaba 服務調用 Dubbo 入門》

2.1.3 Sentinel

Sentinel:把流量作爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

  • 《芋道 Spring Cloud Alibaba 服務容錯 Sentinel 入門》

2.1.4 RocketMQ

RocketMQ:一款開源的分佈式消息系統,基於高可用分佈式集羣技術,提供低延時的、高可靠的消息發佈與訂閱服務。

  • 《芋道 Spring Cloud Alibaba 消息隊列 RocketMQ 入門》

  • 《芋道 Spring Cloud Alibaba 事件總線 Bus RocketMQ 入門》 對應 labx-20

2.1.5 Seata

Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分佈式事務解決方案。

  • 《芋道 Spring Cloud Alibaba 分佈式事務 Seata 入門》

2.2 阿里雲商業組件

2.2.1 Alibaba Cloud ACM

Alibaba Cloud ACM:一款在分佈式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。

2.2.2 Alibaba Cloud OSS

Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。

2.2.3 Alibaba Cloud SchedulerX

Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分佈式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。

2.2.4 Alibaba Cloud SMS

Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。

2.3 集成其它 Spring Cloud 組件

Spring Cloud Alibaba 在融入 Spring Cloud 體系之後,可以方便和其它 Spring Cloud 組件進行混合使用,強強聯合。這也可以彌補,Alibaba 暫時缺失的開源組件。

友情提示:如下艿艿只補充 Spring Cloud Alibaba 缺失的組件。

2.3.1 API 網關

  • 【推薦】《芋道 Spring Cloud 服務網關 Spring Cloud Gateway 入門》

  • 《芋道 Spring Cloud 服務網關 Zuul》計劃中...

2.3.2 鏈路追蹤

  • 【推薦】《芋道 Spring Cloud 鏈路追蹤 SkyWalking 入門》

  • 《芋道 Spring Cloud 鏈路追蹤 Spring Cloud Sleuth》

2.3.3 服務調用 + 負載均衡

  • 《芋道 Spring Cloud Netflix 負載均衡 Ribbon 入門》

  • 《芋道 Spring Cloud 聲明式調用 Feign 入門》

3. 選擇 Spring Cloud 還是 Dubbo?

相信很多胖友在做微服務架構的技術選型的時候,基本會面臨到的一個問題,特別是這個問題發生在 Dubbo 停止維護的時期?知乎上還有一個非常熱門的討論帖子《Spring Cloud 和 Dubbo 各自的優缺點是什麼? 》。

3.1 選擇 Spring Cloud 體系?

先假設,選擇 Spring Cloud 體系,那麼我們就要思考選擇哪一個 Spring Cloud 套件。目前最流行的,可能是 Netflix 提供的 Spring Cloud Netflix 套件。

但是世界總是這麼有趣,Netflix 開始減少在開源領域的投入,逐步開始停止維護其組件:

  • 《Netflix 宣佈停止開發Hystrix》

  • 《Eureka 2.0 開源工作宣告停止,繼續使用風險自負》

  • Netflix 將 Feign 捐獻給 OpenFeign 社區

  • Spring Cloud 官方團隊不考慮提供 Zuul 2 的支持,見 Zuul#ISSUE483

  • Ribbon 進入維護狀態,可見 Ribbon 項目首頁

因此,Spring Cloud Netflix 進入維護模式,可見《Spring Cloud Greenwich.RC1 available now》新聞。如下圖所示:

Spring Cloud Netflix 維護模式

那麼,Spring Cloud Netflix 可能不是一個很好的選擇。但是,Spring Cloud 又暫時沒有其它非常流行的套件,暫時可靠的貌似只有 Alibaba 提供的 Spring Cloud Alibaba 套件!在 Wanted: who's using Spring Cloud Alibaba 中,可以看到目前在使用 Spring Cloud Alibaba 的公司和團隊。

另外,聽說 Spring Cloud Alibaba 會成爲 Spring Cloud 第二代標準實現,但是艿艿暫時沒找到這塊的資料和新聞。

3.2 選擇 Spring Cloud Alibaba 還是 Dubbo?

事實上,Dubbo 已經從一個 RPC 框架,慢慢演變成了 Dubbo 生態,如下圖所示:

FROM http://dubbo.apache.org/zh-cn/ecology/index.html

Dubbo 生態

非常豐富,我們在 Spring Cloud Alibaba 看到的組件,在 Dubbo 生態中都提供了對應的集成。所以吧,這樣看下來,無論選擇 Spring Cloud Alibaba 還是 Dubbo 體系,都是非常不錯的選擇。

如果胖友選擇 Dubbo 體系,推薦閱讀如下文章:

  • 《芋道 Spring Boot Dubbo 入門》

  • 《芋道 Spring Boot 註冊中心 Nacos 入門》

  • 《芋道 Spring Boot 配置中心 Nacos 入門》

  • 《芋道 Spring Boot 服務容錯 Sentinel 入門》

  • 《芋道 Spring Boot 消息隊列 RocketMQ 入門》

  • 《芋道 Dubbo 分佈式事務 Seata 入門》

  • 《芋道 Spring Boot 鏈路追蹤 SkyWalking 入門》

目前,艿艿自己團隊選擇的是 Spring Boot + Dubbo 作爲整體架構,正在考慮慢慢遷移到 Spring Cloud Alibaba 上。主要原因是,我們面向的是 B 端業務,需要考慮私有化部署,而 Spring Cloud 相比 Dubbo 更易實現中間件的透明遷移

例如說,Spring Cloud Stream RocketMQ 遷移到 Spring Cloud Stream Kafka 或 Spring Cloud Stream RabbitMQ 只需要修改配置文件即可。感興趣的胖友,可以對比學習如下三篇文章:

旁白君:畢竟私有化部署時,對方可能會對使用什麼基礎組件會有要求,他就不喜歡 RocketMQ 而要 RabbitMQ 消息隊列。

很多時候,這是 JPA 相比 MyBatis 的優勢。

  • 《芋道 Spring Cloud Alibaba 消息隊列 RocketMQ 入門》

  • 《芋道 Spring Cloud 消息隊列 RabbitMQ 入門》

  • 《芋道 Spring Cloud 消息隊列 Kafka 入門》

666. 彩蛋

未來,艿艿會把自己開源電商項目 https://github.com/YunaiV/onemall,遷移到 Spring Cloud Alibaba 架構,胖友可以 Star 一波。

另外,在 https://github.com/YunaiV/SpringBoot-Labs 項目中,艿艿會不斷更新更多 Spring Cloud 和 Spring Cloud Alibaba 入門與實戰的文章,讓你不斷禿頭!

考慮到部分胖友對微服務暫時沒有總體的認知,推薦閱讀如下幾篇文章:

  • 《微服務 2.0 技術棧選型手冊》

  • 《一張圖瞭解 Spring Cloud 微服務架構》

  • 《12 張手繪圖,我搞懂了微服務架構》

  • 《Java 微服務框架選型(Dubbo 和 Spring Cloud?)》

  • 《什麼是微服務?》

  • 《這纔是微服務劃分的正確姿勢,值得學習!》

參考文章如下:

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

  • 《Spring Cloud Alibaba 官方文檔》



歡迎加入我的知識星球,一起探討架構,交流源碼。加入方式,長按下方二維碼噢

已在知識星球更新源碼解析如下:

最近更新《芋道 SpringBoot 2.X 入門》系列,已經 20 餘篇,覆蓋了 MyBatis、Redis、MongoDB、ES、分庫分表、讀寫分離、SpringMVC、Webflux、權限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能測試等等內容。

提供近 3W 行代碼的 SpringBoot 示例,以及超 4W 行代碼的電商微服務項目。

獲取方式:點“在看”,關注公衆號並回復 666 領取,更多內容陸續奉上。

兄弟,一口,點個????

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章