一、分布式事務的本質
本質上要解決,邏輯上是乙個事務,但是**又是在兩個程序裡面實現,spring的事務管理不能跨程序的問題。
那麼就需要用第三方介質記錄當前這個分布式事務邏輯的狀態,一般用資料庫或redis快取記錄。
二、kafka+本地訊息表實現的關鍵點
生產者:
生產者本地業務邏輯執行完成之後,往資料庫插入一條待傳送的資料(在乙個事務內,要麼全部成功,要麼全部失敗)
然後從資料庫去取這條待傳送的資料,傳送到kafka,狀態更新為已傳送(乙個事務)。
消費者:
消費者從kafka取出訊息之後,將訊息資料庫資料更新為待消費(在乙個事務內,要麼全部成功,要麼全部失敗)
然後從資料庫去取這條待消費的資料,進行消費端的業務處理,處理完成之後,狀態更新為已消費(乙個事務)。
定時任務掃瞄資料庫的待傳送資料,如果有,則代表有生產者本地執行成功,
但是傳送到kafka失敗的情況,那就重新傳送。
定時任務掃瞄資料庫的待消費資料,如果有,則代表有消費者訊息取到了,
但是執行本地邏輯沒有成功,那就重新執行消費邏輯。
總結:
生產者和消費者的本地業務邏輯和往kafka訪問訊息的邏輯要拆分開,用第三方介質記錄當前這條訊息的狀態。
保證生產者本地業務執行完畢了才往kafka傳送,傳送失敗了可以重發。
保證消費者從fafka獲取訊息之後才執行消費邏輯,執行消費邏輯失敗了可以重新執行。
其實就是保證了本地業務邏輯和kafka的訪問拆分成兩個事務。
三、優缺點
優點:
事務吞吐量大. 因為不需要等待其他資料來源響應.
缺點:
1、容易出現較多的中間狀態,保證不了實時性。
比如生產者已經傳送資料了,但是消費者才執行到第一步
(拉取訊息,留證據到本地資料庫訊息表),這個時候使用者登入之後,
可能就看不到消費後的資料。在實時性要求高的業務不太適用。
2、與具體業務場景繫結,偶爾性強,不可以共用。
四、適用場景:
1、實時性要求不高,只要滿足最終一致性的情況
2、生產者的邏輯是否成功,不依賴於消費者的邏輯執行是否成功的情況,
比如:下訂單和出庫,這就是典型的生產者的邏輯要依賴於消費者的邏輯
是否執行成功。
因為下訂單,如果庫存不夠,那麼訂單也是不能成功的。
分布式事務 分布式事務的實現
如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
事務,分布式系統實現事務
1.事務概念 事務是指邏輯上的一組操作,組成該操作的各個單元,要麼全部執行成功,要麼全部執行失敗 只有全部執行成功後,事務才會提交,若有乙個單元執行失敗,那麼所有資料都會通過回滾自動恢復.回滾機制 當事務內部有乙個操作執行失敗後,那麼將會撤銷所有已完成的更新操作 2.事務的四大特性 1 原子性 即不...