spring-cloud概述

單體架構

把業務的所有功能實現都打包在一個war包或者jar包,這種方式就成為單體架構。

比如Spring課程中的博客系統,前端+后端+數據庫實現,都在一個項目中,這種架構就稱為單體架構.

舉個例子:

比如在電商系統中,我們會設計用戶管理,商品管理,訂單管理,支付管理,庫存管理等等這些功能,在早期我們是會把這些模塊都寫在一個web項目中,然后統一部署到一個Web服務器中。

這種架構開發簡單, 部署簡單,?個項?就包含了所有的功能,省去了多個項?之間的交互和調?消耗。直接部署在?個服務器即可。

集群和分布式架構

但是呢,隨著時間的發展,單體機構的弊端就逐漸顯現了,就比如隨著網站的用戶量越來越大,需求也會越來越多,流量也會越來越大,服務可能就會面臨一下問題:

  • 后端服務器的壓力就會越來越大,負載越來越高,甚至出現無法訪問的情況。
  • 業務場景逐漸復雜,為了滿足用戶的需求,單體應用也會越來越大,各個業務代碼之間的耦合度也會越來越高,任何一個問題,可能會導致整個項目重新構建,發布。
  • 一個微小的問題,可能會導致整個應用掛掉。

解決方案:

  1. 橫向:添加服務器,把單臺機器變成多臺機器的集群。
  2. 縱向:把一個應用,按照業務進行拆分,拆分為多個項目,此架構也稱為垂直架構或分布式架構。

舉個例子,方便理解:

比如最開始只有一臺機器,它能承擔1000個用戶,但是后來發展為10000個用戶:

  1. 橫向:擴容機器,從一臺機器,擴容到10臺機器,每臺機器負責1000個用戶。(集群)
  2. 縱向:按照功能進行劃分。(分布式)

集群和分布式

  • **集群(cluster)**是將一個系統完整的部署到多個服務器上,每個服務器都能提供系統的所有服務,多個服務器通過負載均衡調度完成任務,每個服務器稱為集群的節點(node)。

  • 分布式是將一個系統拆分為多個子系統,多個子系統部署在多個服務器上,多個服務器上的子系統協同合作完成一個特定任務。

    舉個生活實例:

    有一個小餐館,剛開始只有一個廚師,這個廚師他負責做飯相關的所有工作,但隨著餐館的生意的好轉,一個廚師忙不過來:

    1. 橫向:再招聘一個廚師,這兩個廚師都可以獨立做飯。

    2. 縱向:廚師的工作分為:洗菜,切菜,配菜,炒菜…..

      就可以單獨招一個配菜師,負責洗菜,切菜,配菜….

    后面生意如果更加好了,就可以再招聘多個配菜師,多個廚師。

集群和分布式的區別和聯系

  1. 從概念上,集群是多個計算機做同樣的事情(可以替代),而分布式是多個計算機做不同的事情(不可替代)。
  2. 從功能上,集群的每一個節點功能是相同的,并且是可以替代的,分布式也是多個節點組成的系統,但是每個節點完成的業務是不同的,一個節點出現問題,這個業務就不可訪問了。
  3. 從關系上,分布式和集群在實踐中,很多時候是互相配合使用的,比如分布式的某一個節點,可能由一個集群來代替。分布式架構大多是建立在集群上的,所以實際的分布式架構設計中并不會把分布式和集群單獨區分,而是統稱為:分布式架構。

微服務架構

在分布式架構下,當部署的服務越來越多,重復的代碼就會越來越多,服務的調用關系也會越來越復雜,我們可以把一些通用的,會被多個上層服務調用的共享業務,提取成獨立的基礎服務,組成一個個微笑的服務,這就是微服務。

微服務,可以理解為“很小的服務”,小到一個服務只對應一個單一的功能,只做一件事,這個服務可以單獨部署運行。

微服務之間可以采用 REST 和 RPC 協議進行通信。(類似http,可以理解為接口的約定)

微服務,也可以理解是分布式架構的一種拓展,這種架構模式下它拆分的粒度更小,服務更獨立,可以理解為:微服務是一種經過良好架構設計的分布式架構方案。

分布式架構和微服務架構:

分布式架構和微服務架構有很多相似之處,例如都強調將系統拆分成多個獨立的模塊,多個模塊可以部署在不同的服務器上等。不過兩者也存在一些區別:

基本概念

  • 分布式架構:一種將系統分解成多個子系統、模塊或組件,并將它們分布到不同的計算節點上運行的架構風格。這些節點可以是物理服務器、虛擬機或容器等,節點之間通過網絡進行通信,以協同完成業務功能。(服務拆分,拆了就行)
  • 微服務架構:一種特定的分布式架構風格,將一個大型復雜應用分解成多個小型、獨立、松耦合的服務,每個服務專注于特定的業務功能,并且可以獨立開發、部署和擴展。

服務粒度

  • 分布式架構:服務粒度可以是較大的模塊或子系統,例如按業務模塊劃分的用戶模塊、訂單模塊、支付模塊等。
  • 微服務架構:服務粒度更小,通常聚焦于單一的業務功能,例如用戶服務中的用戶注冊服務、用戶登錄服務等。

服務耦合度

  • 分布式架構:服務之間的耦合度相對較高,因為它們共同組成一個完整的系統,往往需要緊密協作。例如,分布式架構中的服務之間可能共享數據庫或數據模型。
  • 微服務架構:服務之間保持較低的耦合度,每個服務獨立運行,有自己獨立的數據庫和數據模型,服務之間的交互通過輕量級通信協議進行。

數據管理

  • 分布式架構:數據管理方式取決于具體的分布式架構設計,可以是集中式的數據庫,也可以是分布式數據庫等。
  • 微服務架構:采用去中心化的數據管理方式,每個微服務都有自己的數據庫和數據模型,數據的訪問和操作都在服務內部進行。

部署方式

  • 分布式架構:部署方式可以是集中式或分布式,多個子系統或模塊可以部署在同一個服務器或不同的服務器上,部署方式相對較為靈活。
  • 微服務架構:通常采用容器化技術(如Docker、Kubernetes等)進行部署,每個微服務可以獨立部署在容器中,容器之間的隔離性和獨立性較好。

分布式架構側重于壓力的分散,強調的是服務的分散化,微服務側重與能力的分散,更強調服務的專業化和精細分工,從實踐的角度來看,微服務架構通常是分布式服務架構,反之則未必成立,所以,選擇微服務通常意味著需要解決分布式架構的各種難題。

<aside> 💡

注意:對于架構的發展,從單體架構 → 垂直架構 → 分布式架構 → 微服務架構。

所有的架構都是為了更好的服務產品,合適的才是最好的。

</aside>

微服務帶來的挑戰

隨著產品的復雜性和流量的增加, 技術架構也在不斷的發?變化. 不論是早期的單體架構, 還是現在?泛使?的微服務架構, 都是為了更好的服務產品, 解決問題.

微服務架構帶來好處的同時, 也?臨著?些挑戰, 從單體服務轉向微服務意味著管理更加復雜. 接下來我們從優勢和挑戰兩個??分析?下微服務架構

優勢

  • 易開發和維護. 每個微服務負責的業務?較清晰, 體量?, 開發和維護成本降低。
  • 容錯性?,?個服務發?故障, 可以使故障隔離在單個服務中, 不影響整體服務故障。
  • 擴展性好,每個服務都是獨?運?的, 我們可以結合項?實際情況進?擴展, 按需伸縮。
  • 技術選型靈活,每個微服務都是單獨的團隊來運維,可以根據業務特點和團隊特點,選擇適合的技術棧。

挑戰 雖然微服務具備很多的優勢, 但由于服務數的增加, 服務治理也是我們?臨的巨?挑戰。

  • 服務依賴,隨著服務的數量增多, 服務之間的關系也會變得更加復雜. ?個服務的更改, 需要考慮對其他服務的影響。
  • 運維成本. ?個業務流程會涉及多個微服務共同完成, 有更多的服務需要編譯, 部署, 運?, 甚?可能是不同的編程語?, 不同的運?環境, 當然也需要集群來處理故障轉移等. 這對于運維?員??, 挑戰是巨?的。
  • 開發和測試. ?個業務流程可能涉及多個微服務共同完成, 服務調?引??絡延遲, 不可靠的?絡, 如何進?容錯處理等問題. 這對開發和測試??, 難度也會提升。
  • 服務監控. 在?個單體結構中, 很容易實現服務的監控. 因為所有功能都在?個服務中, 微服務架構 下, 不僅需要對整個鏈路進?監控, 還需要對每?個服務實現監控。
  • 負載均衡. 微服務架構中的服務實例數量可能?常龐?,因此需要有效的服務發現和負載均衡機制來管理請求流量和保證?可?性。
  • ….

微服務解決?案- Spring Cloud

什么是Spring Cloud

看一下官網是怎么說的:Spring Cloud

Spring Cloud 提供了?些可以讓開發?員快速構建分布式服務的?具, ?如配置管理, 服務發現, 熔斷,智能路由等.。他們可以在任何分布式環境中很好的?作。

簡單來說,Spring Cloud就是分布式微服務架構的一站式解決方案,是微服務架構落地的多種技術的集合。

?如:

  • Distributed/versioned configuration 分布式版本配置
  • Service registration and discovery 服務注冊和發現
  • Routing 路由
  • Service-to-service calls 服務調?
  • Load balancing 負載均衡
  • Circuit Breakers 斷路器
  • Distributed messaging 分布式消息
  • ....

<aside> 💡

Spring Cloud 并不是Spring 團隊研發的框架, 它只是把?些?較優秀的解決微服務架構中常 ?問題的開源框架基于SpringCloud規范進?了整合, 并基于SpringBoot的?格,對這些組件 進?封裝, 屏蔽掉了復雜的配置和實現原理. 為開發者提供了開箱即?的微服務開發體驗. 這些開源技術的框架是由各個公司來維護的. Spring Cloud 就是這些微服務的?管家.

</aside>

就可以理解為:

買房之后需要裝修,裝修時,需要買家電,電視,空調,洗衣機,冰箱等。然后這個時候來了一個企業,出了一些套餐:

套餐一:電視1 + 空調1 + 洗衣機2 + 冰箱3,

套餐二:電視2 + 空調1 + 洗衣機2 + 冰箱4

……..

Spring Cloud就類似這個企業

Spring Cloud和SpringBoot的版本對應關系

由于Spring Cloud的所有子項目都依賴SpringBoot,所以SpringBoot和SpringCloud的版本之間也存在一定的對應關系。

這邊建議一一對應版本信息,如果不對應的話后續可能會出現一些版本問題上的錯誤。

SpringCloud的實現方案

在SpringCloud的規范下,有很多實現,其中最為出名的是:

  • Spring Cloud Netflix
  • Spring Cloud Alibaba

Spring Cloud Netflix

SpringCloudNetflix是NetflixOSS(NetflixOpenSourceSoftware)在SpringCloud規范下的實現。

包含的組件及其主要功能大致如下:

  • Eureka: 服務注冊和發現
  • Zuul: 服務?關
  • Ribbon: 負載均衡
  • Feign: 服務調?組件
  • Hystrix: 斷路器, 提供服務熔斷和限流
  • Hystrix Dashboard: 監控?板
  • ……….

在很?的?段時間?, Spring Cloud ?度被泛指 Spring Cloud Netflix. Spring Cloud?直以來把 Netflix OSS 套件作為其官?默認的?站式解決?案. 然?, Netflix公司在2018年前后宣布其核?組 件Hystrix、Ribbon、Zuul等均進?維護狀態, Spring Cloud 也被迫宣布刪除這些維護模塊.

<aside> 💡

spring-cloud-netflix 并沒有從Spring Cloud的依賴中完全刪除, 只是從2020.0版本起, 他只管 理Eureka

</aside>

Spring Cloud Netflix 在很多公司都有?規模使?, ?旦停?更新, 短期看影響不?, 但?期顯然是不合 適的, Spring Cloud官?也提供了?些替換建議。

Netflix推薦替代品說明
HystrixResilience4jHystrix也推薦大家使用Resilience4j代替自己
Hystrix Dashboard / TurbineMicrometer + Monitoring System說白了,監控這件事交給更專業的組件去做
RibbonSpring Cloud Loadbalancer忍不住了,Spring終究親自出手
Zuul 1Spring Cloud Gateway忍不住了,Spring終究親自出手
Archaius 1Spring Boot外部化配置 + Spring Cloud配置比Netflix實現的更好、更強大

Spring Cloud Alibaba

Spring Cloud Alibaba是阿里巴巴基于Spring Cloud生態推出的一站式微服務解決方案?,集成了阿里巴巴的開源中間件和云服務組件,提供分布式應用開發、服務治理、配置管理等核心功能,是Spring Cloud第二代實現的主要組成部分。??它填補了Spring Cloud Netflix停更后的空白,成為當前主流的微服務實現方案。??主要由 Nacos、Sentinel、Seata 等組件組成。

Spring Cloud 實現對?

功能SpringCloud官方Spring Cloud NetflixSpring Cloud Alibaba
服務注冊/發現EurekaEurekaNacos
服務調用OpenFeignFeignDubbo
配置中心SpringCloudConfigArchaiusNacos
服務網關SpringCloudGatewayZuulSpringCloudGateway
負載均衡SpringCloud LoadBalanceRibbonDubbo

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

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

相關文章

android ROOM kotlin官方文檔完全學習

android ROOM kotlin官方文檔完全學習2.6 使用 Room 將數據保存到本地數據庫 | Android Developers (google.cn) 一、簡介 1.1 引入 dependencies {def room_version "2.6.1"implementation "androidx.room:room-runtime:$room_version"//如下三選一a…

DOM編程全解析:操作、事件與存儲實戰指南

引言&#xff1a;DOM——JavaScript與網頁交互的橋梁 DOM&#xff08;文檔對象模型&#xff09; 是JavaScript操作HTML/XML文檔的接口&#xff0c;它將網頁文檔抽象為一個樹形結構&#xff0c;允許開發者通過API動態修改文檔的內容、結構和樣式。無論是實現動態交互&#xff0…

Ansible命令

Ansible命令 ansible 常用命令 /usr/bin/ansible   #Ansibe AD-Hoc 臨時命令執行工具&#xff0c;常用于臨時命令的執行 /usr/bin/ansible-doc    #Ansible 模塊功能查看工具 /usr/bin/ansible-galaxy   #下載/上傳優秀代碼或Roles模塊 的官網平臺&#xff0c;基于網…

SY6974芯片添加enable充電控制節點

1. 需求描述項目背景&#xff1a;基于 Qualcomm MDM9x07 平臺的 4G MIFI 產品&#xff0c;使用 Silergy 公司的 SY6974 充電 IC需求內容&#xff1a; 在環境 /sys/class/power_supply/sy6794/enable 下增加一個 sysfs 節點&#xff0c;用于控制是否允許充電&#xff1a;cat /sy…

趣玩-Ollama-Llm-Chatrbot

軟件說明 這個軟件本人是從零開始實現的聊天機器人。基于Ollama&#xff08;PythonApi &#xff09; Pyside&#xff0c;實現了聊天機器的基本功能&#xff0c;還有一些個性化的功能比如模型管理&#xff0c;敏感詞過濾&#xff0c;個性化主題設置&#xff0c;頭像設置等功能。…

在mac 上zsh 如何安裝最新的 go 工具

文章目錄方法一&#xff1a;使用 Homebrew&#xff08;推薦&#xff09;方法二&#xff1a;從官網下載安裝包方法三&#xff1a;使用 g&#xff08;Go 版本管理器&#xff09;方法四&#xff1a;使用 gvm&#xff08;Go Version Manager&#xff09;驗證安裝和配置常用 Go 工具…

(十九)深入了解 AVFoundation-編輯:使用 AVMutableVideoComposition 實現視頻加水印與圖層合成(上)——理論篇

一、引言在短視頻、Vlog、剪輯工具日益流行的今天&#xff0c;給視頻添加 Logo、水印、時間戳或動態貼紙&#xff0c;已經成為非常常見的功能需求。這類效果看似簡單&#xff0c;其實背后都涉及到“圖層合成”的處理&#xff1a;如何將一個靜態或動態的圖層&#xff08;如文字、…

Android NDK與JNI深度解析

核心概念定義&#xff1a;NDK (Native Development Kit): 是什么&#xff1a; 一套由 Google 提供的工具集合。目的&#xff1a; 允許 Android 開發者使用 C 和 C 等原生&#xff08;Native&#xff09;語言來實現應用程序的部分功能。包含內容&#xff1a; 交叉編譯器&#xf…

Golang各版本特性

1. Go各版本特性 | FeelingLife 2. https://chatgpt.com/share/68808f58-ae5c-800a-8153-5358098f301b 3.https://tonybai.com/2024/11/14/go-map-use-swiss-table/

HTML 轉 Word API 接口

HTML 轉 Word API 接口 支持網頁轉 Word&#xff0c;高效轉換為 Word&#xff0c;提供永久鏈接。 1. 產品功能 超高性能轉換效率&#xff1b;支持將傳遞的 HTML 轉換為 Word&#xff0c;支持 HTML 中的 CSS 格式在 Word 文檔中的呈現&#xff1b;支持傳遞網站的 URL&#xff…

Lucid Search: 極簡、隱私友好的問答式搜索引擎技術解析

Lucid Search: 極簡、隱私友好的問答式搜索引擎技術解析 產品定位與價值主張 Lucid Search 是一款革命性的問答式搜索引擎&#xff0c;其核心價值在于&#xff1a; 極簡體驗&#xff1a;無賬戶、無廣告、前端完全靜態隱私保護&#xff1a;不寫入 Cookie、不記錄 IP、無追蹤即…

卷積神經網絡:模型評估標準

一、分類模型評價指標在模型評估中&#xff0c;有多個標準用于衡量模型的性能&#xff0c;這些標準包括準確率&#xff08;Accuracy&#xff09;、精確率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、F1 分數&#xff08;F1-Score&#xff09;等…

【前端工程化】前端開發中想做好發布管理可以從哪些方面著手?

在企業級后臺系統中&#xff0c;發布管理是整個開發流程的最終環節&#xff0c;也是最為關鍵的一環。它不僅涉及代碼構建完成后的部署操作&#xff0c;還包括版本控制、灰度發布、回滾機制等保障系統穩定性的措施。 本文主要圍繞發布流程設計、版本控制、部署方式、灰度策略和回…

替分布式=成本下降50% !

在數字化轉型的浪潮中&#xff0c;數據庫作為醫療信息系統的“心臟”&#xff0c;其穩定性與效率直接關乎醫療服務的質量。2024年10月30日&#xff0c;綿陽市第三人民醫院集成平臺的CDR數據庫成功從分布式數據庫Citus切換為國產集中式數據庫KingbaseES&#xff0c;并穩定運行至…

【Linux系統編程】基礎指令

基礎指令1. adduser指令&&passwd指令2. userdel指令3. pwd指令4. ls指令5. cd指令6. tree指令7. touch指令8. mkdir指令9. rmdir指令&&rm指令10. man指令11. cp指令12. mv指令13. cat指令14. more指令15. less指令16. head指令17. tail指令18. date指令19. cal…

區塊鏈之以太坊Hardhat開發框架——部署在windows為例

Hardhat 提供了一個靈活且易于使用的開發環境&#xff0c;可以輕松地編寫、測試和部署智能合約。Hardhat還內置了Hardhat 網絡&#xff08;Hardhat Node&#xff09;&#xff0c;它是為開發而設計的本地以太坊網絡。 下面是hardhat的官方文檔 https://hardhat.org/hardhat-ru…

Ubuntu 1804 編譯ffmpeg qsv MediaSDK libva 遇到的問題記錄

之前都是 用的xeon服務器的cpu 不支持intel QSV 硬件加速 最近把自己的 14年買的pc機裝上了ubuntu 1804 然后準備開啟ffmpeg qsv 硬件加速功能 CPU i3-4170 內存DDR3 16G 硬盤機械盤500G 主板ASUS B85M-G首先安裝vainfo工具apt install vainfo裝完提示如下出錯了 網上說是…

Elasticsearch(ES)介紹和安裝

目錄 一、Elasticsearch(ES)介紹 1.為什么需要單獨的搜索服務 2.全文檢索 3.Elasticsearch簡介 1.Elasticsearch的特點 2.應用場景 3.ElasticSearch數據的存儲和搜索原理 二、Elasticsearch(ES)安裝 1、拉取鏡像 2、創建目錄并給目錄賦權 3、創建并編輯配置文件 4、…

html結構解析

<!DOCTYPE html>&#xff1a;聲明為 HTML5 文檔 <html lang"zh-CN">&#xff1a;根元素&#xff0c;指定頁面語言為中文 <meta charset"UTF-8">&#xff1a;設置字符編碼&#xff0c;確保中文正常顯示 <meta name"viewport"…

面試150 最大子數組和

思路 貪心法&#xff1a;設定最小標志result為float(‘-inf’),遍歷一次數組元素進行求和&#xff0c;如果當前元素大于result&#xff0c;則更新result的值&#xff0c;如果sum小于0&#xff0c;則重新置0進行計算&#xff0c;最后返回result class Solution:def maxSubArray(…