0

想象一下將文件上傳到Amazon S3,併成功將文件(和元數據)的位置存儲在ElasticSearch的記錄中。好沒關係。如何保持數據一致? (Amazon S3和ElasticSearch)

但是,你如何確保數據的一致性(ACID?)如果請求的一個失敗... 例如,如果ElasticSearch服務unavailible

  • S3的文件必須被刪除
  • 但如果S3上的刪除失敗怎麼辦

這會導致不一致的狀態。

所以問題是你如何保持這些實例同步?

思路是:

  • 如果有不一致的狀態,用戶請求ElasticSearch記錄,並沒有什麼發現S3的記錄被刪除。 (meeh)
  • 批量作業搜索數據庫的不一致性並將其刪除。
  • 運行在一個事務中都要求在數據庫中,如果一個失敗 - >回退和稍後重試(隊列,工作=矯枉過正?)

回答

0

酸是不可能在這種情況下,當你與最終一致的系統工作。

你的第三個建議是最接近最佳做法。

該系統的參考體系結構是將對象寫入AWS S3,然後將S3 Bucket通知用於AWS Lambda以執行對Elasticsearch的寫入。如果在S3-> Lambda-> Elasticsearch的通知階段寫入失敗,請使用死信SQS隊列收集損壞的作業,然後使用CloudWatch Events-> Lambda定期清理隊列。