Database
分佈式(無伺服器)數據庫系統
我目前有一個設置,其中 10 個數據庫客戶端訪問同一網路上的一個 (Postgres)-SQL 伺服器。這些應用程序的數據庫佔用量非常低。他們確實在啟動時載入了一些表,並且在執行時執行了很少的操作(可能每小時 100 次操作)。
但是數據庫伺服器對於系統操作至關重要。只要數據庫伺服器存在,所有其他客戶端就可以彼此冗餘地執行相同的任務。而且我不只是建構一個冗餘數據庫伺服器。
我正在嘗試做的事情:讓每個客戶端也成為數據庫伺服器,並從系統中刪除專用伺服器。我想在每個客戶端上形成一個分佈式數據庫系統(可能是一個動態分佈式網格)。同步應該或多或少透明地完成。只要一個客戶還活著:一個人應該有一個工作數據集。這個客戶端是否擁有上一個垂死客戶端的最新工作集不是很重要嗎,但結構仍然有效並且他可以進行下一個操作。
我之前說過:目前系統的 db ops 佔用空間非常低,並且可以輕鬆重做 db 程式碼。重要的是:找到最適合建構這種冗餘的數據庫系統。
關於實現的任何想法,或者至少是我在研究該主題時應該閱讀的內容。因為我以前從來沒有做過這樣的事情。
謝謝
您可以在每個客戶端上安裝數據庫伺服器,讓應用程序連接到 localhost 並在客戶端之間設置多主機複製,但是:
- 備份呢?中央數據庫伺服器確實更容易備份和恢復。
- 縮放呢?客戶端上的數據庫不能很好地擴展。
- 網路延遲怎麼辦?您沒有寫到所有客戶端都在同一個 LAN 上,但是如果有一些不太可靠的連接,數據庫可能會出現嚴重問題
- 不要忘記腦裂等情況。如果數據庫在某個節點上崩潰,應用程序會做什麼?應該連接到不同的節點嗎?它將如何檢測另一個節點?
確實有很多缺點,我不建議您這樣做。只需設置兩個/三個鏡像數據庫伺服器並讓客戶端連接到它們,理想情況下是通過 haproxy 或其他負載均衡器。