地理分佈的 Web 應用程序如何處理儲存的數據?
假設…我從澳大利亞登錄了一個網路應用程序並更改了一些數據。在美國,我的同事使用相同的系統並想查看我更改的數據。Web 應用程序如何在本地為澳大利亞使用者部署,為美國使用者在本地部署(為了性能)但共享數據?
Google、Facebook 或任何其他全球系統如何提高不同國家/地區使用者的性能,但仍保持數據同步,以防使用者前往不同地點或數據在全球範圍內使用。或者他們實際上是否將數據庫伺服器放在一個位置?
至於 Facebook、Google 等:數據庫伺服器並非都在一個位置,當然也不是所有時間都完全同步。他們都在不同地理區域的多個伺服器集群上採用分佈式系統。
集群分佈在許多國家。集群之間的更新頻率取決於系統可接受工作的需要。
如果您使用 Facebook,例如: 大多數時間您與自己國家的朋友交流。因此,在您的國家/地區保留伺服器將立即生效,您的朋友將立即看到您的消息。
其他國家的朋友可能會有延遲,具體取決於集群伺服器節點的更新頻率。IIRC Facebook 集群通過在需要時從其他集群請求資訊來進行互動。很多時候,我收到一條消息,說“此使用者已將狀態更新為等等”。點擊整個消息的連結時,我收到一條錯誤消息。這是集群之間的同步問題。一些資訊已同步,而另一些資訊尚未同步。
如何建構基礎架構取決於使用者數量、數據需要同步的頻率等。
另一個例子,電子郵件:電子郵件系統是一個遍布全球的分佈式系統。與擁有 100 萬使用者的伺服器相比,擁有單個使用者的伺服器並沒有那麼繁忙。您將如何解決繁忙伺服器的傳遞問題?更分佈式的本地伺服器?更強大的伺服器?更強大的網際網路連接?上述所有的?由於電子郵件的基本概念(將消息從一個節點傳遞到另一個節點)無論電子郵件使用者的數量如何都不會改變,因此您需要設計特定的系統以適應所有使用者。無論您如何設計系統,有時電子郵件都會延遲傳遞,因為鏈中其他節點上的流量過多。
同樣的概念也適用於 Facebook。他們為特定地區設計和建造農場,但整個系統依賴於“地理差異”。也就是說,與其他地區相比,您更有可能與您所在地區的使用者進行互動。
至於您的特定問題:這完全取決於有多少使用者。
單個數據庫伺服器(或集群伺服器)可能適合您。如果需要分佈式集群伺服器場,那麼您可能必須像 Facebook 和 Google 那樣編寫自己的同步系統。此解決方案取決於您的使用者需要什麼以及系統的預期工作方式。我不知道有任何標準化系統是“適用於所有人”的解決方案。
我在這裡咆哮了很多,現在已經很晚了,我可能完全偏離了目標,但是嘿,這是我的 2 美分。
乾杯!