Non consiglierei di creare e gestire manualmente quelle connessioni separate. Non conosco i dettagli dei tuoi requisiti multi-tenant (numero di tenant, dimensione dei database, numero previsto di transazioni, ecc.), ma penso che sarebbe meglio usare qualcosa come Funzione useDb di Mongoose . Quindi Mongoose può gestire tutti i dettagli del pool di connessioni.
aggiornamento
La prima direzione che esplorerei è configurare ogni tenant su un processo di nodo separato. Esistono alcuni vantaggi interessanti nell'esecuzione dei tenant in processi di nodo separati. Ha senso dal punto di vista della sicurezza (memoria isolata) e dal punto di vista della stabilità (un arresto anomalo del processo del tenant non ha effetto sugli altri).
Supponendo che tu stia basando la tenancy sull'URL, configureresti un server proxy davanti ai server tenant effettivi. Il suo compito sarebbe guardare l'URL e indirizzarlo al processo corretto in base a tali informazioni. Questo è un node http proxy molto semplice impostare. Ogni istanza del tenant potrebbe essere la stessa identica base di codice, ma avviata con una configurazione diversa (che indica loro quale stringa di connessione mongo usare).
Ciò significa che puoi progettare la tua applicazione effettiva come se non fosse multi-tenant. Ogni processo conosce solo un database mongo e non è necessaria una logica multi-tenant. Ti consente inoltre di suddividere facilmente il traffico in un secondo momento in base al carico. Se hai bisogno di dividere gli inquilini per motivi di prestazioni, puoi farlo in modo trasparente a livello di proxy. Il DNS può rimanere tutto lo stesso e puoi semplicemente spostare il server su cui si trovano le istanze dietro le quinte. Puoi anche fare in modo che il proxy bilanci le richieste di un tenant tra più server.