保持伺服器同步的最佳方法,同步之間沒有任何損壞/失去的文件
我假設這是提出這類問題的正確地方,但如果我應該去另一個 Stack Exchange,請不要開槍。
Anyhoo,您認為保持伺服器同步的最佳方法是什麼?顯然,使用 Rsync 之類的東西,但這就是問題所在。假設您有兩台伺服器託管完全相同的文件。您的 A 記錄將同一域指向兩台伺服器。基本上我們在這裡看到的是一個基本的循環負載平衡設置。
如果您有靜態文件,這顯然可以正常工作,但是使用者上傳呢?假設您託管一個簡單的基於板的站點(如 4chan)並在兩台伺服器之間進行負載平衡。假設一個人上傳了一張圖像,它被儲存到他們的 PC 連接到的任何伺服器上(來自循環 DNS),但在那一刻,另一個人過來查看文件,但他們連接到另一台伺服器,並且在文件有時間在兩台伺服器之間同步之前,它們會留下一個損壞的圖像。
我想辦法解決這個問題可能是為每個伺服器設置一個單獨的子域,如果文件沒有同步,則從它已經在的任何伺服器載入(使用一些神奇的 PHP 程式碼)。我敢肯定,一定有一些更簡單的東西。
編輯:
顯然,我說的只是託管在幾個 VPS 上的小規模東西(這更像是一個假設性的問題,可能會在一段時間內使用),而不是像 Facebook 和Google這樣具有定制技術的大型數據中心
確保多台機器可以訪問相同數據的“最正確”方法是將數據放在所有機器都可以訪問的共享文件系統上。NFS 是規範的解決方案,但它遠非唯一的選擇。
如果您希望堅持使用基於 rsync 的東西,這對於小型站點來說是完全可行的。避免潛在“失去數據”問題的最佳方法是保存文件並將其同步到另一台電腦,然後再發迴響應。這會減慢文件上傳響應速度,但這確實意味著您不會有任何可能通過以後的請求在任何一台機器上都無法使用文件數據——在向上傳發出響應之前,客戶端不能對資源的存在做出任何假設。同樣,在為它在數據庫中記錄之前保存並同步文件,以防止另一個請求(例如,列舉數據庫中的條目)在文件無處不在之前引用該文件。