Spring 微服務解決了單體架構的哪些痛點?

1. 部署困難 (Deployment Difficulty & Risk)

  • 單體痛點:
    • 整體部署: 對單體應用的任何微小修改(哪怕只是一行代碼),都需要重新構建、測試和部署整個龐大的應用程序。
    • 部署頻率低: 由于部署過程復雜且風險高,發布周期通常很長(幾周甚至幾個月)。
    • 高風險: 一旦部署出現問題,可能會導致整個應用癱瘓,影響所有業務功能。回滾也同樣復雜和耗時。
    • 部署窗口限制: 往往需要在業務低峰期(如深夜或周末)進行部署,限制了業務的快速迭代。
  • 微服務解決方案:
    • 獨立部署: 每個微服務都是一個獨立的部署單元。可以隨時修改、測試和部署單個服務,而無需觸動其他服務。
    • 高頻部署: 顯著縮短發布周期,可以實現每天甚至每天多次部署,更快地將新功能交付給用戶。
    • 降低風險: 單個服務的部署失敗只會影響該服務的功能范圍(理想情況下)。可以更容易的進行金絲雀發布、藍綠部署等低風險發布策略。
    • 無特定部署窗口: 可以更靈活的安排部署時間。

2. 技術棧陳舊與演進困難 (Outdated Technology Stack & Evolution Difficulty)

  • 單體痛點:
    • 技術鎖定: 整個應用通常被鎖定在一個技術棧(如特定的編程語言、框架、數據庫)上。隨著時間推移,這個技術棧可能會變得過時或不再是最優選擇。
    • 升級困難: 對底層框架或庫進行重大升級是一項艱巨且風險極高的任務,可能需要對整個代碼庫進行大量修改和回歸測試。
    • 采用新技術成本高: 想要在單體應用中嘗試或引入新的語言、數據庫或框架非常困難,往往需要大規模重構。
    • 技術債務累積: 由于難以進行改造,技術債務會不斷累積,進一步拖慢開發速度和增加維護成本。
  • 微服務解決方案:
    • 技術異構性 (Polyglot): 每個微服務都可以根據其具體需求選擇最合適的技術棧。可以使用 Java 處理事務,用 Python 做數據分析,用 Node.js 處理高并發 IO 等。
    • 漸進式升級與替換: 可以更容易的對單個服務進行技術升級,甚至用新技術完全重寫某個服務,而不會影響其他服務。
    • 擁抱創新: 在現有的微服務中可以嘗試和應用最新的技術和模式。
    • 隔離技術債務: 技術債務可以被限制在單個服務內部,更容易管理和償還。

3. 擴展性差 (Poor Scalability)

  • 單體痛點:
    • 整體擴展: 無法針對應用的不同部分進行差異化擴展。即使只有一小部分功能(如用戶認證)成為性能瓶頸,也必須擴展整個應用程序的實例。
    • 資源浪費: 擴展整個應用意味著所有組件(即使是低負載的組件)都需要更多的資源(CPU、內存),導致資源利用率低下。
    • 受限于“短板”: 整個應用的擴展能力往往受限于其中最難擴展或資源需求最高的那個組件。
  • 微服務解決方案:
    • 獨立擴展: 可以根據每個服務的實際負載和資源需求,獨立的擴展或縮減其服務實例數量。
    • 資源優化: 可以為不同的服務選擇不同配置的硬件或實例類型(如 CPU 密集型、內存密集型、IO 密集型),實現更精細化的資源管理和成本優化。
    • 更高的整體擴展性: 打破了單體應用中“短板”的限制,系統的整體擴展能力更強。

4. 團隊協作效率低 (Low Team Collaboration Efficiency)

  • 單體痛點:
    • 代碼庫龐大: 所有開發人員都在同一個龐大、復雜的代碼庫上工作。
    • 熟知業務功能: 開發人員需要理解整個系統的很多部分才能進行有效的修改,上手難度大,新人培養周期長。
    • 開發瓶頸: 大量開發人員同時修改同一個代碼庫,容易產生代碼沖突,需要頻繁合并代碼,降低開發效率。協調成本高。
    • 職責不清: 隨著系統變大,模塊之間的界限變得模糊,職責劃分不清晰,容易出現互相推諉或重復造輪子的情況。
    • 決策緩慢: 對架構或重要組件的修改需要協調多個團隊或大量人員,決策過程緩慢。
  • 微服務解決方案:
    • 小型、專注的代碼庫: 每個微服務的代碼庫相對較小,業務邏輯更聚焦。
    • 降低業務功能: 開發人員只需要深入理解他們負責的一到兩個服務,更容易上手和維護。
    • 團隊自治與并行開發 (Conway’s Law): 可以組建小型、跨職能的自治團隊,每個團隊負責一個或多個服務的完整生命周期(開發、測試、部署、運維)。團隊之間可以并行開發,減少了協調和沖突。
    • 明確所有權: 每個服務有明確的歸屬團隊,職責清晰。
    • 更快的決策: 團隊可以在其負責的服務范圍內更快的做出技術決策。

此外,微服務還能解決一些其他的單體痛點:

  • 可靠性/容錯性差 (Poor Reliability/Fault Tolerance): 單體應用中一個模塊的嚴重錯誤(如內存泄漏、死循環)可能導致整個應用崩潰。微服務通過故障隔離提高了系統的整體彈性,一個服務的失敗不應導致整個系統不可用(需要配合熔斷、降級等機制)。
  • 維護成本高 (High Maintenance Cost): 修改龐大、耦合度高的單體代碼庫非常耗時且風險高。微服務使得修改和維護的范圍更小、更可控。

總之,采用微服務架構的主要目的就是通過分解復雜性,來解決單體應用在敏捷性、可擴展性、技術選型、容錯性、團隊效率等方面遇到的瓶頸和挑戰,從而更好的支撐業務的快速發展和變化。

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

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

相關文章

面試題之高頻面試題

最近開始面試了,410面試了一家公司 針對自己薄弱的面試題庫,深入了解下,也應付下面試。在這里先祝愿大家在現有公司好好沉淀,定位好自己的目標,在自己的領域上發光發熱,在自己想要的領域上(技術…

【MySQL】Read view存儲的機制,記錄可見分析

read view核心組成 1.1 事務id相關 creator_trx_id: 創建該read view的事務id 每開啟一個事務都會生成一個 ReadView,而 creator_trx_id 就是這個開啟的事務的 id。 m_ids: 創建read view時系統的活躍事務(未提交的事務)id集合 當前有哪些事…

【刷題Day20】TCP和UDP(淺)

TCP 和 UDP 有什么區別? TCP提供了可靠、面向連接的傳輸,適用于需要數據完整性和順序的場景。 UDP提供了更輕量、面向報文的傳輸,適用于實時性要求高的場景。 特性TCPUDP連接方式面向連接無連接可靠性提供可靠性,保證數據按順序…

Flink 內部通信底層原理

Flink 集群內部節點之間的通信是用 Akka 實現,比如 JobManager 和 TaskManager 之間的通信。而 operator 之間的數據傳輸是用 Netty 實現。 RPC 框架是 Flink 任務運行的基礎,Flink 整個 RPC 框架基于 Akka 實現。 一、相關概念 RPC(Remote Procedure Call) 概念 定義:…

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置)

企業級Kubernetes 1.28高可用集群離線部署全指南(含全組件配置) 摘要:本文手把手教學在無外網環境下部署生產級Kubernetes 1.28高可用集群,涵蓋ETCD集群、HAProxy+Keepalived負載均衡、Containerd運行時、Calico網絡插件及Kuboard可視化管理全流程。提供100年有效證書配置…

【中間件】redis使用

一、redis介紹 redis是一種NoSQL類型的數據庫,其數據存儲在內存中,因此其數據查詢效率很高,很快。常被用作數據緩存,分布式鎖 等。SpringBoot集成了Redis,可查看開發文檔Redis開發文檔。Redis有自己的可視化工具Redis …

C語言——函數遞歸與迭代

各位CSDN的uu們大家好呀,今天將會給大家帶來關于C語言的函數遞歸的知識,這一塊知識理解起來稍微會比較難,需要多花點時間。 話不多說,讓我們開始今天的內容吧! 目錄 1.函數遞歸 1.1 什么是遞歸? 1.2 遞歸…

藏品館管理系統

藏品館管理系統 項目簡介 這是一個基于 PHP 開發的藏品館管理系統,實現了藏品管理、用戶管理等功能。 藏品館管理系統 系統架構 開發語言:PHP數據庫:MySQL前端框架:BootstrapJavaScript 庫:jQuery 目錄結構 book/…

centos停服 遷移centos7.3系統到新搭建的openEuler

背景 最近在做的事,簡單來講,就是一套系統差不多有10多臺虛擬機,都是centos系統,版本主要是7.3、7.6、7.9,現在centos停止維護了,轉為了centos stream,而centos stream的定位是:Red …

什么是 IDE?集成開發環境的功能與優勢

原文:什么是 IDE?集成開發環境的功能與優勢 | w3cschool筆記 (注意:此為科普文章,請勿標記為付費文章!且此文章并非我原創,不要標記為付費!) IDE 是什么? …

jenkins批量復制Job項目的shell腳本實現

背景 現在需要將“測試” 目錄中的所有job全部復制到 一個新目錄中 test2。可以結合jenkins提供的apilinux shell 進行實現。 測試目錄的實際文件夾名稱是 test。 腳本運行效果如下: [qdevsom5f-dev-hhyl shekk]$ ./copy_jenkins_job.sh 創建文件夾 test2 獲取源…

VisualSVN過期后的解決方法

作為一款不錯的源代碼管理軟件,svn還是有很多公司使用的。在vs中使用svn,大家一般用的都是VisualSVN插件。在30天試用期過后,它就不能被免費使用了。下面給大家講如何免費延長過期時間(自定義天數,可以設定一個很大的值…

硬件工程師筆記——電子器件匯總大全

目錄 1、電阻 工作原理 歐姆定律 電阻的物理本質 一、限制電流 二、分壓作用 三、消耗電能(將電能轉化為熱能) 2、壓敏電阻 伏安特性 1. 過壓保護 2. 電壓調節 3. 浪涌吸收 4. 消噪與消火花 5. 高頻應用 3、電容 工作原理 (…

[圖論]Kruskal

Kruskal 本質:貪心,對邊進行操作。存儲結構:邊集數組。適用對象:可為負權圖,可求最大生成樹。核心思想:最短的邊一定在最小生成樹(MST)上,對最短的邊進行貪心。算法流程:對全體邊集…

vulnhub five86系列靶機合集

five86 ~ VulnHubhttps://www.vulnhub.com/series/five86,272/ five86-1滲透過程 信息收集 # 主機發現 nmap 192.168.56.0/24 -Pn ? # 靶機全面掃描 nmap 192.168.56.131 -A -T4 目錄掃描 dirsearch -u http://192.168.56.131/ /robots.txt提示/ona。 /ona二層目錄掃描。 …

如何高效利用呼叫中心系統和AI語音機器人

要更好地使用呼叫中心系統和語音機器人,需要結合兩者的優勢,實現自動化、智能化、高效率的客戶服務與業務運營。以下是優化策略和具體實踐方法: 一、呼叫中心系統優化 1. 智能路由與IVR優化 智能ACD(自動呼叫分配) …

Nacos安裝及數據持久化

1.Nacos安裝及數據持久化 1.1下載nacos 下載地址:https://nacos.io/download/nacos-server/ 不用安裝,直接解壓縮即可。 1.2配置文件增加jdk環境和修改單機啟動standalone 找到bin目錄下的startup.cmd文件,添加以下語句(jdk路徑根據自己…

【牛客練習賽137 C】題解

比賽鏈接 C. 變化的數組(Easy Version) 題目大意 一個長度為 n n n 的非負數組 a a a,要求執行 k k k 次操作,每次操作如下: 有 1 2 \frac{1}{2} 21? 的概率令 a i ← a i ( a i ? m ) x , ? i ∈ [ 1 , n ] a_i \leftarrow a_…

Redis適用場景

Redis適用場景 一、加速緩存二、會話管理三、排行榜和計數器四、消息隊列五、實時分析六、分布式鎖七、地理位置數據八、限流九、數據共享十、簽到 一、加速緩存 Redis最常見的應用之一是作為緩存層,用于存儲頻繁訪問的數據,從而減輕數據庫的負載。 通過…

【LangChain4j快速入門】5分鐘用Java接入AI大模型,Spring Boot整合實戰!| 附源碼

【LangChain4j快速入門】5分鐘用Java接入AI大模型,Spring Boot整合實戰! 前言:當Java遇上大模型 在AI浪潮席卷全球的今天,Java開發者如何快速擁抱大語言模型?LangChain4j作為專為Java打造的AI開發框架,以…