一篇文章搞懂 Spring Cloud 是什么


概念定義

提起微服務,不得不提 Spring Cloud 全家桶系列,Spring Cloud 是一個服務治理平台,是若干個框架的集合,提供了全套的分布式系統解決方案。包含了:服務注冊與發現、配置中心、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分布式消息隊列等等。

Spring Cloud 通過 Spring Boot 風格的封裝,屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、容易部署的分布式系統開發工具包。開發者可以快速的啟動服務或構建應用、同時能夠快速和雲平台資源進行對接。微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元,Spring Cloud 就是這些微服務的大管家,采用了微服務這種架構之后,項目的數量會非常多,Spring Cloud 做為大管家需要管理好這些微服務,自然需要很多小弟來幫忙。

子項目

Spring Cloud 包含很多子項目,我們重點圍繞 Netflix 和 Alibaba 兩個標准實現給大家介紹:

Spring Cloud Netflix 第一代

Netflix是一家美國公司,在美國、加拿大提供互聯網隨選流媒體播放,定制DVD、藍光光碟在線出租業務。該公司成立於1997年,總部位於加利福尼亞州洛斯蓋圖,1999年開始訂閱服務。2009年,該公司可提供多達10萬部DVD電影,並有1千萬的訂戶。2007年2月25日,Netflix宣布已經售出第10億份DVD。HIS一份報告中表示,2011年Netflix網絡電影銷量占據美國用戶在線電影總銷量的45%。

針對多種 Netflix 組件提供的開發工具包,其中包括 Eureka、Ribbon、Feign、Hystrix、Zuul、Archaius 等。

  • Netflix Eureka:一個基於 Rest 服務的服務治理組件,包括服務注冊中心、服務注冊與服務發現機制的實現,實現了雲端負載均衡和中間層服務器的故障轉移。
  • Netflix Ribbon:客戶端負載均衡的服務調用組件。
  • Netflix Hystrix:容錯管理工具,實現斷路器模式,通過控制服務的節點,從而對延遲和故障提供更強大的容錯能力。
  • Netflix Feign:基於 Ribbon 和 Hystrix 的聲明式服務調用組件。
  • Netflix Zuul:微服務網關,提供動態路由,訪問過濾等服務。
  • Netflix Archaius:配置管理 API,包含一系列配置管理 API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。

Spring Cloud Alibaba 第二代

同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務解決方案。Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務。

依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統。

這幅圖是 Spring Cloud Alibaba 系列組件,其中包含了阿里開源組件,阿里雲商業化組件,以及集成 Spring Cloud 組件。

阿里開源組件

  • Nacos:阿里巴巴開源產品,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
  • Sentinel:面向分布式服務架構的輕量級流量控制產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • 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 體系下的新實現,Spring Cloud Alibaba 跟官方的組件或其它的第三方實現如 Netflix,Consul,Zookeeper 等對比,具備了更多的功能:

常用組件

  • Spring Cloud Netflix Eureka:服務注冊中心。
  • Spring Cloud Zookeeper:服務注冊中心。
  • Spring Cloud Consul:服務注冊和配置管理中心。
  • Spring Cloud Netflix Ribbon:客戶端負載均衡。
  • Spring Cloud Netflix Hystrix:服務容錯保護。
  • Spring Cloud Netflix Feign:聲明式服務調用。
  • Spring Cloud OpenFeign(可替代 Feign):OpenFeign 是 Spring Cloud 在 Feign 的基礎上支持了 Spring MVC 的注解,如 @RequesMapping等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,並通過動態代理的方式產生實現類,實現類中做負載均衡並調用其他服務。
  • Spring Cloud Netflix Zuul:API 網關服務,過濾、安全、監控、限流、路由。
  • Spring Cloud Gateway(可替代 Zuul):Spring Cloud Gateway 是 Spring 官方基於 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,Spring Cloud Gateway 旨在為微服務架構提供一種簡單而有效的統一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態系中的網關,目標是替代 Netflix Zuul,其不僅提供統一的路由方式,並且基於 Filter 鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。
  • Spring Cloud Security:安全認證。
  • Spring Cloud Config:分布式配置中心。配置管理工具,支持使用 Git 存儲配置內容,支持應用配置的外部化存儲,支持客戶端配置信息刷新、加解密配置內容等。
  • Spring Cloud Bus:事件、消息總線,用於在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。
  • Spring Cloud Stream:消息驅動微服務。
  • Spring Cloud Sleuth:分布式服務跟蹤。
  • Spring Cloud Alibaba Nacos:阿里巴巴開源產品,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
  • Spring Cloud Alibaba Sentinel:面向分布式服務架構的輕量級流量控制產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • Spring Cloud Alibaba RocketMQ:一款開源的分布式消息系統,基於高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
  • Spring Cloud Alibaba Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架,用於實現服務通信。
  • Spring Cloud Alibaba Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分布式事務解決方案。

總結

Spring Cloud 第一代 Spring Cloud 第二代
網關 Spring Cloud Zuul Spring Cloud Gateway
注冊中心 Eureka,Consul,ZooKeeper 阿里 Nacos,拍拍貸 Radar 等
配置中心 Spring Cloud Config 阿里 Nacos,攜程 Apollo,隨行付 Config Keeper 等
客戶端負載均衡 Ribbon spring-cloud-commons 的 Spring Cloud LoadBalancer
熔斷器 Hystrix spring-cloud-r4j(Resilience4J),阿里 Sentinel 等
鏈路追蹤 Sleuth + Zipkin Apache Skywaling,OpenTracing 等

雖然 Eureka,Hystrix 等不再繼續開發或維護,但是目前來說不影響使用,不管怎么說感謝開源,向 Netflix 公司的開源致敬。

版本說明

為什么 Spring Cloud 版本用的是單詞而不是數字?

這樣設計的目的是為了更好的管理每個 Spring Cloud 的子項目的清單。避免總版本號與子項目的版本號混淆。

例如:Spring Cloud 2.2.0.RELEASE 的 Spring Cloud Netflix 2.2.2.RELEASE 如果使用這種方式會讓開發者混淆版本號。

定義規則

采用倫敦的地鐵站名稱來作為版本號的命名,根據首字母排序,字母順序靠后的版本號越大。

Spring 官方詳細的版本查看接口:https://start.spring.io/actuator/info

發布計划

版本號 版本 說明
BUILD-XXX 開發版 開發團隊內部使用
M 里程碑版 MileStone,M1 表示第 1 個里程碑版本,一般同時標注 PRE,表示預覽版
RC 候選發布版 Release Candidate,正式發布版的前一個觀察期,不添加新功能,主要着重於除錯
SR 正式發布版 Service Release,SR1 表示第 1 個正式版本,一般同時標注 GA,表示穩定版本
GA 穩定版 經過全面測試並可對外發行稱之為GA(General Availability)

子項目版本說明

例如:Spring Cloud Alibaba 2.1.0.RELEASE

  • 2:主版本號。當功能模塊有較大更新或者整體架構發生變化時,主版本號會更新。
  • 1:次版本號。次版本表示只是局部的一些變動。
  • 0:修改版本號。一般是 bug 的修復或者是小的變動。
  • RELEASE:希臘字母版本號。標注當前版本的軟件處於哪個開發階段。

希臘字母版本說明

  • Base:設計階段。只有相應的設計沒有具體的功能實現。
  • Alpha:軟件的初級版本。存在較多的 bug。
  • Bate:表示相對 Alpha 有了很大的進步,消除了嚴重的 bug,還存在一些潛在的 bug。
  • Gamma:是 Beta 版做過一些修改,成為正式發布的候選版本(Release Candidate)
  • Release:該版本表示最終版。

至此 Spring Cloud 所有概念性知識點就講解結束了。

本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議

大家可以通過 分類 查看更多關於 Spring Cloud 的文章。

🤗 您的點贊轉發是對我最大的支持。

📢 掃碼關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕松噢 ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM