系統架構設計(十七):微服務數據一致性和高可用策略

數據一致性問題

問題本質

由于每個微服務擁有獨立數據庫跨服務操作不能用傳統的數據庫事務,面臨“分布式事務”一致性挑戰。

數據一致性策略

策略核心思想應用場景優缺點
強一致性(Strong Consistency)所有操作實時同步成功,用戶總是看到最新數據金融、電商扣款等高安全場景實現復雜,性能下降
最終一致性(Eventual Consistency)不保證實時一致,但最終會一致大多數業務場景,如電商訂單、庫存易擴展,性能好,但用戶短時間可能看到“舊數據”
分布式事務協議:2PC/3PC通過協調器兩階段提交實現原子性事務級別操作,如賬戶轉賬實現難,性能差,可能阻塞
本地事務 + 異步消息補償(推薦)本地操作成功后發送消息,由對方服務異步處理,失敗可重試或補償大多數微服務場景實用性強,但需自行處理冪等、消息丟失等問題
TCC 模式(Try-Confirm-Cancel)三階段事務模型,預留資源后確認/取消操作資源型操作(預訂、庫存等)設計復雜,適用于少數場景
Saga 模式(編排式/事務鏈)業務分為多個本地事務,失敗時按順序回滾訂單、支付、發貨流程靈活,適合復雜業務流程

高可用性設計策略

服務高可用(服務不掛)

策略說明
服務注冊與發現使用 Nacos/Consul 等注冊中心實現服務發現與自動切換
負載均衡使用 Nginx 或 Ribbon/Gateway 等分流到多實例
服務熔斷/限流/降級使用 Sentinel、Hystrix 避免雪崩效應
無狀態設計使服務可任意擴縮容,實現快速替換
容器化部署 + 自動恢復K8s/Pod 自動拉起故障實例

數據高可用(數據不丟)

策略說明
數據庫主從復制/讀寫分離實現高并發讀寫與故障切換
分布式緩存(如 Redis Sentinel、Cluster)降低數據庫壓力,容錯性強
消息隊列持久化機制Kafka/RabbitMQ 持久化,保證消息不丟
定期快照 + 增量備份數據恢復能力

網絡/基礎設施高可用:

策略說明
多機房/跨區域部署容災設計,機房故障不影響服務
負載均衡器(如 SLB)+ 自動切換實現自動流量調度

示例

某系統采用微服務架構,請說明如何保證其數據一致性和高可用性?

解答:

數據一致性策略

  • 采用“本地事務 + 消息隊列”方案實現最終一致性;
  • 各服務完成本地事務后,通過 MQ 異步通知其他服務處理;
  • 使用冪等機制和失敗重試/補償機制保障一致性;
  • 對于復雜業務,采用 Saga 模式或 TCC 模式。

高可用性策略

  • 服務層使用注冊中心 + 網關 + 負載均衡;
  • 數據層采用主從復制、緩存降級和數據庫讀寫分離;
  • 引入服務熔斷、限流、降級機制防止系統雪崩;
  • 基礎設施層采用容器化 + 自動化部署,提升可用性。

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

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

相關文章

os agent智能體軟件 - 第三彈 - 純語音交互

前兩期期我們發布了產品的初級形態,那時候還只能是“軟件開發者”在本地配置使用,或者運行起來有個大黑框,使用起來美觀度太差。 到今天大概20天,我們的第3版已經出來了,不僅做成了電腦端的exe軟件(任何人…

鏈表原理與實現:從單鏈表到LinkedList

1.鏈表的概念及結構 鏈表是一種物理存儲結構上非連續存儲結構,數據元素的邏輯順序是通過鏈表中的引用鏈接次序實現的 。 可以形象的理解,在邏輯上來看,鏈表就像是一節節火車車廂。 鏈表的分類:鏈表的結構有很多種,單向…

替換word中的excel

PostMapping("/make/report/target/performance/first") public AjaxResult makeTargetReportFirst(RequestBody MakeReportDTO makeReportDTO) {Map<String, String> textReplaceMap new HashMap<>();// 替換日期LocalDateTime nowData LocalDateTime…

深入探索百度智能云千帆AppBuilder:從零開始構建AI應用

在數字化轉型的浪潮中&#xff0c;企業對高效、智能的應用開發平臺的需求日益增長。百度智能云千帆AppBuilder&#xff08;以下簡稱AppBuilder&#xff09;憑借其強大的功能和靈活的開發方式&#xff0c;成為企業級大模型應用開發的理想選擇。本文將詳細介紹如何使用AppBuilder…

測試工程師要如何開展單元測試

單元測試是軟件開發過程中至關重要的環節&#xff0c;它通過驗證代碼的最小可測試單元(如函數、方法或類)是否按預期工作&#xff0c;幫助開發團隊在早期發現和修復缺陷&#xff0c;提升代碼質量和可維護性。以下是測試工程師開展單元測試的詳細步驟和方法&#xff1a; 一、理…

NODE-I916 I721模塊化電腦發布,AI算力與超低功耗的完美平衡

在智能工業與邊緣計算蓬勃發展的今天&#xff0c;企業對計算設備的性能與能效需求日益嚴苛。全新推出NODE-I916與NODE-I721模塊化電腦&#xff0c;分別搭載英特爾 酷睿? Ultra 平臺與Alder Lake-N平臺&#xff0c;以差異化CPU配置為核心&#xff0c;為AI推理、工業自動化及嵌入…

采集需要登錄網站的教程

有些網站需要用戶登錄才能顯示相關信息&#xff0c;如果要采集這類網站&#xff0c;有以下幾個方法&#xff1a; 1. 寫發布模塊來抓包獲取post的數據&#xff1b; 2. 有些采集器內置瀏覽器獲取這些信息&#xff0c;但是經常獲取的不準確&#xff0c;可靠性太低&#xff1b; 3. …

六足連桿爬行機器人的simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.完整工程文件 1.課題概述 六足連桿爬行機器人的simulink建模與仿真。通過simulink&#xff0c;對六足機器人的六足以及機身進行simulink建模&#xff0c;模擬其行走&#xff0c;仿真輸出機器人行走時六足的坐…

什么是物聯網 (IoT):2024 年物聯網概述

物聯網&#xff08;IoT&#xff09;是一個有望徹底改變我們生活、工作以及與環境互動方式的概念。如今&#xff0c;越來越多的新興企業和老牌企業都在利用物聯網的力量創造創新產品與服務。正因為這一轉變&#xff0c;互聯互通已成為我們生活中不可或缺的一部分&#xff0c;科技…

MVC入門(5)-- HttpMessageConverter 消息轉換器

概念 HttpMessageConverter 是 Spring 框架中用于處理 HTTP 請求和響應數據的核心接口&#xff0c;負責在 Java 對象與 HTTP 消息體&#xff08;請求體或響應體&#xff09;之間進行雙向轉換。簡單來說&#xff0c;它是 Spring 用來將 HTTP 請求中的原始數據&#xff08;如 JS…

Spark,連接MySQL數據庫,添加數據,讀取數據

以下是使用Spark連接MySQL數據庫、添加數據和讀取數據的步驟&#xff08;基于Scala API&#xff09;&#xff1a; 1. 準備工作 - 添加MySQL驅動依賴 在Spark項目中引入MySQL Connector JAR包&#xff08;如 mysql-connector-java-8.0.33.jar &#xff09;&#xff0c;或通過Sp…

關于 APK 反編譯與重構工具集

一、apktool — APK 解包 / 重打包 apktool 是一款開源的 Android APK 工具&#xff0c;用于&#xff1a; 反編譯 APK 查看資源和布局文件 生成 smali 文件&#xff08;DEX 的反匯編&#xff09; 對 APK 進行修改后重新打包 它不能還原 Java 源碼&#xff0c;只能將 D…

[解決方案] Word轉PDF

背景&#xff1a; 之前做過一些pdf導出&#xff0c; 客戶提了一個特別急的需求&#xff0c; 要求根據一個模版跟一個csv的數據源&#xff0c; 批量生成PDF&#xff0c; 因為之前用過FOP&#xff0c; 知道調整樣式需要特別長的時間&#xff0c; 這個需求又特別急&#xff0c; 所…

01 基本介紹及Pod基礎

01 查看各種資源 01-1 查看K8s集群的內置資源 [rootmaster01 ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 …

19 C 語言位運算、賦值、條件、逗號運算符詳解:涵蓋運算符優先級與復雜表達式計算過程分析

1 位運算符 位運算符是對整數的二進制表示&#xff08;補碼形式&#xff09;進行逐位操作的運算符。以下是主要的位運算符及其功能描述&#xff1a; 運算符描述操作數個數副作用&按位與2無|按位或2無^按位異或2無~按位取反1無<<按位左移2無>>按位右移2無 1.1…

哈希查找方法

已知哈希表長度為11&#xff0c;哈希函數為H&#xff08;key&#xff09;&#xff1d;key&#xff05;11&#xff0c;隨機產生待散列的小于50的8個元素&#xff0c;同時采用線性探測再散列的方法處理沖突。任意輸入要查找的數據&#xff0c;無論是否找到均給出提示信息。 int f…

JavaScript性能優化實戰(10):前端框架性能優化深度解析

引言 React、Vue、Angular等框架雖然提供了強大的抽象和開發效率,但不恰當的使用方式會導致嚴重的性能問題,針對這些問題,本文將深入探討前端框架性能優化的核心技術和最佳實踐。 React性能優化核心技術 React通過虛擬DOM和高效的渲染機制提供了出色的性能,但當應用規模…

類和對象------2

目錄 一. C面向對象模型初探1 .成員變量和函數的存儲 二 this指針1 &#xff09;this指針工作原理2 &#xff09;this指針的使用3&#xff09; const修飾成員函數4 &#xff09;const修飾對象(常對象) 3.友元1 )友元語法2) 課堂練習 4 強化訓練(數組類封裝) 四 運算符重載&…

量子計算在金融科技中的應用前景

隨著量子計算技術的飛速發展&#xff0c;其在各行業的應用潛力逐漸顯現&#xff0c;金融科技領域更是備受關注。量子計算的強大計算能力有望為金融行業帶來前所未有的變革&#xff0c;從風險評估到投資組合優化&#xff0c;從高頻交易到加密技術&#xff0c;量子計算都可能成為…

Redisson 四大核心機制實現原理詳解

一、可重入鎖&#xff08;Reentrant Lock&#xff09; 可重入鎖是什么&#xff1f; 通俗定義 可重入鎖類似于一把“智能鎖”&#xff0c;它能識別當前的鎖持有者是否是當前線程&#xff1a; 如果是&#xff0c;則允許線程重復獲取鎖&#xff08;重入&#xff09;&#xff0c;并…