分佈式設計模式-事務發件箱2(發佈數據方式)

事務發件箱請模式請參考:傳送門html

發送數據的兩種方式

  • 輪詢發佈數據
  • 事務日誌拖尾

輪詢發佈數據

能夠經過線程一直循環查詢OUTBOX操做,也能夠使用定時任務循環查詢OUTBOX表,將這些消息發送給消息代理,最後把完成的發送的消息從OUTBOX表中刪除。git

例如sqlgithub

select * from outbox order by id

begin
delete from outbox where id in (...)
commit
複製代碼

輪詢數據庫是一種在小規模下運營良好的簡單方法。以弊端是常常輪詢數據庫可能形成昂貴的開銷(致使數據庫性能降低)。sql

事務日誌拖尾

每次應用程序提交到數據庫的更新都對應着數據庫書屋日誌中的一個條目。事務日誌挖據器能夠讀取事務日誌,把每條跟小學有關的記錄發送給小學代理,下圖展現了這個方案的具體實現方式。 數據庫

transaction-log-miner讀取事務日誌的條目,它將對應於插入小學的每一個相關的日誌條目轉換爲消息,並將消息發佈到消息代理。這個方案有一些實際的應用案例和實現可供參考。bash

  • Debezium:一個開源項目,它能夠向kafka消息代理髮布消息更改
  • LinkedIn Databus: 一個開源項目,用於挖掘Oracle事務日誌文件並將更愛發佈爲事件。
  • DynamoDb streams:包含過去24小時內的DynamoDB表更改的序列,而且這個序列是按時間排序的。應用程序能夠從流中讀取這些更改。
  • Eventuate Tram:它使用MYSQL binlog協議、Postgres WAL 或輪詢來讀取對OUTBOX表所作的更改並將它們發佈到kafka。
相關文章
相關標籤/搜索