《Spring Cloud Alibaba 從入門到實戰》理論知識篇

基礎知識篇

理論篇

俗話說,沒有最好的架構,只有最合適的架構

微服務架構也是隨著信息產業的發展而出現的最有普遍適用性的一套架構模式。

通常來說,我們認為架構發展歷史經歷了這樣一個過程:單體架構 -> SOA 面向服務架構 -> 微服務架構

單體架構

MVC 架構以及由此衍生出來各種多層架構如下圖所示:

image-20230918164349391

優點

在程序規模不大,開發人員很少的時候,下面的幾點是非常顯著的:

  1. 開發簡單。單體應用的結構,天然決定了所有代碼都集中在一起,開發者不需要在多個應用之間來回跳轉來尋找其中的調用邏輯。
  2. 測試簡單。所有代碼都在一個應用里,測試人員可以很方便的做到端到端的測試(當然,很多時候測試人員就是開發者自己)。
  3. 部署簡單。因為一個應用就是產品功能的全集,所以在部署的時候,只需要不是一款應用即可。即使是集群部署,也不會增加多少復雜度:只需要將應用部署多份即可。
  4. 開發迅速。上面的各種簡單,帶來的就是軟件功能可以快速實現。很多時候,實現需求的速度是項目成功與否的決定性因素。

所以,在開發簡單和獨立的產品時,單體架構依然是第一優先選擇。

弊端

隨著功能的持續增加、團隊規模的不斷擴大,我們很快就會發現單體應用的弊端:

  1. 應用膨脹。所有代碼都在一個應用里,導致應用的代碼量迅速上升,對于開發者來說,經常需要在海量的代碼里找到自己需要維護的哪一行,這種體驗往往是令人崩潰的。同時,對于 IDE 來說,一個應用內大量代碼也會嚴重拖慢其運行效率。
  2. 團隊合作沖突。這種沖突會體現在多個方面:開發階段,很容易由于修改相同的代碼導致代碼沖突。部署階段,又會因為“運行環境里跑的是誰的分支”而造成新的沖突。所有的這些沖突將會嚴重影響到團隊的合作效率。
  3. 運行效率 & 穩定性。單體應用,由于邏輯都集中在一起,啟動時需要完成所有的初始化工作;同時單一功能的問題也會因為運行在一個進程內,從而導致整個應用宕機。

SOA 架構

SOA 是 Service-Oriented Architecture 的簡寫,直譯為“面向服務的架構”。

核心思想是:將系統的功能解構為一系列服務。

與單體架構按照技術職責進行水平拆分不同,SOA 會按照業務領域對應用進行粗粒度的垂直拆分

垂直拆分帶來的問題

應用從單體應用做了垂直拆分以后,就會變成一些相對獨立的應用。此時,應用間的依賴、調用等相關問題自然而然的就會浮現出來。此時就需要下面這些技術方案來解決這些問題:

  1. XML – 一種標記語言,用于以文檔格式描述消息中的數據。
  2. SOAP(Simple Object Access Protocol)-- 在計算機網絡上交換基于 XML 的消息的協議,通常是用 HTTP。
  3. WSDL(Web Services Description Language,Web 服務描述語言)-- 基于 XML 的描述語言,用于描述與服務交互所需的服務的公共接口,協議綁定,消息格式。
  4. UDDI(Universal Description, Discovery, and Integration,是統一描述、發現和集成) – 基于 XML 的注冊協議,用于發布 WSDL 并允許第三方發現這些服務。
  5. ESB(Enterprise Service Bus, 企業服務總線)-- 支持異構環境中的服務、消息,以及基于事件的交互,并且具有適當的服務級別和可管理性。

典型 SOA 架構模式圖

在這里插入圖片描述

弊端以及不足

  1. 高門檻。ESB 本身就是一套非常復雜的系統,通過 ESB 落地 SOA ,對開發人員的要求很高。甚至還會需要廠商參與;
  2. 廠商綁定。由于缺乏統一保準,不同廠商的解決方案之間很難做切換。
  3. 不適應云環境。在如今的互聯網時代,速度就是一切。由此誕生了敏捷開發、持續集成等在不同節點提升業務上線速度的辦法。但是方向是不一致的。
  4. 中心化。雖然應用本身實現了分布式與水平擴展,但是 ESB 卻成了系統的中樞神經。

微服務架構

直接從【SOA、微服務】這兩者的區別入手來理解到底什么是微服務:

傳統 SOA微服務
通信方式基于 ESB,SOAP、W SDL 等重協議點對點通信,開放式協議,如 RESTful、gR PC、或者是輕量級的二進制協議。
數據管理全局數據模型以及共享存儲每個服務獨立模型和存儲
服務粒度較粗較細
誕生的背景企業級應用互聯網
解決的問題面向企業內,系統集成面向最終產品,解決擴展,維護的問題

通信手段、數據等的不同只是表象,其本質區別還是由于兩者誕生于不同歷史時期,需要解決的問題域不同。

  • SOA 解決的核心問題是復用
  • 而微服務解決的核心問題是擴展

微服務的幾個重要概念

  1. 一套小服務
  2. 獨立進程
  3. 輕量級通信協議
  4. 可獨立部署
  5. 多語言 & 不同儲技術

微服務架構圖

在這里插入圖片描述

要考慮的問題(主要包括但不限于):

  1. 通過服務實現組件化
  2. 根據業務組織系統
  3. 做產品而不是做項目
  4. 簡單高效的通信協議
  5. 自動化基礎設施
  6. 面向失敗的設計
  7. 具備進化能力的設計

今天我們所說的【微服務】是一個龐大且復雜的概念集合,它既是一種架構模式,也是實現這種架構模式時所使用的技術方案的集合。

框架篇

Spring

在 Spring 框架的早期,大家都喜歡稱其為【輕量化】框架,【輕量】是相對于 EJB 等企業級開發框架而言的。

其【輕】的特性體現在:

  1. 框架本身的大小很小,早期版本的 jar 包不超過 1MB;
  2. 同時不依賴于運行容器,也是說任何容器里都可以運行 Spring 框架;
  3. 更加重要的是 Spring 是非侵入的,使用 Spring 開發的應用可以不完全依賴 Spring 的類。

SpringBoot

使用 Spring Boot 可以大大簡化 Spring 應用的開發工作。

在 Spring Boot 中無論是官方組件還是第三方框架都會提供各種【starter】來方便開發者進行依賴和集成。

由于采用了 “約定大于配置” 的思想,開發者在引入 “stater” 以后只需要做少量的配置工作就可以完成框架集成工作。

往往開發者只需要很少量的代碼就可以實現以前大量配置文件才能做到的功能。

Spring 官方對 Spring Boot 特色定義如下:

  1. 創建獨立的 Spring 應用程序
  2. 直接嵌入 Tomcat,Jetty 或 Undertow(無需部署 WAR 文件)
  3. 提供自以為是的 “starter” 依賴項,以簡化構建配置
  4. 盡可能自動配置 Spring 和三方類庫
  5. 提供可用于生產的功能,例如指標,運行狀況檢查和外部化配置
  6. 完全沒有代碼生成,也不需要 XML 配置

Spring Cloud

“分布式系統中的常見模式” 給了 Spring Cloud 一個清晰的定位,即“模式”。也就是說 Spring Cloud 是針對分布式系統開發所做的通用抽象,是標準模式的實現。

Spring 官方給出的一個 Height Light 的架構圖:

在這里插入圖片描述

結論:Spring Cloud 是以微服務為核心的分布式系統的一個構建標準。

Spring Cloud Alibaba

既然說 Spring Cloud 是標準,那么自然少不了針對標準的實現。

參與這個標準的實現有很多,比如:

  1. Google 的 Spring Cloud GCP
  2. Netflix 的 Spring Cloud Netflix
  3. Microsoft 的 Spring Cloud Azure
  4. 阿里巴巴的 Spring Cloud Alibaba

介紹圖

在這里插入圖片描述

圖中深色的部分,其實它就是 Spring Cloud 標準,一共有 3 層。

  1. 中間顏色最深的部分就是及整個微服務最核心的內容,包括了 “RPC 調用” 以及 “服務注冊與發現”。
  2. 第二層,也就是圍繞著核心的這一圈,是一些輔助微服務更好的工作功能,包括了負載均衡、路由、網關、斷路器,還有就是追蹤等等這些內容。
  3. 再外層的話,主要是些分布式云環境里的通用能力。

最外面這一圈,是 Spring Cloud Alibaba 對 Spring Cloud 的實現。

  • 右上部分是 對于 Spring Cloud 標準的實現。例如,我們通過 Dubbo 實現了 RPC 調用功能,通過 Nacos 實現了“服務注冊與發現”、“分布式配置”,通過 Sentinel 實現了斷路器等等。
  • 左下部分是我們 Spring Cloud Alibaba 對阿里云各種服務的集成

為什么要加上【集成】這一部分呢?

因為在實際生產過程中,單獨使用微服務框架其實并不足以支撐我們去構建一個完整的系統。所以這部分是用阿里幫助開發者完成微服務以外的云產品集成的功能。

包含組件

目前,Spring Cloud Alibaba 包含如下組件:

開源部分

  1. Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  2. Nacos:一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
  3. RocketMQ:一款開源的分布式消息系統,基于高可用分布式集群技術,提供低延時的、高可靠的消息發布與訂閱服務。
  4. Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架。
  5. Seata:阿里巴巴開源產品,一個易于使用的高性能微服務分布式事務解決方案。

平臺服務部分

  1. Alibaba Cloud OSS: 阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
  2. Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務調度服務。
  3. Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力, 幫助企業迅速搭建客戶觸達通道。

工具篇

Java 工程腳手架

訪問地址:云原生應用腳手架

Sandbox 沙箱環境

Sandbox 沙箱環境,為開發者帶來一套快速上手、免除任何環境依賴、免費、便捷的 開發&運行環境。允許開發者在上面查看、修改、部署示例代碼,并且由平臺提供相關運行資源。

觸達通道。

工具篇

Java 工程腳手架

訪問地址:云原生應用腳手架

Sandbox 沙箱環境

Sandbox 沙箱環境,為開發者帶來一套快速上手、免除任何環境依賴、免費、便捷的 開發&運行環境。允許開發者在上面查看、修改、部署示例代碼,并且由平臺提供相關運行資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208214.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot智慧導診系統源碼:根據患者癥狀匹配掛號科室

一、系統概述 醫院智慧導診系統是在醫療中使用的引導患者自助就診掛號,在就診的過程中有許多患者不知道需要掛什么號,要看什么病,通過智慧導診系統,可輸入自身疾病的癥狀表現,或選擇身體部位,在經由智慧導診…

微型5G智能網關助力打造智能清潔機器人

智能機器人不斷融入我們的生活,提供了越來越多樣化的服務,例如專用于衛生清潔的機器人,就已經廣泛應用于酒店、體育館、大型商場、寫字樓、工地等各種場景,相較于人工,機器人在此類具有高度重復性、勞動量大的工作中具…

C++作業6

以下是一個簡單的比喻,將多態概念與生活中的實際情況相聯系: 比喻:動物園的講解員和動物表演 想象一下你去了一家動物園,看到了許多不同種類的動物,如獅子、大象、猴子等。現在,動物園里有一位講解員&…

用23種設計模式打造一個cocos creator的游戲框架----(五)工廠方法模式

1、模式標準 模式名稱:工廠方法模式 模式分類:創建型 模式意圖:定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 結構圖: 適用于: 1、當一個類不知道它…

failed to install plugin grafana 插件安裝失敗

升級時忽略plugins 權限問題,導致安裝插件失敗!調整權限即可

042:el-table表格表頭自定義高度(親測好用)

第042個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下,本專欄提供行之有效的源代碼示例和信息點介紹,做到靈活運用。 (1)提供vue2的一些基本操作:安裝、引用,模板使…

Shrio 安全框架

目錄 前言 1.介紹 2.整合 Shiro 到 Spring Boot 3.Shiro 相關配置 總結 前言 幾乎所有涉及用戶的系統都需要進行權限管理,權限管理涉及到一個系統的安全。Spring Boot 的安全框架整合方案中還有一個璀璨的明珠:Shrio。 1.介紹 Shiro是一款由Java 編…

信道復用技術

目錄 一、頻分復用FDM(Frequency Division Multiplexing) 二、波分復用 WDM(Wavelength Division Multiplexing) 三、時分復用TDM(Time Division Multiplexing) 四、統計時分復用 STDM(Statisti…

雙通道5V高細分步進電機驅動芯片應用于搖頭機,X,Y控制,聚焦控制,CAMERA云臺控制等產品上的芯片選型分析

雙通道5V高細分步進電機驅動芯片GC6106,GC6107,GC6119,GC6151,GC6236,GC6225,GC6129,電壓范圍3~5.5V,最大持續電流可達0.6A左右。可應用于搖頭機,X,Y控制,聚焦…

安裝vue環境

1.Hello Vue.js <script src"https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>/*引入js文件 */ <script> new Vue({ /* 創建一個對象&#xff0c;兩個屬性。 */ el: #app, data: { message: Hello Vue.js! }, methods: { details: f…

C++使用模板的注意事項

兩點注意事項 自動推導類型&#xff0c;必須推導出一致的數據類型T&#xff0c;才可以使用模板必須要確定出T的數據類型&#xff0c;才可以使用 #include<iostream> using namespace std;//第一點必須一致的數據類型 template <class T> void myswap(T& a, T…

基于AIS數據的船舶密度計算與規律研究

參考文獻&#xff1a;[1]陳曉. 基于AIS數據的船舶密度計算與規律研究[D].大連海事大學,2021.DOI:10.26989/d.cnki.gdlhu.2020.001129. 謝謝姐姐的文章&#xff01; 網格化AIS數據 網格化 AIS 數據是處理和分析船舶軌跡數據的一種有效方法&#xff0c;特別是當涉及到密度計算和…

C++_對C數據類型的擴展

結構體 c中定義結構體變量&#xff0c;可以省略struct關鍵字 c結構提重可以直接定義函數&#xff0c;謂之成員函數&#xff08;方法&#xff09; #include <iostream> using namespace std; struct stu {int num;char name[24];void price(void) {cout << "…

Vue3+Antd實現彈框顯示內容并加入復制按鈕

使用Vue3antd實現點擊彈框出現內容并可復制內容的功能&#xff1a; HTML部分&#xff1a; <a-button type"primary" click"showModel">打開彈框 </a-button><!-- ok 是彈框中確定按鈕的操作&#xff0c;cancel 是彈框中取消按鈕的操作 --…

Redis數據已經刪除了,為什么內存占用還是很高?

Redis數據已經刪除了&#xff0c;為什么內存占用還是很高&#xff1f; Redis做了數據刪除操作&#xff0c;為什么使用top命令時&#xff0c;還是顯示Redis占了很多內存&#xff1f; 沒做相關功課的人覺得這個問題有問題&#xff0c;刪了數據還說占著內存&#xff0c;面試官不…

【學一點兒前端】真機調試本地公眾號網頁項目

前言 微信公眾號網頁開發的真機調試一直是很頭疼的事情。 原因一 微信公眾號配置的JS安全域名只有三個&#xff0c;一個大中型的公眾號這三個JS安全域名都是生產的域名&#xff0c;不可能預留域名用于開發和調試。 原因二 在微信里面只有訪問正確的安全域名才能調用wx.config用…

vuepress-----18、圖片縮放

圖片引入兩種方式 地址 # 圖片縮放插件 # 實戰 md文件引入圖片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安裝配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示

AI:89-基于卷積神經網絡的遙感圖像地物分類

?? 本文選自專欄:人工智能領域200例教程專欄 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶有在本地跑過的核心代碼,詳細講解供大家學習,希望可以幫到大家。歡迎訂閱支持,正在不斷更新…

MVCC是什么

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一波電子書籍資料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虛擬機》&#xff0c;《重構改善既有代碼設計》&#xff0c;《MySQL高性能-第3版》&…

ChibiOS簡介1/5

ChibiOS簡介1/5 1. 源由2. ChibiOS基礎知識1/52.1 Chapter 1 - Introduction2.1.1 Priciple&#xff08;設計原則&#xff09;2.1.2 Fundamental requirements&#xff08;基本需求&#xff09; 2.2 Chapter 2 - Real Time Systems Concepts2.2.1 System&#xff08;系統&#…