主頁 > 後端開發 > 詳細剖析Spring Cloud 和Spring Cloud Alibaba的前世今生

詳細剖析Spring Cloud 和Spring Cloud Alibaba的前世今生

2021-11-07 06:06:39 後端開發

我們知道spring cloud可以用來開發微服務,但是應該很少有人真正知道Spring Cloud是什么,

官方的解釋是:spring cloud提供了一些可以讓開發者快速構建分布式應用的工具,這些服務可以很好的作業在任何分布式環境下,

既然提供的是一些快速構建微服務應用的工具,那么我們需要了解微服務開發程序中需要解決哪些問題?

  1. 服務注冊發現

  2. 遠程服務呼叫

  3. 負載均衡

  4. 斷路器

  5. 分布式訊息

  6. 配置中心

  7. 鏈路監控

所以,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,服務注冊中心,特性有失效剔除、服務保護,

DashboardHystrix儀表盤,監控集群模式和單點模式,其中集群模式需要收集器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這個生態中,已經有相對成熟的體系

  1. Dubbo 用于實作高性能Java RPC 通信

  2. Nacos 服務注冊發現、配置管理、服務管理

  3. Sentinel 流量控制、熔斷降級、系統負載保護

  4. RocketMQ 分布式訊息系統,提供低延時的、高可靠的訊息發布與訂閱服務

  5. Seata 高性能微服務分布式事務解決方案

  6. Alibaba Cloud OSS 阿里云物件存盤服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存盤服務,

  7. Alibaba Cloud SchedulerX 阿里中間件團隊開發的一款分布式任務調度產品,支持周期性的任務與固定時間點觸發任務,

  8. 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這套標準

微服務的整體架構

image-20211106212414676

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的整體架構還是比較清晰的,我們可以從下面這個官方提供的架構圖進行簡單分析,

nacos_arch.jpg

云原生

云原生從字面意思上來看可以分成原生兩個部分,

云是和本地相對的,傳統的應用必須跑在本地服務器上,現在流行的應用都跑在云端,云包含了IaaS,、PaaS和SaaS,

原生就是土生土長的意思,我們在開始設計應用的時候就考慮到應用將來是運行云環境里面的,要充分利用云資源的優點,比如?云服務的彈性分布式優勢,

img > 著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自 `Mic帶你學架構`! > 如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!

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

標籤:Java

上一篇:git沒有提交的代碼如何遷移到新建分支

下一篇:QuantumTunnel:內網穿透服務設計

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more