精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

蜜桃无码一区二区三区| 亚洲福利一区二区三区| 日韩亚洲欧美成人一区| 日韩高清国产一区在线观看| 久久久.www| 女人让男人操自己视频在线观看| 久久久久久久久99精品大| 欧美性猛xxx| 国产精品久久国产三级国电话系列| 免费在线观看a视频| 色偷偷偷在线视频播放| 日本一区二区三区久久久久久久久不| 国内精品视频在线| 日本少妇xxxx软件| 青草在线视频| 亚洲第一天堂| 亚洲欧美日韩在线高清直播| 波多野结衣之无限发射| 老司机午夜福利视频| 欧美在线视屏| 日韩欧美国产综合在线一区二区三区| 欧美h视频在线观看| 国产一区二区视频免费观看| 成人一区而且| 欧美日韩精品久久久| 亚洲人一区二区| 中文字幕在线观看你懂的| 日韩情爱电影在线观看| 欧美精品视频www在线观看| 小说区图片区图片区另类灬| 中文字幕有码无码人妻av蜜桃| 亚洲视频狠狠| 亚洲精品久久久久中文字幕欢迎你 | 黄色一级片中国| 欧美高清你懂的| 自拍偷拍亚洲欧美日韩| 91视频最新| 国产精久久久久久| 欧美日韩麻豆| 欧洲精品一区二区三区在线观看| 一区二区三区四区五区精品 | 亚洲精品自在在线观看| 中国a一片一级一片| 欧洲三级视频| 69堂国产成人免费视频| 福利视频免费在线观看| 日本韩国一区| 麻豆成人91精品二区三区| 大胆人体色综合| 日韩av手机在线播放| 欧美成人资源| 亚洲人精品午夜| 国产视频一区二区不卡| 免费黄色片视频| 亚洲视频在线免费| 日韩精品免费视频| 亚洲免费黄色网| a毛片不卡免费看片| 久久免费电影网| 亚洲综合日韩在线| 成人毛片18女人毛片| 97久久视频| 亚洲激情在线观看| 伦理片一区二区| 91国拍精品国产粉嫩亚洲一区| 亚洲色图在线播放| 永久域名在线精品| 婷婷五月综合激情| 另类小说一区二区三区| 国产精品香蕉av| 日韩av男人天堂| 久久精品国产99久久| 中文字幕欧美精品在线| 成人在线视频免费播放| 久久精品福利| 欧美一区二区精品在线| 欧美激情国产精品日韩| 最新国产在线观看| 99久久精品国产网站| 国产日韩在线播放| caoporn国产| 亚洲天堂男人| 4438全国成人免费| 国产亚洲精品av| 亚洲高清成人| 久久福利网址导航| 国产精品综合激情| 亚洲人成亚洲精品| 亚洲成人激情图| 日韩不卡的av| 日韩午夜电影免费看| 欧美午夜电影在线| 亚洲少妇久久久| 综合日韩av| 亚洲狠狠爱一区二区三区| 亚洲欧洲一区二区| 亚洲www色| 亚洲男人的天堂在线aⅴ视频 | 少妇精品高潮欲妇又嫩中文字幕| 91免费观看在线| 国产不卡一区二区三区在线观看| 一级aaaa毛片| 另类调教123区| 9a蜜桃久久久久久免费| 国产熟女一区二区三区四区| 美女视频网站久久| 国产精品高精视频免费| 成人毛片在线播放| 亚洲美女少妇无套啪啪呻吟| 欧美福利视频在线| 少妇影院在线观看| 午夜国产一区| 国产精品jvid在线观看蜜臀| 日本熟妇一区二区三区| 国产精品一区二区三区99| 91免费欧美精品| 97超碰资源站| 91在线观看免费视频| 成年人黄色在线观看| 97久久香蕉国产线看观看| 日韩你懂的在线播放| youjizz亚洲女人| 色爱综合网欧美| 91精品国产自产91精品| 亚洲熟妇无码乱子av电影| 精品亚洲免费视频| 92看片淫黄大片看国产片| 免费在线黄色影片| 国产精品嫩草99a| 丰满女人性猛交| 成人在线视频播放| 欧美老年两性高潮| 天天躁日日躁aaaxxⅹ| 成人同人动漫免费观看| 欧美资源在线观看| 中文字幕日韩三级| 91蜜桃免费观看视频| 97超碰人人澡| 桃花岛tv亚洲品质| 亚洲精品国产精品久久清纯直播 | 国产人妻人伦精品1国产丝袜| 欧美尿孔扩张虐视频| 色综合视频一区中文字幕| 91免费视频播放| 国产精品久线观看视频| 免费涩涩18网站入口| 精品国产日韩欧美| 国产成人小视频在线观看| 日本黄在线观看| 日韩欧美福利视频| 免费黄色在线视频| 毛片一区二区| 国产视频福利一区| 中文字幕日本在线| 欧美日韩激情在线| 天天操夜夜操av| 亚洲福利精品| 国产不卡一区二区在线观看 | 婷婷中文字幕在线观看| 91蝌蚪精品视频| 亚洲一级黄色片| 免费三片在线播放| 国产91高潮流白浆在线麻豆| 日本不卡一区二区三区视频| 国产成人午夜| 日韩欧美中文在线| 欧美性猛交xxxx乱| 蜜乳av一区二区三区| 色中文字幕在线观看| 秋霞午夜一区二区三区视频| 亚洲人成在线播放| 久久免费播放视频| 成人免费视频app| 伊人久久大香线蕉精品| 亚洲一区导航| 亚洲欧美一区二区三区情侣bbw| 国产超碰人人爽人人做人人爱| 91老师片黄在线观看| 亚洲 中文字幕 日韩 无码| 伊人精品综合| 日韩在线一区二区三区免费视频| 亚洲精品在线观看av| av不卡在线观看| 69精品丰满人妻无码视频a片| 欧美aaa视频| 久久精品成人一区二区三区| 看黄色一级大片| 国产精品电影一区二区三区| 久久久久久香蕉| 国产精品黑丝在线播放| 国产精品久久久久久久久久久不卡| 99青草视频在线播放视| 精品国产污污免费网站入口| 久久国产波多野结衣| 美女视频黄久久| 肉大捧一出免费观看网站在线播放| 电影一区电影二区| 亚洲天堂日韩电影| 国产99久久九九精品无码免费| 国产精品久久久久久久久快鸭 | gogo大尺度成人免费视频| 久久免费国产视频| 婷婷免费在线视频| 欧美视频一二三区| 久久久久久久毛片| 国产精品一区二区三区四区| 国产精品亚洲二区在线观看| 亚洲91久久| 欧美日本国产精品| 六月婷婷综合| 亚洲天堂第二页| www.精品久久| 一区二区三区波多野结衣在线观看| 天天综合成人网| 亚洲欧美日韩国产一区二区| 久久久www免费人成黑人精品| 51精品在线| www.日韩免费| 国产色综合视频| 色天天综合色天天久久| 亚洲自拍偷拍图| 成人免费va视频| 深夜福利网站在线观看| 美女精品自拍一二三四| 玩弄japan白嫩少妇hd| 亚洲日本激情| 欧美污视频久久久| 伊人www22综合色| 91香蕉电影院| 四虎精品永久免费| 国产精品视频大全| 国产原创视频在线观看| 欧美成人一级视频| www.日本精品| 亚洲影院久久精品| 欧美日韩大片在线观看| 一区二区三区在线观看欧美| 182在线视频| 水野朝阳av一区二区三区| 色一情一区二区三区四区| 欧美三级午夜理伦三级小说| 高清视频一区| avtt综合网| 成人免费视频网站| 亚洲精品a区| 5g影院天天爽成人免费下载| 精品国产亚洲一区二区在线观看| 隔壁老王国产在线精品| 在线视频中文字幕第一页| 亚洲精品xxxx| 手机在线观看毛片| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 黄色三级生活片| 欧美国产欧美综合| 日韩久久久久久久久久久| 韩国毛片一区二区三区| 天堂av在线8| 国产精品美女久久久| 亚洲一区二区三区加勒比| 区一区二视频| 欧美日韩视频免费在线观看| 91国语精品自产拍| a级片一区二区| 激情综合网址| 日本精品免费在线观看| 欧美日韩综合| 午夜视频久久久| 久久激情电影| 看全色黄大色大片| 精品美女视频| 一本一本久久a久久精品综合妖精| 久久久久国产| 久久久久久久久久久99| 午夜亚洲激情| 九色porny自拍| 久久高清免费观看| 性刺激的欧美三级视频| 国产精品中文有码| 免费成人蒂法网站| 欧美激情资源网| 欧美日韩中文字幕在线观看| 高潮白浆女日韩av免费看| 久久免费公开视频| 欧美日韩亚洲网| 国产又粗又猛又爽又黄的| 色狠狠综合天天综合综合| ,一级淫片a看免费| 精品福利视频一区二区三区| 免费在线毛片| 欧美成人手机在线| 日本在线影院| 成人精品久久av网站| 欧美aaa级| 国产伦一区二区三区色一情| 日韩电影在线视频| 99热久久这里只有精品| 青青草精品视频| 国产成人av影视| 国产盗摄精品一区二区三区在线 | 国产成年人免费视频| 欧美手机在线视频| 国精产品一品二品国精品69xx| 亚洲视频欧洲视频| 欧美精品videosex| 国产精品视频999| 国产精品久av福利在线观看| 91精品久久久久久久久青青| 国产欧美啪啪| 中文字幕一区二区三区四区五区| 在线综合欧美| 男生和女生一起差差差视频| 精品在线免费视频| 中文字幕第17页| 99久久久国产精品免费蜜臀| 99成人在线观看| 日韩欧美极品在线观看| 精品国产一级片| 一区二区在线免费视频| a中文在线播放| 日韩在线观看精品| 在线视频cao| 国产经典一区二区三区| 国产精品久久天天影视| 天天摸天天碰天天添| 不卡一区在线观看| 91精品小视频| 一区二区三区在线视频观看| 中文字幕在线一| 精品丝袜一区二区三区| 国产精品视频一区二区久久| 中文字幕在线日韩 | lutube成人福利在线观看| 欧美亚洲视频在线看网址| 6080亚洲理论片在线观看| 97超碰人人爱| 精品一区二区免费看| 天天操天天干天天操天天干| 色综合久久88色综合天天6| 中文字幕乱码人妻二区三区| 亚洲精品在线91| 筱崎爱全乳无删减在线观看| 国产免费一区二区三区| 亚洲国产精品一区| 亚洲香蕉中文网| 亚洲成人免费视| 日韩一卡二卡在线| 中文字幕亚洲专区| 欧美性suv| 日韩高清专区| 蜜桃av一区二区在线观看| 亚洲精品国产精品乱码在线观看| 夜夜精品视频一区二区| 国产成人精品一区二三区四区五区 | 91精品福利| 自拍偷拍激情视频| 亚洲成人精品在线观看| 亚洲AV成人无码一二三区在线| 国产一区二区三区在线观看视频| 成人片免费看| 日韩精品av一区二区三区| 秋霞午夜av一区二区三区| 久久视频一区二区三区| 欧美高清你懂得| 黄色在线观看视频网站| 国产精品九九久久久久久久| 欧美视频网址| 天天色天天综合网| 亚洲精品乱码久久久久久| 欧美一区二区在线观看视频| 欧美在线一级视频| 欧美理论在线播放| 日韩av片免费观看| 亚洲一区二区精品3399| 网站黄在线观看| 国产精品久久久久久久天堂| 999久久久91| 久久久久无码国产精品一区李宗瑞 | 99久久久久国产精品免费| 亚洲国产专区| 级毛片内射视频| 欧美一区二区三区色| zzzwww在线看片免费| 91久久精品国产91性色| 欧美日本三区| 91l九色lporny| 欧美一区二区久久久| 欧美裸体视频| 亚洲一区二区在线看| 成人一区二区三区视频在线观看| 久久亚洲天堂网| 久久在线免费观看视频| 久久久精品国产**网站| 亚洲久久中文字幕| 亚洲地区一二三色| 日本在线免费看| 麻豆av一区二区三区| 影院欧美亚洲| 一级黄色录像毛片| 亚洲国产成人在线视频| 另类一区二区三区|