【SpringCloud】概述 -- 微服務入門

在Java的整個學習過程中,大家勢必會聽見一些什么分布式-微服務、高并發、高可用這些專業術語,給人的感覺很高級,有一種高深莫測的感覺。可以看一下這篇博客對這些技術架構的演變有一個初步的認識:

服務端?并發分布式結構演進之路-CSDN博客文章瀏覽閱讀950次,點贊11次,收藏9次。在進行技術學習過程中,由于大部分讀者沒有經歷過一些中大型系統的實際經驗,導致無法從服務端?并發分布式結構演進之路-----在進行技術學習過程中,由于大部分讀者沒有經歷過一些中大型系統的實際經驗,導致無法從全局理解一些概念,所以本文以一個"電子商務"應用為例,介紹從一百個到千萬級并發情況下服務端的架構的演進過程,同時列舉出每個演進階段會遇到的相關技術,讓大家對架構的演進有一個整體的認知,方便大家對后續知識做深入學習時有一定的整體視野。https://blog.csdn.net/qq_45875349/article/details/139639760?spm=1001.2014.3001.5501在學習Spring Cloud 之前,我們先來了解下什么是微服務,以及微服務的發展史.在架構發展的過程中,項目開發遇到了哪些問題,以及Spring Cloud是用來解決什么問題的,這些概念上的有助于對后續發開的深刻理解。其實在上面的博客中已經敘述了關于架構的發展過程。

1. 什么是微服務?

1.1 單體架構

對于一個系統來說,將前端+后端+數據庫這些所有的業務都打包在一個項目中,就是單體架構。

比如大家都很熟悉的電商系統為例,電商系統包括:用戶管理,商品管理,訂單管理,支付管理,庫存管理,物流管理等等,項目早期我們會把這些模塊都寫在一個web項目中,然后統一部署到一個Web服務器中。

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

1.2 集群和分布式架構

當我們的系統服務的用戶越來越多的時候,用戶量逐漸增加、我們的服務面臨的壓力也逐漸增加。可能會面臨一些問題:

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

這時候我們一般會從兩個角度進行優化:

1. 橫向:添加服務器,把單臺機器變成多臺機器的集群。

2. 縱向:對應用的業務進行拆分,拆分為多個子項目。(垂直架構)

以單體結構規模的項目為單位進行垂直劃分,也就是將一個大項目拆分成一個一個單體結構項目.項目和項目之間相對比較獨立,接口多為數據同步功能.

集群

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

集群就像在一個大餐館里設置了多個完全相同的廚房(節點)。每個廚房都可以獨立處理整個菜單上的任何訂單。顧客的訂單被分配到不同的廚房,由每個廚房獨立完成。這種方式確保如果一個廚房出了問題,其他廚房還能繼續工作,保證餐館整體的服務能力。

分布式

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

分布式則像是在一個大餐館里,把菜單分成了多個部分,每個廚房只負責其中一部分。例如,一個廚房只做前菜,另一個廚房只做主菜,第三個廚房只做甜點。這樣,每個廚房專注于自己負責的部分,所有廚房一起協作完成整個餐館的服務。

集群和分布式區別和聯系

1.從概念上.集群是多個計算機做同樣的事,分布式是多個計算機做不同的事

2.從功能上.集群的每一個節點功能是相同的,并且可以替代的,分布式也是多個節點組成的系統,但是每個節點完成的業務是不同的,一個節點出現問題,這個業務就不可訪問了

3.從關系上,分布式和集群在實踐中,很多時候是互相配合使用的,比如分布式的某一個節點,可能由一個集群來代替,分布式架構大多是建立在集群上的,所以實際的分布式架構設計中并不會把分布式和集群單獨區分,而是統稱:分布式架構.

1.3 微服務架構

系統經過分布式進行業務拆分后,還會存在一些重復的功能開發。

在分布式架構下,當部署的服務越來越多,重復的代碼就會越來越多,服務的調用關系也會越來越復雜,我們可以把一些通用的,會被多個上層服務調用的共享業務,提取成獨立的基礎服務,組成一個個微小的服務.這就是微服務.簡單來說,微服務就是很小的服務.小到一個服務只對應一個單一的功能,只做一件事,這個服務可以單獨部署運行

微服務之間可以采用REST和RPC協議進行通信,此處把他理解為接口的約定

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

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

2. 微服務的優勢與挑戰

微服務架構帶來好處的同時,也面臨著一些挑戰,從單體服務轉向微服務意味著管理更加復雜。

優勢

  • 獨立部署:每個服務可以獨立部署和更新,不影響其他服務。這減少了發布的風險,提高了發布的靈活性。

  • 技術多樣性:不同的服務可以使用不同的技術棧(編程語言、數據庫等),根據具體需求選擇最合適的技術。

  • 擴展性:可以針對某個服務單獨進行水平擴展(增加實例數量)或垂直擴展(增加單個實例的處理能力),提高系統的彈性和資源利用率。

  • 容錯性:服務之間的隔離性增強了系統的容錯能力。如果一個服務失敗,不會影響其他服務的運行,系統能更好地應對部分故障。

  • 團隊獨立性:不同的服務可以由不同的小團隊負責,這樣團隊可以獨立開發、測試和部署,提高開發效率和團隊自主性。

  • 更容易的理解和維護:由于服務較小且專注于單一業務功能,代碼庫更易于理解和維護。新成員可以更快上手。

挑戰

  • 分布式系統復雜性:微服務架構將單一應用分解成多個服務,帶來了分布式系統的復雜性。服務間的通信、數據一致性、事務管理等都是新的挑戰。

  • 服務間通信開銷:服務間的網絡通信會帶來額外的開銷,可能會影響性能。需要優化通信機制和策略,確保服務間通信高效可靠。

  • 數據管理:數據管理變得更加復雜。每個服務通常擁有自己的數據庫,這導致分布式數據管理和跨服務的數據一致性變得困難。

  • 運維復雜性:管理和監控大量微服務實例需要更復雜的運維工具和流程。需要有效的監控、日志和告警系統來確保服務的穩定性。

  • 部署和版本控制:部署多個獨立的服務需要有效的部署管道和版本控制機制,確保各服務之間的兼容性和協調。

  • 測試難度:測試微服務架構比測試單一應用復雜。需要模擬服務間的交互,并處理分布式環境下的各種測試場景。

  • 安全性:每個服務都是獨立的潛在攻擊點,需要確保每個服務的安全性,以及服務間通信的安全。

既然我們的java框架已經發展到這一步驟,并且已經出現了這些需求,就肯定需要解決這些困難,就算有困難也需要去使用微服務啊!我們是自己研發還是直接選取市場上比較成熟的技術來使用?

全球的互聯網公司都在積極嘗試自己的微服務落地方案.在Java領域,最引人注目的就是Spring Cloud。

3. 微服務解決方案:Spring Cloud

3.1 什么是Spring Cloud

Spring Cloud 提供了一些可以讓開發人員快速構建分布式服務的工具,比如配置管理,服務發現,熔斷,智能路由等.他們可以在任何分布式環境中很好的工作.?Spring Cloud 通過集成和擴展多個開源項目,為開發人員提供了一整套解決方案,使他們能夠快速構建和管理分布式服務。這些工具和庫在任何分布式環境中都能很好地工作,幫助開發人員解決配置管理、服務發現、熔斷、智能路由等常見問題,提高系統的穩定性、靈活性和可擴展性。

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

注意:

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

3.2 Spring Cloud版本

Spring Cloud中的所有子項目都依賴SpringBoot,所以SpringBoot和Spring Cloud的版本之間也存在-定的對應關系。?如SpringBoot 3.2.X對應的SpringCloud版本是2023.0.X

?3.3 Spring Cloud實現方案

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

  • Spring Cloud Netflix
  • Spring Cloud Alibaba

Spring Cloud Netflix

包含的組件及其主要功能大致如下:
Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在Spring Cloud規范下的實現.

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

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

現在只有Eureka:服務注冊和發現。

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

?Spring Cloud Alibaba

Spring Cloud Alibaba 是阿里巴巴集團下的開源組件和云產品在Spring Cloud規范下的實現

雖然Spring Cloud Alibaba目前并不是Spring Cloud官方推薦的默認方案,但是Spring Cloud Alibaba是阿里中間件團隊主導的一個新生項目,正處于高速迭代中.甚至在Alibaba的開源組件還沒有織入SpringCloud生態之前,就已經在各大公司廣泛使用了.

官??站: Spring Cloud Alibaba 是什么 | Spring Cloud Alibaba icon-default.png?t=N7T8https://sca.aliyun.com/docs/2022/overview/what-is-sca/如果說Spring Cloud Netflix是 Spring Cloud 的第一代實現,那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第二代實現,主要由 Nacos、Sentinel、Seata 等組件組成.

?Spring Cloud 實現對比

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

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

相關文章

image媒體組件屬性配合swiper輪播

圖片組件&#xff08;image&#xff09; 先插入個圖片試試&#xff0c;插入圖片用src屬性&#xff0c;這是圖片&#xff1a; 代碼如下&#xff1a; <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…

Jectpack Navigation組件設置統一跳轉動畫

Activity的跳轉一般通過Theme設置即可&#xff0c;但是Framment的跳轉除了NavigationUI類提供的方法會有動畫以外&#xff0c;直接調用navigate方法是沒有動畫的。 網上的實現個人認為比較麻煩&#xff0c;幫自己寫了一套&#xff0c;主要就是自定義NavHostFragement和Fragmen…

CobaltStrike的內網安全

1.上線機器的Beacon的常用命令 2.信息收集和網站克隆 3.釣魚郵件 4.CS傳遞會話到MSF 5.MSF會話傳遞到CS 1上線機器的Beacon的常用命令 介紹&#xff1a;CobaltStrike分為服務端和客戶端&#xff0c;一般我們將服務端放在kali&#xff0c;客戶端可以在物理機上面&#xff0…

tongweb 部署軟航流版簽一體化應用示例 提示跨域錯誤CORS ERROR

目錄 問題現象與描述 解決辦法 原理解析 什么是CORS 瀏覽器跨域請求限制 跨域問題解決方法 跨域請求流程 瀏覽器請求分類解析 http請求方法簡介 問題現象與描述 重慶軟航科技有限公司提供了一套針對針對word、excel等流式文件轉換成PDF版式文件并進行版式文件在線簽章…

ai積累-具體應用的大概設想

這些場景展示了以 ChatGPT 為代表的生成式 AI 可能的具體應用&#xff1a; 教育輔助&#xff1a; AI 可以充當學生的個性化輔導老師&#xff0c;提供定制化的學習材料和練習。例如&#xff0c;它可以生成針對學生能力水平和興趣的數學問題或歷史教學文章。 客戶支持&#xff1…

LESS 的嵌套寫法有什么優勢?

LESS的嵌套寫法可以提高代碼的可讀性和維護性。通過將相關的樣式規則嵌套在父選擇器中&#xff0c;可以更清晰地表達樣式之間的層級關系&#xff0c;避免重復的代碼&#xff0c;并且使樣式結構更加整潔。 例如&#xff0c;假設有以下HTML結構&#xff1a; <div class"…

Qt 加載圖片的幾種方式 以及加載 loading

項目中經常使用加載圖片&#xff1a; 常用有兩種方式&#xff1a; 1.使用 QWidget 加載圖片&#xff1a; 效果&#xff1a; 樣例源碼&#xff1a; int pict_H ui->widgetImage->height();int pict_W ui->widgetImage->width();ui->widgetImage->setFixe…

白騎士的C語言教學高級篇 3.4 C語言中的算法

算法是解決問題的核心。無論是排序、搜索&#xff0c;還是遞歸與動態規劃&#xff0c;算法的選擇和實現對程序的效率和性能有著重要影響。本節將介紹幾種常見的算法&#xff0c;包括排序算法、搜索算法&#xff0c;以及遞歸和動態規劃的應用。 排序算法 排序算法是將一組數據按…

昇思25天學習打卡營第17天|SSD目標檢測

學AI還能贏獎品&#xff1f;每天30分鐘&#xff0c;25天打通AI任督二脈 (qq.com) SSD目標檢測 模型簡介 SSD&#xff0c;全稱Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一種目標檢測算法。使用Nvidia Titan X在VOC 2007測試集上&#xff0c;SSD…

使用 CloudWatch + SNS + Lambda 實現多渠道告警系統

1. 簡介 在現代云計算環境中,及時和有效的監控告警對于維護系統的穩定性至關重要。本文將介紹如何使用 AWS CloudWatch、Simple Notification Service (SNS) 和 Lambda 函數構建一個多渠道告警系統,包括郵件告警、釘釘機器人告警和電話語音告警。 2. 系統架構 整個系統的工…

利用border繪制三角技巧

繪制三角形的效果如圖 <html lang"zh-cn"> <head><meta charset"UTF-8"><title>demo</title><style>* {margin: 0;padding: 0;}.box {/* 盒子寬高改成零就變成三角形 &#xff0c;需要哪個方向的三角形就設置哪個方向…

Python一些可能用的到的函數系列130 UCS-Time Brick

說明 UCS對象是基于GFGoLite進行封裝&#xff0c;且側重于實現UCS規范。 內容 1 函數 我發現pydantic真是一個特別好用的東西&#xff0c;可以確保在數據傳遞時的可靠&#xff0c;以及對某個數據模型的描述。 以下&#xff0c;UCS給出了id、time相關的brick映射&#xff0…

【分布式系統五】監控平臺Zabbix實際監控運用(命令+截圖詳細版)

目錄 一.Zabbix 監控 Windows 1.安裝zabbix 2.Web 頁面添加主機&#xff0c;關聯模板 二.Zabbix 監控 Java 應用 1.安裝tomcat 2.服務端安裝 zabbix-java-gateway 3.Web 頁面添加主機&#xff0c;關聯模板 三.Zabbix 監控 SNMP 1.服務端安裝 snmp 監控程序 2.修改 sn…

RT-Thread和freeRTOS啟動流程

一. freeRTOS啟動流程 二. RT-Thread啟動流程 因為RT-Thread中我們定義了補丁函數也叫做鉤子函數--$Sub$$main()--作為一個新功能函數&#xff0c;可以將原有函數劫持下來&#xff0c;并在之后的程序運行中加上$Super $ $前綴來重新調用原始函數。 所以啟動流程是$Sub$$main(…

Chiasmodon:一款針對域名安全的公開資源情報OSINT工具

關于Chiasmodon Chiasmodon是一款針對域名安全的公開資源情報OSINT工具&#xff0c;該工具可以幫助廣大研究人員從各種來源收集目標域名的相關信息&#xff0c;并根據域名、Google Play應用程序、電子郵件地址、IP地址、組織和URL等信息進行有針對性的數據收集。 該工具可以提…

利用node連接mongodb實現一個小型后端服務系統demo

http 請求 實現get請求數據庫數據&#xff1b;實現添加數據實現編輯數據實現刪除數據實現導出txt文件、Excel文件實現查詢數據庫數據并利用導出為excel文件 node 版本 16.16.0 node 版本 18.16.0 會連接 MongoDB 數據庫錯誤。 Connected to MongoDB failed MongoServerSele…

Nginx-簡介

介紹 nginx是一款HTTP和反向代理服務器、郵件代理服務器和通用TCP/IP代理服務器&#xff0c;在俄羅斯廣泛使用&#xff0c;用于代理高負載站點。 版本 nginx開源版nginx plus企業版openresty將nginx和lua腳本結合 tengine更穩定、高性能 正向代理 客戶端和代理服務是一伙的…

【vue動態組件】VUE使用component :is 實現在多個組件間來回切換

VUE使用component :is 實現在多個組件間來回切換 component :is 動態父子組件傳值 相關代碼實現&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

生產力工具|viso常用常見科學素材包

一、科學插圖素材網站 一圖勝千言&#xff0c;想要使自己的論文或重要匯報更加引人入勝&#xff1f;不妨考慮利用各類示意圖和科學插圖來輔助研究工作。特別是對于新手或者繁忙的科研人員而言&#xff0c;利用免費的在線科學插圖素材庫&#xff0c;能夠極大地節省時間和精力。 …

Python字符編碼檢測利器: chardet庫詳解

Python字符編碼檢測利器: chardet庫詳解 1. chardet簡介2. 安裝3. 基本使用3.1 檢測字符串編碼3.2 檢測文件編碼 4. 高級功能4.1 使用UniversalDetector4.2 自定義編碼檢測 5. 實際應用示例5.1 批量處理文件編碼5.2 自動轉換文件編碼 6. 性能優化7. 注意事項和局限性8. 總結 在…