2014-01-19 55 views
0

我們目前正在設計具有基於訂戶/用戶的操作模式的SaaS應用程序。例如,單個用戶的帳戶中可以有5個,10個或最多25個用戶,具體取決於他們所在的包的類型。適用於多租戶架構的mongodb連接處理

目前我們正在爲每租戶方法使用單個數據庫。從應用的角度來看,這對我們有幾個好處。

我讀過關於Mongo的連接限制,我有點困惑和擔心。我希望有人能夠簡單地爲我澄清一下,因爲我對Mongo沒有太多的工作。

從我所瞭解的情況來看,mongod進程和mongos進程有20,000個連接的硬性限制。

這如何轉化爲這種多租戶方法?我試圖基本上評估我將如何部署應用程序在一般情況下副本集和如果分片是必要的,以便我沒有達到這些限制。例如,如果您有10,000名擁有多個用戶的租戶超出限制,那麼該如何處理這種情況。

我們的應用程序通常不需要分片,因爲每個租戶集合都不會達到需要分片的地步。據我所知,MongoDB將在每個碎片上以循環方式創建數據庫,並分發可能有助於解決連接問題的負載。

這是我只是試圖理解我讀過的內容,我希望有人能夠爲我解決這個問題。

在此先感謝

編輯

如果我只是添加副本集,這將緩解這一問題?即使只有主要人員可以接受我所瞭解的寫入?

回答

0

您只需將數據庫連接存儲在池中並在重新訪問同一數據庫時重新使用它。這將限制連接的數量到一個合理的數字,除非你不使用10,000個數據庫,這不會是一個好主意。

+0

這是怎麼解決問題呢?如果我正在使用連接池並且總活動用戶數超過了池中可以擁有的連接數,那麼這是如何擴展的呢?我正在尋找一個平均分配負載而無連接問題的答案。這意味着MongoDB中每個數據庫多租戶方法的單個租戶有一個嚴格的限制,但我懷疑可能是這種情況。其他人如何在連接方面處理這種架構? – user1891085

+0

如果您擁有10,000個租戶,並且每個租戶都有自己的數據庫,並且您希望僅使用一個應用程序服務器處理此情況,則這將無法工作。您應該過度使用數據庫模式,或者您必須通過處理不同服務器上的組中的租戶來「分割」 - > appServer1/dbServer1上的tenant1-1000,appServer2上的tenant1001-2000/dbServer2 a.s.o. – heinob

+0

這是我試圖找到的東西。我需要什麼類型的網絡拓撲才能實現這個結果?基本上,應用程序不需要從集合的角度來分解,而是從你所說的話,從租戶的角度來看,那麼是的,這是需要的。 – user1891085