我們知道spring cloud可以用來開發微服務,但是應該很少有人真正知道Spring Cloud是什么,
官方的解釋是:spring cloud提供了一些可以讓開發者快速構建分布式應用的工具,這些服務可以很好的作業在任何分布式環境下,
既然提供的是一些快速構建微服務應用的工具,那么我們需要了解微服務開發程序中需要解決哪些問題?
-
服務注冊發現
-
遠程服務呼叫
-
負載均衡
-
斷路器
-
分布式訊息
-
配置中心
-
鏈路監控
所以,spring cloud提供了一些解決這類問題的工具,比如服務注冊提供了Eureka/Consoul/zookeeper;遠程呼叫基于RestTemplate針對http協議呼叫的封裝;負載均衡采用Ribbon、斷路器采用hystrix;分布式訊息基于kafka、rabbitMQ;配置中心基于config;鏈路監控基于sleuth.
但是,從這些組件中,我們發現了一些問題,這些組件并不是spring提供的啊,比如eureka、ribbon、hystrix是netflix開源的,而kafka、zookeeper是一些獨立的組件,和spring似乎沒有關系,沒錯,這就是spring團隊的強大之處,他們很少重復早輪子,而是他們利用別人造好的輪子來進行封裝使得用戶在使用的時候更加方便,
舉個簡單例子,比如最早spring只提供了IOC和AOP的核心功能,而像ORM框架、快取、MVC框架,spring只是提供了一種兼容以及支持,所以當時大家說spring是萬能膠,可以把各種各樣的框架整合進來,
當然,spring也會對一些市面上做得不好的技術進行替代,比如struts2.,我記得當時公司使struts2經常出現各種漏洞,所以spring mvc才被創造出來并且很快代替了struts,成為現在的主流框架,
所以,對于spring cloud來說也是如此,spring cloud并不是一個框架,因為Spring Cloud的核心并沒有實作服務注冊、熔斷、配置中心等功能,它提供了一個標準規范,而Spring Cloud Netflix才是spring Cloud規范的一種實作,
常見的服務組件
? 融合在每個微服務中、依賴其它組件并為其提供服務,
Ribbon,客戶端負載均衡,特性有區域親和、重試機制,
Hystrix,客戶端容錯保護,特性有服務降級、服務熔斷、請求快取、請求合并、依賴隔離,
Feign,宣告式服務呼叫,本質上就是Ribbon+Hystrix
Stream,訊息驅動,有Sink、Source、Processor三種通道,特性有訂閱發布、消費組、訊息磁區,
Bus,訊息總線,配合Config倉庫修改的一種Stream實作,
Sleuth,分布式服務追蹤,需要搞清楚TraceID和SpanID以及抽樣,如何與ELK整合,
? 獨自啟動不需要依賴其它組件,單槍匹馬都能干,
Eureka,服務注冊中心,特性有失效剔除、服務保護,
Dashboard,Hystrix儀表盤,監控集群模式和單點模式,其中集群模式需要收集器Turbine配合,
Zuul,API服務網關,功能有路由分發和過濾,
Config,分布式配置中心,支持本地倉庫、SVN、Git、Jar包內配置等模式
Spring Cloud生態的構建
Spring Cloud的生態是基于spring boot這個微框架來構建的,所以spring cloud可以說是基于spring boot來對其他框架進行整合,那么什么是spring boot或者為什么要基于spring boot來整合呢?
首先,spring boot并不是一個新的技術,它是基于spring框架下對于“約定由于配置(Convention Over Configuration)”理念下的產物,主要是幫助開發人員更容易更快速的創建獨立運行和產品級別的基于spring框架的應用,為什么說springboot是微框架呢?如果大家玩過springboot,那應該很有體會,我們只需要非常少的配置就可以快速構建一個web專案,
而spring boot中并沒有新的技術,如果大家對spring框架比較熟悉,那么在學習springboot的時候會更加容易,
圍繞springboot構建的spring cloud生態下,目前有兩類的比較或的實作,一個是基于netflix、另一個是基于alibaba,
Spring Cloud Alibaba的相關資料
前面一個階段,我們講完了Spring Cloud Alibaba生態中的Dubbo組件,當然,我們沒有基于spring cloud project的形式來講解,而是基于組件的形式形式來講,原因是spring cloud本質上就是對各個組件的集成,
目前Spring Cloud Alibaba這個生態中,已經有相對成熟的體系
-
Dubbo 用于實作高性能Java RPC 通信
-
Nacos 服務注冊發現、配置管理、服務管理
-
Sentinel 流量控制、熔斷降級、系統負載保護
-
RocketMQ 分布式訊息系統,提供低延時的、高可靠的訊息發布與訂閱服務
-
Seata 高性能微服務分布式事務解決方案
-
Alibaba Cloud OSS 阿里云物件存盤服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存盤服務,
-
Alibaba Cloud SchedulerX 阿里中間件團隊開發的一款分布式任務調度產品,支持周期性的任務與固定時間點觸發任務,
-
Alibaba Cloud SMS 覆寫全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道,
在2019年8月1號,spring-cloud-alibaba發布了第一個畢業版本(從范訓器倉庫畢業),發布了V2.1.0.RELEASE版本, 目前最新的的版本是2.2.1.RELEASE,2.2.x 版本適用于 Spring Boot 2.2.x
另外,相比于Spring Cloud Netflix 生態,到2020年,archaus/hystrix/ribbon/zuul/turbine等starter都會進入維護模式,進入維護模式意味著spring cloud團隊不會再向這些模塊中添加新的功能,但是仍然會修復安全問題和一些block級別的bug,只是沒有新的功能迭代了,spring cloud netflix仍然可以繼續使用,
文章鏈接->spring-cloud-netflix-projects-entering-maintenance-mode
進入維護模式的最根本原因還是Netflix對于zuul、ribbon等專案維護投入比較少、所以spring cloud 會在greenwich中把這些專案都進入到維護模式,
當然,這些組件會有相應功能的其他組件代理,有些還在范訓中,有些已經畢業了,比如alibaba這套標準
微服務的整體架構

Spring Cloud Alibaba
提起微服務,不得不提 Spring Cloud 全家桶系列,SpringCloud 是若干個框架的集合,包括 spring-cloud-config、spring-cloud-bus 等近 20 個子專案,提供了服務治理、服務網關、智能路由、負載均衡、斷路器、監控跟蹤、分布式訊息佇列、配置管理等領域的解決方案,
Spring Cloud 通過 Spring Boot 風格的封裝,屏蔽掉了復雜的配置和實作原理,最終給開發者留出了一套簡單易懂、容易部署的分布式系統開發工具包,
Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務解決方案,包含開發分布式應用微服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕松使用這些組件來開發分布式應用服務,
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以將 Spring Cloud 應用接入阿里微服務解決方案,通過阿里中間件來迅速搭建分布式應用系統,
Spring Cloud Alibaba中包含的組件
阿里開源組件
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 運算式)任務調度服務,
Nacos服務注冊中心
Nacos提供了統一配置管理、服務發現與注冊, 其中服務注冊和發現的功能,相當于dubbo里面使用到的zookeeper、 或者spring cloud里面應用到的consoul以及eureka,
服務發現和服務健康監測
Nacos提供了基于RPC的服務發現,服務提供者可以將自身的服務通過原生API或者openApi來實作服務的注冊,服務消費者可以使用API或者Http來查找和發現服務
同時,Nacos提供了對服務的實時監控檢查,當發現服務不可用時,可以實作對服務的動態下線從而阻止服務消費者向不健康的服務發送請求,
配置管理
傳統的配置管理,是基于專案中的組態檔來實作,當出現組態檔變更時需要重新部署,而動態配置中心可以將配置進行統一的管理,是的配置變得更加靈活以及高效,
動態配置中心可以實作路由規則的動態配置、限流規則的動態配置、動態資料源、開關、動態UI等場景
國內比較有名的開源配置中心: Aollo / diamond / disconf
Nacos的整體架構
Nacos的整體架構還是比較清晰的,我們可以從下面這個官方提供的架構圖進行簡單分析,

云原生
云原生從字面意思上來看可以分成云和原生兩個部分,
云是和本地相對的,傳統的應用必須跑在本地服務器上,現在流行的應用都跑在云端,云包含了IaaS,、PaaS和SaaS,
原生就是土生土長的意思,我們在開始設計應用的時候就考慮到應用將來是運行云環境里面的,要充分利用云資源的優點,比如?云服務的彈性和分布式優勢,
> 著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自 `Mic帶你學架構`!
> 如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350680.html
標籤:Java
