我們有一個基於Restlet框架構建的基於REST的應用程序,它支持CRUD操作。它使用本地文件來存儲數據。分佈式系統中的數據同步
現在需要在多個VM上部署此應用程序,並且一個VM中的任何更新操作都需要傳播其他VM上運行的其他應用程序實例。
我們想要解決這個問題的想法是在給定虛擬機中發生更新操作時發送多個POST消息(對所有其他應用程序)。 這裏的假設是每個應用程序都有一個所有其他應用程序的列表/ URL。
有沒有更好的方法來解決這個問題?
我們有一個基於Restlet框架構建的基於REST的應用程序,它支持CRUD操作。它使用本地文件來存儲數據。分佈式系統中的數據同步
現在需要在多個VM上部署此應用程序,並且一個VM中的任何更新操作都需要傳播其他VM上運行的其他應用程序實例。
我們想要解決這個問題的想法是在給定虛擬機中發生更新操作時發送多個POST消息(對所有其他應用程序)。 這裏的假設是每個應用程序都有一個所有其他應用程序的列表/ URL。
有沒有更好的方法來解決這個問題?
Consistency是一個很深的話題,和一個hard thing to get right。當兩個幾乎同時發生的變化發生在同一個數據上時,問題就來了:衝突的更新可以在一個服務器上以一個順序到達,而在另一個服務器上以另一順序到達。這是一個問題,因爲兩臺服務器不再同意數據是什麼,並且不清楚誰是「正確的」。
小故事:獲得您最喜愛的RDBMS(例如,mysql很受歡迎),並讓您的應用程序服務器連接到所謂的three-tier model。請務必在transactions中執行復雜的更新,這將提供可接受的一致性模型。
長篇小說:三層模式適用於中小型網站/服務。您最終會發現單個數據庫成爲瓶頸。對於讀取流量遠大於寫入流量的服務,通常的優化是創建一個單主控,多從屬數據庫複製安排,其中所有寫入都轉到單個主控(爲了與非分佈式事務保持一致所需),但是更常見的讀取可以發送給任何讀取的從機。
對於具有均勻混合讀寫流量的服務,可以通過刪除一些正式SQL提供的便利(以及附帶的限制)來更好地服務,而不是使用各種「nosql」數據存儲之一最近出現了。他們相對的優點和對各種問題的適應性本身就是一個深刻的話題。
我現在可以看到7個主要選項。你應該瞭解更多的細節,並決定設施/權衡是否適合你的目的