系統擴展策略

1、核心指導思想:擴展立方體

在討論具體策略前,先了解著名的擴展立方體(Scale Cube),它定義了三種擴展維度:

  1. X軸:水平復制(克隆)

    • 策略:通過負載均衡器,在多個完全相同的應用實例之間分發請求。

    • 實現:這是最簡單、最常用的方式。例如,將一個單體應用部署到多臺服務器,前面用 Nginx 或 AWS ALB 做負載均衡。

    • 優點:實現簡單,能快速提升系統的吞吐量和可用性。

    • 缺點:每個實例都包含所有功能和數據,緩存、會話等狀態需要外部化處理,無法解決單一數據庫的瓶頸。

  2. Y軸:功能拆分(解耦)

    • 策略:基于不同的業務功能、服務或領域進行拆分。這就是我們常說的微服務架構

    • 實現:將單體應用拆分為多個獨立的服務,如“用戶服務”、“訂單服務”、“商品服務”。每個服務負責自己的數據和業務邏輯。

    • 優點

      • 高度解耦,團隊可以獨立開發、部署和擴展各自的服務。

      • 可以針對特定高負載服務進行精準擴容(比如大促時只擴展商品和訂單服務)。

      • 技術棧可選,不同服務可以用不同的 Java 框架甚至語言。

    • 缺點:引入了分布式系統的復雜性(網絡延遲、最終一致性、分布式事務、調試困難等)。

  3. Z軸:數據分片(分區)

    • 策略:基于特定的數據屬性(如用戶ID、地區)對數據進行分區,并將請求路由到對應的分區。

    • 實現:例如,user_id % 10?將用戶數據散列到 10 個不同的數據庫分片中。每個應用實例只處理特定分片的請求。

    • 優點:非常適合海量數據和高寫入負載的場景,能有效擴展數據庫的寫能力。

    • 缺點:應用邏輯變得復雜,跨分片的查詢和聚合操作非常困難。

最佳實踐:通常從 X 軸開始,隨著業務增長,逐步采用 Y 軸和 Z 軸策略。

2、具體策略與實施方案

架構層面

  • 演進式架構:不要一開始就設計一個龐大的微服務系統。優先采用模塊化良好的單體架構(如使用 Spring Boot 的模塊),隨著業務復雜度的提升,再逐步將成熟、邊界清晰的模塊拆分為微服務。

  • 微服務架構

    • 服務發現:使用 Consul, Eureka, Nacos 等實現服務的自動注冊與發現。

    • API 網關:使用 Spring Cloud Gateway?作為統一入口,處理路由、認證、限流、監控等跨切面關注點。

    • 通信:同步調用使用 REST(OpenFeign)或 gRPC;異步消息使用 RabbitMQ, Kafka, RocketMQ 來解耦服務,實現最終一致性和流量削峰。

    • 配置管理:使用 Nacos進行集中化的外部配置管理。

  • 緩存策略

    • 本地緩存:對于極少變化的數據(如元數據),使用?Caffeine?或?Guava Cache,速度極快。

    • 分布式緩存:對于全局共享的數據(如用戶會話、熱點商品),使用?Redis?。這是解除應用實例狀態依賴、提升性能的關鍵。

  • 數據庫擴展

    • 讀寫分離:主庫負責寫,多個從庫負責讀,緩解讀壓力。

    • 分庫分表:使用 ShardingSphere 等框架對數據庫進行水平拆分(Z軸擴展)。

    • 數據庫選型:根據場景使用不同類型的數據庫(多模數據庫)。例如,ES 用于搜索,MongoDB 用于存儲非結構化數據,TiDB 用于兼容 MySQL 協議且支持水平擴展的 OLTP 場景。

代碼與開發層面

  • 無狀態設計這是水平擴展(X軸)的前提。應用實例本身不存儲用戶會話等狀態信息。將會話數據存儲到外部緩存(如 Redis)中。

  • 池化資源:使用連接池(HikariCP)、線程池(ThreadPoolExecutor)來管理數據庫連接、HTTP 客戶端連接等昂貴資源,避免頻繁創建和銷毀帶來的開銷。

  • 異步與非阻塞

    • 使用?CompletableFuture?進行異步編程。

    • 采用響應式編程模型(如 WebFlux)構建非阻塞的 I/O 密集型服務,用更少的資源處理更高的并發。

  • 容錯

    • 斷路器:使用 Resilience4j 或 Hystrix 防止服務雪崩。當下游服務失敗時,快速失敗并提供降級方案。

    • 重試與限流:對暫時性故障進行智能重試;對上游調用進行限流,保護自身系統。

?基礎設施與運維層面(DevOps)

  • 容器化與編排

    • 使用?Docker?將應用及其依賴打包成標準鏡像。

    • 使用?Kubernetes (K8s)?進行容器編排,實現服務的自動部署、擴縮容(HPA)、自愈和滾動更新。K8s 是實踐微服務和云原生擴展的基石。

  • CI/CD(持續集成/持續部署)

    • 自動化構建、測試和部署流程(Jenkins, GitLab, Nexus)。

    • 實現快速、頻繁、可靠地發布,這是微服務能獨立擴展的前提。

  • 監控與可觀測性

    • 指標(Metrics):Prometheus 收集應用(Micrometer)和系統指標,Grafana 進行可視化。

    • 日志(Logging):集中式日志收集(ELK 棧:Elasticsearch, Logstash, Kibana)。

    • 追蹤(Tracing):使用 SkyWalking進行分布式鏈路追蹤,快速定位性能瓶頸和故障點。

  • 云原生:充分利用云平臺(AWS, Azure, GCP, 阿里云)的彈性伸縮能力(如 AWS Auto Scaling Group),根據 CPU、內存或自定義指標(如消息隊列長度)自動增減實例數量。

3、總結:一個可執行的擴展路徑

對于大多數項目,推薦一個循序漸進的擴展路徑:

  1. 階段一:優化與垂直擴展

    • 優化代碼和 SQL 查詢。

    • 增加緩存(Redis)。

    • 數據庫讀寫分離。

    • (必要時)升級服務器配置(垂直擴展)。

  2. 階段二:水平擴展應用層(X軸)

    • 改造應用為無狀態

    • 將應用部署到多臺服務器,使用負載均衡器

    • 會話外部化到 Redis。

  3. 階段三:拆分與解耦(Y軸)

    • 將單體應用拆分為微服務

    • 引入消息隊列(Kafka/RabbitMQ)處理異步流程和削峰填谷。

    • 實施 API 網關和服務治理。

  4. 階段四:數據層深度擴展(Z軸)

    • 對數據庫進行分庫分表

    • 引入多種類型的數據庫(多模架構)。

  5. 全程貫穿

    • 基礎設施自動化:使用 Docker 和 K8s。

    • 完善的監控:建立指標、日志、追蹤體系。

    • 成熟的 DevOps 文化:自動化一切,快速反饋。

????????記住,沒有銀彈。最好的擴展策略是基于當前的業務規模、團隊能力和未來規劃做出的最適合的權衡。過早優化和過度設計都是陷阱。始終以測量(Monitoring)為基礎,讓數據驅動擴展決策。

參考文檔:

微服務架構理論-擴展立方體篇 - zygfengyuwuzu - 博客園

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

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

相關文章

HBuilder X 4.76 開發微信小程序集成 uview-plus

簡介 本文記錄了在HBuilder中創建并配置uni-app項目的完整流程。 首先創建項目并測試運行,確認無報錯后添加uView-Plus組件庫。 隨后修改了main.js、uni.scss、App.vue等核心文件,配置manifest.json并安裝dayjs、clipboard等依賴庫。 通過調整vite.c…

第4章:內存分析與堆轉儲

本章概述內存分析是 Java 應用性能調優的核心環節之一。本章將深入探討如何使用 VisualVM 進行內存分析,包括堆內存監控、堆轉儲生成與分析、內存泄漏檢測以及內存優化策略。通過本章的學習,你將掌握識別和解決內存相關問題的專業技能。學習目標理解 Jav…

面經分享一:分布式環境下的事務難題:理論邊界、實現路徑與選型邏輯

一、什么是分布式事務? 分布式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位于不同的分布式系統的不同節點之上。 一個典型的例子就是跨行轉賬: 用戶從銀行A的賬戶向銀行B的賬戶轉賬100元。 這個操作包含兩個步驟: 從A賬戶扣減100元。 向B賬戶…

C++的演化歷史

C是一門這樣的編程語言: 兼顧底層計算機硬件系統和高層應用抽象機制從實際問題出發,注重零成本抽象、性能、可移植性、與C兼容語言特性和細節很多,學習成本較高,是一門讓程序員很難敢說精通的語言 C是自由的,支持5種…

Qt6實現繪圖工具:12種繪圖工具全家桶!這個項目滿足全部2D場景

項目概述 一個基于Qt框架開發的專業繪圖工具,實現了完整的2D圖形繪制、編輯和管理功能。該項目采用模塊化設計,包含圖形繪制、圖層管理、命令模式撤銷重做、用戶界面等多個子系統,是學習現代C++和Qt框架的最佳實踐。 核心功能特性 12種專業繪圖工具 多圖層繪制系統 完整的…

Linux驅動開發學習筆記

第1章 Linux驅動開發的方式mmap映射型設計方法。【不推薦】將芯片上的物理地址映射到用戶空間的虛擬地址上,用戶操作虛擬地址來操作硬件。使用文件操作集(file_operatiopns)設計方法。【極致推薦】platfrom總線型設置方法。【比較流行】設備樹。【推薦】第2章 Linux…

mac中進行適用于IOS的靜態庫構建

前沿: 進行C開發完成之后,需要將代碼編譯成靜態庫,并且在IOS的手機系統中執行,因此記錄該實現過程. 1主要涉及內容 1.1 整體文件架構 gongyonglocalhost Attention % tree -L 2 . ├── build │ ├── __.SYMDEF │ ├── cmake_install.cmake │ ├── CMakeCache…

C++二維數組的前綴和

C二維數組的前綴和的方法很簡單&#xff0c;可以利用公式res[i][j]arr[i][j]res[i-1][j]prefix[i][j-1]-res[i-1][j-1]。輸入4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16輸出1 3 6 10 6 14 24 36 15 33 54 78 28 60 96 136#include<bits/stdc.h> using namespace std; int…

Wifi開發上層學習1:實現一個wifi搜索以及打開的app

Wifi開發上層學習1&#xff1a;實現一個wifi搜索以及打開的app 文章目錄Wifi開發上層學習1&#xff1a;實現一個wifi搜索以及打開的app背景demo實現1.添加系統權限以及系統簽名2.布局配置3.邏輯設計3.1 wifi開關的實現3.2 wifi掃描功能3.3 連接wifi總結一、WiFi 狀態控制接口二…

【DSP28335 入門教程】定時器中斷:為你的系統注入精準的“心跳”

大家好&#xff0c;歡迎來到 DSP28335 的核心精講系列。我們已經掌握了如何通過外部中斷來響應“外部事件”&#xff0c;但系統內部同樣需要一個精準的節拍器來處理“內部周期性任務”。單純依靠 DELAY_US() 這樣的軟件延時&#xff0c;不僅精度差&#xff0c;而且會在延時期間…

從零開始:用代碼解析區塊鏈的核心工作原理

區塊鏈技術被譽為信任的機器&#xff0c;它正在重塑金融、供應鏈、數字身份等眾多領域。但對于許多開發者來說&#xff0c;它仍然像一個神秘的黑盒子。今天&#xff0c;我們將拋開炒作的泡沫&#xff0c;深入技術本質&#xff0c;用大約100行Python代碼構建一個簡易的區塊鏈&am…

網絡通信IP細節

目錄 1.通信的NAT技術 2.代理服務器 3.內網穿透和內網打洞 1.通信的NAT技術 NAT技術產生的背景是我們為了解決IPV4不夠用的問題&#xff0c;NAT在通信的時候可以對IP將私網IP轉化為公網IP&#xff0c;全局IP要求唯一&#xff0c;但是私人IP不是唯一的。 將報文發給路由器進行…

國內真實的交換機、路由器和分組情況

一、未考慮擁擠情況理想狀態的網絡通信 前面我對骨干網&#xff1a; 宜春城區SDH網圖分析-CSDN博客 數據鏈路層MAC傳輸&#xff1a; 無線通信網卡底層原理&#xff08;Inter Wi-Fi AX201&#xff09;_ax201ngw是cnvio轉pci-e-CSDN博客 物理層、數據鏈路層、網絡層及傳輸層…

atomic常用類方法

Java中的java.util.concurrent.atomic包提供了多種原子操作工具類&#xff0c;以下是核心類及其方法&#xff1a;?1. AtomicBoolean??方法?&#xff1a;get()&#xff1a;獲取當前值set(boolean newValue)&#xff1a;強制設置值compareAndSet(boolean expect, boolean upd…

算法題打卡力扣第3題:無重復字符的最長子串(mid)

文章目錄題目描述解法一&#xff1a;暴力解解法二&#xff1a;滑動窗口題目描述 解法一&#xff1a;暴力解 遍歷每一個可能的子串&#xff0c;然后逐一判斷每個子串中是否有重復字符。 具體步驟&#xff1a; 使用兩層嵌套循環來生成所有子串的起止位置&#xff1a; 外層循環 i…

HTML5 簡介和基礎骨架

一、HTML5 簡介HTML5 是 HTML&#xff08;超文本標記語言&#xff09;的第五個主要版本&#xff0c;于 2014 年 10 月由 W3C&#xff08;萬維網聯盟&#xff09;正式發布。它不僅是對 HTML4.01 和 XHTML 的升級&#xff0c;更是一套完整的 Web 技術標準&#xff0c;包含了新的標…

.NET技術深度解析:現代企業級開發指南

每日激勵&#xff1a; “不要一直責怪過去的自己&#xff0c;他曾經站在霧里也很迷茫” &#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1…

蘋果手機文本轉音頻,自行制作背誦素材

當你在學習一段專業內容或者背誦重要知識點時&#xff0c;是不是有時會覺得眼睛看久了疲憊&#xff0c;而且記憶效果也不太理想呢&#xff1f;利用手頭的蘋果手機或iPad&#xff0c;你可以輕松將文本內容生成音頻文件&#xff0c;然后隨時隨地反復聽&#xff0c;這對于備考人士…

電子電子技術知識------MOSFET管

電子電子技術知識------MOSFET管前言一、結構與符號二、工作原理1.小功率MOSFET&#xff08;橫向導電&#xff09;2.電力MOS管三、基本特性總結前言 MOSFET是電力場效應晶體管的英文簡寫&#xff0c;又稱功率mos管&#xff0c;mos管 一、結構與符號 二、工作原理 1.小功率M…

仿真波導中超短脈沖傳輸中的各種非線性效應所產生的超連續譜

在波導中&#xff0c;超短脈沖傳輸時會受到各種非線性效應的影響&#xff0c;從而產生超連續譜。這些非線性效應包括自相位調制&#xff08;SPM&#xff09;、交叉相位調制&#xff08;XPM&#xff09;、四波混頻&#xff08;FWM&#xff09;等。基于MATLAB的仿真程序&#xff…