精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊一聊微服務架構中的數據一致性

開發
在微服務中,一個邏輯上原子操作可以經常跨越多個微服務。即使是單片系統也可能使用多個數據庫或消息傳遞解決方案。使用多個獨立的數據存儲解決方案,如果其中一個分布式流程參與者出現故障,我們就會面臨數據不一致的風險 - 例如在未下訂單的情況下向客戶收費或未通知客戶訂單成功。

在微服務中,一個邏輯上原子操作可以經常跨越多個微服務。即使是單片系統也可能使用多個數據庫或消息傳遞解決方案。使用多個獨立的數據存儲解決方案,如果其中一個分布式流程參與者出現故障,我們就會面臨數據不一致的風險 - 例如在未下訂單的情況下向客戶收費或未通知客戶訂單成功。在本文中,我想分享一些我為使微服務之間的數據最終保持一致而學到的技術。

為什么實現這一目標如此具有挑戰性?只要我們有多個存儲數據的地方(不在單個數據庫中),就不能自動解決一致性問題,工程師在設計系統時需要注意一致性。目前,在我看來,業界還沒有一個廣為人知的解決方案,可以在多個不同的數據源中自動更新數據 - 我們可能不應該等待很快就能獲得一個。

以自動且無障礙的方式解決該問題的一種嘗試是實現兩階段提交(2PC)模式的XA協議。但在現代高規模應用中(特別是在云環境中),2PC似乎表現不佳。為了消除2PC的缺點,我們必須交易ACID for BASE并根據要求以不同方式覆蓋一致性問題。

Saga模式

在多個微服務中處理一致性問題的最著名的方法是Saga模式。 您可以將Sagas視為多個事務的應用程序級分布式協調。根據用例和要求,您可以優化自己的Saga實施。相反,XA協議試圖涵蓋所有場景。Saga模式也不是新的。它在過去已知并用于ESB和SOA體系結構中。最后,它成功地轉變為微服務世界。跨越多個服務的每個原子業務操作可能包含技術級別的多個事務。Saga Pattern的關鍵思想是能夠回滾其中一個單獨的交易。眾所周知,開箱即用的已經提交的單個事務無法進行回滾。但這是通過引入補償操作來實現的 - 通過引入“取消”操作。

除了取消之外,您還應該考慮使您的服務具有冪等性,以便在出現故障時重試或重新啟動某些操作。應監控故障,并應積極主動地應對故障。

對賬

如果在進程的中間負責調用補償操作的系統崩潰或重新啟動,該怎么辦?在這種情況下,用戶可能會收到錯誤消息,并且應該觸發補償邏輯,或者 - 當處理異步用戶請求時,應該恢復執行邏輯。

要查找崩潰的事務并恢復操作或應用補償,我們需要協調來自多個服務的數據。對賬

是在金融領域工作的工程師所熟悉的技術。你有沒有想過銀行如何確保你的資金轉移不會丟失,或者兩個不同的銀行之間如何匯款?快速回答是對賬。


在會計中,對賬是確保兩組記錄(通常是兩個賬戶的余額)達成一致的過程。對帳用于確保離開帳戶的資金與實際支出的資金相匹配。這是通過確保在特定會計期間結束時余額匹配來完成的。- Jean Scheid,“了解資產負債表賬戶調節”,Bright Hub,2011年4月8日

回到微服務,使用相同的原則,我們可以在一些動作觸發器上協調來自多個服務的數據。當檢測到故障時,可以按計劃或由監控系統觸發操作。最簡單的方法是運行逐記錄比較。可以通過比較聚合值來優化該過程。在這種情況下,其中一個系統將成為每條記錄的真實來源。

事件簿

想象一下多步驟交易。如何在對帳期間確定哪些事務可能已失敗以及哪些步驟失敗?一種解決方案是檢查每個事務的狀態。在某些情況下,此功能不可用(想象一下發送電子郵件或生成其他類型消息的無狀態郵件服務)。在其他一些情況下,您可能希望立即了解事務狀態,尤其是在具有許多步驟的復雜方案中。例如,預訂航班,酒店和轉機的多步訂單。

復雜的分布式流程

在這些情況下,事件日志可以提供幫助。記錄是一種簡單但功能強大的技術許多分布式系統依賴于日志。“預寫日志記錄”是數據庫在內部實現事務行為或維護副本之間一致性的方式。相同的技術可以應用于微服務設計。在進行實際數據更改之前,服務會寫入有關其進行更改的意圖的日志條目。實際上,事件日志可以是協調服務所擁有的數據庫中的表或集合


事件日志不僅可用于恢復事務處理,還可用于為系統用戶,客戶或支持團隊提供可見性。但是,在簡單方案中,服務日志可能是冗余的,狀態端點或狀態字段就足夠了。

編配(Orchestration)與編排(choreography)

到目前為止,您可能認為sagas只是編配(orchestration )方案的一部分。但是sagas也可以用于編排(choreography ),每個微服務只知道過程的一部分。Sagas包括處理分布式事務的正流和負流的知識。在編排(choreography )中,每個分布式事務參與者都具有這種知識。

單次寫入事件

到目前為止描述的一致性解決方案并不容易。他們確實很復雜。但有一種更簡單的方法:一次修改一個數據源。我們可以將這兩個步驟分開,而不是改變服務的狀態并在一個過程中發出事件。

更改為先

在主要業務操作中,我們修改自己的服務狀態,而單獨的進程可靠地捕獲更改并生成事件。這種技術稱為變更數據捕獲(CDC)。實現此方法的一些技術是Kafka Connect或Debezium。

使用Debezium和Kafka Connect更改數據捕獲使用Debezium和Kafka Connect更改數據捕獲

但是,有時候不需要特定的框架。一些數據庫提供了一種友好的方式來拖尾其操作日志,例如MongoDB Oplog。如果數據庫中沒有此類功能,則可以通過時間戳輪詢更改,或使用上次處理的不可變記錄ID查詢更改。避免不一致的關鍵是使數據更改通知成為一個單獨的過程。在這種情況下,數據庫記錄是單一的事實來源。只有在首先發生變化時才會捕獲更改。

無需特定工具即可更改數據捕獲無需特定工具即可更改數據捕獲

更改數據捕獲的最大缺點是業務邏輯的分離。更改捕獲過程很可能與更改邏輯本身分開存在于您的代碼庫中 - 這很不方便。最知名的變更數據捕獲應用程序是與域無關的變更復制,例如與數據倉庫共享數據。對于域事件,最好采用不同的機制,例如明確發送事件。

事件第一

讓我們來看看顛倒的單一事實來源。如果不是先寫入數據庫,而是先觸發一個事件,然后與自己和其他服務共享。在這種情況下,事件成為事實的唯一來源。這將是一種事件源的形式,其中我們自己的服務狀態有效地成為讀取模型,并且每個事件都是寫入模型。

事件優先方法事件優先方法

一方面,它是一個命令查詢責任隔離(CQRS)模式,我們將讀取和寫入模型分開,但CQRS本身并不關注解決方案中最重要的部分 - 使用多個服務來消耗事件。

相比之下,事件驅動的體系結構關注于多個系統所消耗的事件,但并未強調事件是數據更新的唯一原子部分。所以我想引入“事件優先”作為這種方法的名稱:通過發出單個事件來更新微服務的內部狀態 - 包括我們自己的服務和任何其他感興趣的微服務。

“事件優先”方法面臨的挑戰也是CQRS本身的挑戰。想象一下,在下訂單之前,我們想要檢查商品的可用性。如果兩個實例同時收到同一項目的訂單怎么辦?兩者都將同時檢查讀取模型中的庫存并發出訂單事件。如果沒有某種覆蓋方案,我們可能會遇到麻煩。

處理這些情況的常用方法是樂觀并發:將讀取模型版本放入事件中,如果讀取模型已在消費者端更新,則在消費者端忽略它。另一種解決方案是使用悲觀并發控制,例如在檢查項目可用性時為項目創建鎖定。

“事件優先”方法的另一個挑戰是任何事件驅動架構的挑戰 - 事件的順序。多個并發消費者以錯誤的順序處理事件可能會給我們帶來另一種一致性問題,例如處理尚未創建的客戶的訂單。

諸如Kafka或AWS Kinesis之類的數據流解決方案可以保證將按順序處理與單個實體相關的事件(例如,僅在創建用戶之后為客戶創建訂單)。例如,在Kafka中,您可以按用戶ID對主題進行分區,以便與單個用戶相關的所有事件將由分配給該分區的單個使用者處理,從而允許按順序處理它們。相反,在Message Brokers中,消息隊列具有一個訂單,但是多個并發消費者在給定順序中進行消息處理(如果不是不可能的話)。在這種情況下,您可能會遇到并發問題。

實際上,在需要線性化的情況下或在具有許多數據約束的情況(例如唯一性檢查)中,難以實現“事件優先”方法。但它在其他情況下確實很有用。但是,由于其異步性質,仍然需要解決并發和競爭條件的挑戰。

設計一致性

有許多方法可以將系統拆分為多個服務。我們努力將單獨的微服務與單獨的域匹配。但域名有多細化?有時很難將域與子域或聚合根區分開來。沒有簡單的規則來定義您的微服務拆分。

我建議務實并考慮設計方案的所有含義,而不是只關注領域驅動的設計。其中一個影響是微服務隔離與事務邊界的對齊情況。事務僅駐留在微服務中的系統不需要上述任何解決方案。在設計系統時我們一定要考慮事務邊界。在實踐中,可能很難以這種方式設計整個系統,但我認為我們應該致力于最大限度地減少數據一致性挑戰。

接受不一致

雖然匹配帳戶余額至關重要,但有許多用例,其中一致性不那么重要。想象一下,為分析或統計目的收集數據。即使我們從系統中隨機丟失了10%的數據,也很可能不會影響分析的業務價值。

與事件共享數據與事件共享數據

選擇哪種解決方案

數據的原子更新需要兩個不同系統之間達成共識,如果單個值為0或1則達成協議。當涉及到微服務時,它歸結為兩個參與者之間的一致性問題,并且所有實際解決方案都遵循一條經驗法則:

在給定時刻,對于每個數據記錄,您需要找到系統信任的數據源

事實的來源可能是事件,數據庫或其中一項服務。實現微服務系統的一致性是開發人員的責任。我的方法如下:

  1. 嘗試設計一個不需要分布式一致性的系統。不幸的是,對于復雜的系統來說,這幾乎是不可能的。
  2. 嘗試通過一次修改一個數據源來減少不一致的數量。
  3. 考慮事件驅動的架構。除了松散耦合之外,事件驅動架構的強大優勢是通過將事件作為單一事實來源或由于更改數據捕獲而產生事件來實現數據一致性的自然方式。
  4. 更復雜的場景可能仍然需要服務,故障處理和補償之間的同步調用。知道有時候你可能需要在之后進行調和。
  5. 設計您的服務功能是可逆的,決定如何處理故障情況并在設計階段早期實現一致性。
責任編輯:華軒 來源: 架構師酒館
相關推薦

2019-01-15 17:58:03

微服務架構數據

2019-12-17 08:40:33

微服務架構數據

2023-11-22 12:55:59

微服務架構數據庫

2023-06-25 09:44:00

一致性哈希數據庫

2021-11-01 21:15:54

微服務系統數據

2023-06-07 08:10:29

2025-03-27 08:20:54

2024-12-26 15:01:29

2023-09-07 08:11:24

Redis管道機制

2021-12-05 21:06:27

軟件

2023-12-01 13:51:21

數據一致性數據庫

2021-10-18 10:30:59

流計算阿里云

2021-10-13 09:55:11

流計算引擎數據

2020-04-29 14:33:49

微服務網關Kong

2017-10-21 23:02:49

微服務軟件架構

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2009-06-18 09:18:08

Oracle檢索數據數據一致性事務恢復

2022-02-17 21:04:27

數據庫MysqlRedis

2021-12-14 07:15:57

MySQLRedis數據
點贊
收藏

51CTO技術棧公眾號

香蕉久久一区二区不卡无毒影院| 午夜亚洲性色视频| 91精品国产91综合久久蜜臀| 在线观看一区二区三区三州| 国产精品污视频| 欧美1区2区| 亚洲精品www久久久| 日本黄色三级大片| 午夜免费视频在线国产| 国产成人综合精品三级| 91福利视频在线观看| 久久久久亚洲av成人网人人软件| 理论片午夜视频在线观看| 国产亚洲成年网址在线观看| 国产欧美日韩91| 国产一级生活片| 一区二区美女| 91精品国产aⅴ一区二区| 僵尸世界大战2 在线播放| 美国一级片在线免费观看视频| 日本伊人精品一区二区三区观看方式| 久久精品国产久精国产思思| 永久av免费在线观看| 中日韩高清电影网| 国产丝袜欧美中文另类| 91久久精品久久国产性色也91| 麻豆亚洲av熟女国产一区二| 国产免费久久| 欧美videos大乳护士334| 91黄色小网站| 羞羞污视频在线观看| 久久久久亚洲综合| 99在线看视频| 岳乳丰满一区二区三区| 99亚洲一区二区| 日韩视频免费中文字幕| 999精品免费视频| 欧美日韩免费看片| 亚洲1区2区3区视频| 一区二区不卡在线| 大地资源中文在线观看免费版| 国产精品一区二区91| 国产成人激情小视频| 久久久久黄色片| 日本黄色精品| 亚洲区中文字幕| 97精品人妻一区二区三区蜜桃| 日本欧美在线| 欧美在线观看视频一区二区三区| 800av在线免费观看| youjizz在线播放| 久久综合999| 国产高清精品一区二区| 国产三级在线观看视频| 日本美女一区二区| 欧美一区二区影院| 国产五月天婷婷| 欧美日本三区| 久久国产精品视频| 99久久99久久精品国产| 欧美日韩伦理在线免费| 亚洲天堂色网站| 性色av蜜臀av色欲av| 日韩一区网站| 制服丝袜亚洲色图| 五月天激情播播| 亚洲免费一区| 欧美人伦禁忌dvd放荡欲情| 国产精品久久久毛片| 日韩欧美少妇| 欧美日韩精品久久久| 天天影视综合色| 精品三区视频| 欧美又粗又大又爽| 鲁一鲁一鲁一鲁一av| 国产91在线播放精品| 欧美日韩国产色站一区二区三区| 免费无码国产v片在线观看| 18video性欧美19sex高清| 亚洲高清免费观看高清完整版在线观看| 日韩福利影院| 男女av在线| 国产午夜亚洲精品羞羞网站| 四虎一区二区| 免费大片在线观看www| 有坂深雪av一区二区精品| 中文字幕一区二区三区四区五区人 | 99久久国产宗和精品1上映| 台湾佬中文娱乐久久久| 欧洲人成人精品| 国产aaaaa毛片| 日韩美香港a一级毛片| 91麻豆精品国产无毒不卡在线观看 | 久久无码专区国产精品s| 国产伦精品一区二区三区在线播放| 欧美刺激脚交jootjob| 黄色免费视频网站| 麻豆精品99| 亚洲人成人99网站| 五月婷婷六月香| 国产精品久久久久久久久久10秀| 欧美激情一区二区三区高清视频| 中文字幕亚洲精品一区| 日韩精品乱码av一区二区| 国产拍精品一二三| 好吊色一区二区三区| 久久久久国产精品人| 在线观看成人av电影| 678在线观看视频| 欧美性受xxxx| 少妇熟女视频一区二区三区 | а√中文在线8| 午夜国产精品一区| 国产主播中文字幕| 欧美日韩黄网站| 亚洲欧美资源在线| 日韩国产第一页| 亚洲韩日在线| 国产精品综合网站| 欧美少妇bbw| 国产精品妹子av| 精品国产av无码一区二区三区 | 国产欧美日韩专区发布| 亚洲欧美强伦一区二区| 国产午夜三级一区二区三| 国产一二三四五| 欧美18—19sex性hd| 日韩一级片在线播放| 日本激情小视频| 国内精品99| 国产欧美日韩精品在线观看| 无码国精品一区二区免费蜜桃| 国产精品久久看| 97超碰青青草| 亚洲成人五区| 国产一区二区动漫| 日本在线观看中文字幕| 国产尤物一区二区在线| 美女精品国产| 阿v视频在线观看| 欧美一区二区三区人| 国产真人做爰视频免费| 亚洲少妇诱惑| 99c视频在线| 超碰porn在线| 91精品麻豆日日躁夜夜躁| 丝袜美腿中文字幕| 伊人天天综合| 亚洲字幕在线观看| 在线观看a视频| 欧美亚洲国产怡红院影院| 日本黄色网址大全| 国产精品五区| 九九热久久66| www在线看| 日韩一区国产二区欧美三区| 午夜国产福利视频| 日日嗨av一区二区三区四区| 波多野结衣精品久久| a视频在线播放| 91麻豆精品国产91久久久久| 最新黄色av网址| 黑人巨大精品欧美黑白配亚洲| 天堂一区二区三区 | 亚洲av永久纯肉无码精品动漫| 亚洲日本va在线观看| 国内自拍第二页| 99九九热只有国产精品| 91麻豆国产精品| а√天堂官网中文在线| 日韩一区二区高清| 国产亚洲欧美久久久久| 成人99免费视频| 日韩五码在线观看| 午夜欧洲一区| 国产成人精品免费久久久久| 无码国产精品一区二区免费16| 亚洲成人免费看| 精品国产一区在线| 亚洲视频大全| 欧美激情论坛| 国产精品亚洲d| 爱福利视频一区| 国产免费黄色片| 亚洲一区免费观看| 朝桐光av一区二区三区| 日韩经典中文字幕一区| 亚洲永久激情精品| 亚洲一区 二区| 性欧美视频videos6一9| 香蕉视频免费看| 欧美午夜电影一区| 成人观看免费视频| 99re免费视频精品全部| 999精彩视频| 永久亚洲成a人片777777| 91深夜福利视频| 久久男人天堂| 深夜福利国产精品| 亚洲国产精品成人久久蜜臀| 午夜久久久久久久久| 精品国产av无码| 国产在线精品一区二区| 精品无码国产一区二区三区av | 99精品在线直播| 日韩在线伦理| 日韩视频一区在线| 神马久久高清| 欧美又粗又大又爽| 国产一二三四在线| 国产精品美女久久久久久久久| 91视频免费入口| 久久精品官网| 国产 欧美 日本| 国产成人短视频在线观看| 91麻豆桃色免费看| 这里有精品可以观看| 超碰日本道色综合久久综合| 性xxxx18| 91精品黄色片免费大全| 国产性70yerg老太| 久久品道一品道久久精品| 三日本三级少妇三级99| 亚洲专区欧美专区| 成人在线免费高清视频| 精品国产精品久久一区免费式| 亚洲影影院av| 成人福利一区二区| 97av在线影院| 午夜伦理在线视频| 最近2019中文字幕第三页视频| 亚洲av电影一区| 精品国产在天天线2019| 日韩精选在线观看| 偷窥少妇高潮呻吟av久久免费| 久草手机视频在线观看| 久久精品一区八戒影视| 中国一级特黄录像播放| 国产成人午夜精品5599| 岛国av免费在线| 久久久久久久高潮| 和岳每晚弄的高潮嗷嗷叫视频 | 欧美黑人在线观看| 天天做天天爱天天综合网| 免费观看国产成人| 神马久久av| 精品视频导航| 美女一区2区| 国产精品制服诱惑| 亚洲午夜免费| 99se婷婷在线视频观看| 国产精品久久免费视频| 国产精品视频免费在线观看| 日韩pacopacomama| 97超碰色婷婷| 国产在线观看www| 久久久最新网址| 91精品国产黑色瑜伽裤| 欧美国产日本在线| 色呦呦呦在线观看| 久久久欧美精品| 日本www在线观看视频| 精品亚洲国产视频| 999视频在线观看| 人人鲁人人莫人人爱精品| 91精品国产免费久久久久久| 精品黄色免费中文电影在线播放| 色先锋资源久久综合5566| 国产小视频免费在线观看| 伊人精品在线观看| 欧美成人性生活视频| 久久最新资源网| 国产啊啊啊视频在线观看| 欧美激情视频一区| free性护士videos欧美| 97av在线视频| 午夜av成人| 成人久久久久爱| 亚洲第一二区| 国产伦理一区二区三区| 日韩成人午夜| 日本一区二区在线| 91精品国产视频| 国产精品无码免费专区午夜| 国产一区二区三区四区老人| 精品无码一区二区三区爱欲| 鲁大师成人一区二区三区| mm1313亚洲国产精品无码试看| 麻豆成人综合网| 中文字幕人妻熟女人妻a片| 不卡的av电影在线观看| 国产精品九九视频| 91网址在线看| 国产三级黄色片| 一区二区在线观看不卡| 亚洲精品视频在线观看免费视频| 色综合久久久久综合体| 一级片在线免费观看视频| 精品国产乱子伦一区| 国产美女性感在线观看懂色av | 国产精品视频999| 精品国产不卡一区二区| 久久99精品国产一区二区三区| 成人精品久久| 日韩在线观看a| 在线欧美视频| 91激情视频在线| 国产成人精品午夜视频免费| b站大片免费直播| 亚洲三级理论片| 丁香六月婷婷综合| 欧美一区二区三区白人| 日本ー区在线视频| 久久av在线播放| 成人免费看黄| 91文字幕巨乱亚洲香蕉| 九九视频免费观看视频精品| 国产亚洲精品久久久久久久| 久久一区欧美| 亚洲精品视频三区| 久久久久99精品国产片| 国产一级性生活| 精品视频免费看| 日本a一级在线免费播放| 中文字幕亚洲一区二区三区| 国模精品视频| 亚洲xxx大片| 日韩欧美精品一区| 浮妇高潮喷白浆视频| 国产一区二区调教| 日本一区二区视频在线播放| 婷婷丁香久久五月婷婷| 国产wwwwwww| 中文字幕久久亚洲| 亚洲三级欧美| 翡翠波斯猫1977年美国| 91精品国产91久久久久久黑人| 噼里啪啦国语在线观看免费版高清版| 99久久久精品免费观看国产蜜| 日产电影一区二区三区| 亚洲激情在线视频| 不卡视频观看| 久久国产手机看片| 国产精品日本欧美一区二区三区| 精品视频站长推荐| 午夜激情久久久| 欧洲视频在线免费观看| 欧美在线观看网址综合| 国产欧美高清视频在线| 日韩免费高清在线| 国产精品天干天干在线综合| 免费看av在线| 久久视频在线直播| 欧美久久亚洲| 黄色国产一级视频| 91在线丨porny丨国产| www.色国产| 中文字幕日韩欧美| 白嫩亚洲一区二区三区| 麻豆一区二区三区在线观看| 成人性视频免费网站| 天堂网av手机版| 在线日韩av观看| 精品视频一二| 日日摸日日碰夜夜爽无码| 91看片淫黄大片一级| 最近中文字幕在线视频| 久久这里只有精品视频首页| 波多野结衣在线一区二区| 狠狠97人人婷婷五月| 国产欧美日韩综合精品一区二区| 在线视频 91| 欧美另类交人妖| 性欧美lx╳lx╳| 激情文学亚洲色图| 亚洲第一综合色| 成人av电影观看| 97超碰人人看人人| 手机精品视频在线观看| 夫妻性生活毛片| 亚洲精品电影网站| 亚洲精品无播放器在线播放| 国产中文字幕乱人伦在线观看| 久久久亚洲精品一区二区三区 | 亚洲欧美在线网| 高清成人在线观看| 欧美三级网站在线观看| 色中色综合影院手机版在线观看| 伊人成综合网yiren22| www.色.com| 欧美日韩亚洲一区二| 久久日韩视频| 欧美日韩综合久久| 国产精品夜夜嗨| 精品久久久久久久久久久久久久久久| 久久久国产精品x99av| 久久99国内| 香蕉视频免费网站| 欧美精品久久一区| 一区二区精品伦理...|