Ich würde nicht empfehlen, diese separaten Verbindungen manuell zu erstellen und zu verwalten. Ich kenne die Details Ihrer Multi-Tenant-Anforderungen nicht (Anzahl der Mandanten, Größe der Datenbanken, erwartete Anzahl von Transaktionen usw.), aber ich denke, es wäre besser, etwas wie useDb-Funktion von Mongoose . Dann kann Mongoose alle Details des Verbindungspools handhaben.
aktualisieren
Die erste Richtung, die ich untersuchen würde, besteht darin, jeden Mandanten in einem separaten Knotenprozess einzurichten. Es gibt einige interessante Vorteile, wenn Sie Ihre Mandanten in separaten Knotenprozessen ausführen. Dies ist vom Sicherheitsstandpunkt (isolierter Speicher) und vom Stabilitätsstandpunkt (der Absturz eines Tenant-Prozesses wirkt sich nicht auf andere aus) sinnvoll.
Angenommen, Sie basieren den Mandanten auf der URL, würden Sie einen Proxyserver vor den eigentlichen Mandantenservern einrichten. Seine Aufgabe wäre es, sich die URL anzusehen und basierend auf diesen Informationen zum richtigen Prozess zu leiten. Dies ist ein sehr unkomplizierter Knoten-HTTP-Proxy Konfiguration. Jede Mandanteninstanz könnte genau dieselbe Codebasis haben, aber mit einer anderen Konfiguration gestartet werden (die ihnen mitteilt, welche Mongo-Verbindungszeichenfolge verwendet werden soll).
Das bedeutet, dass Sie Ihre eigentliche Anwendung so gestalten können, als wäre sie nicht mandantenfähig. Jeder Prozess kennt nur eine Mongo-Datenbank, und es ist keine Multi-Tenant-Logik erforderlich. Es ermöglicht Ihnen auch, den Datenverkehr später basierend auf der Last einfach aufzuteilen. Wenn Sie die Mandanten aus Leistungsgründen aufteilen müssen, können Sie dies transparent auf Proxy-Ebene tun. Die DNS können alle gleich bleiben, und Sie können den Server, auf dem sich die Instanzen befinden, einfach hinter den Kulissen verschieben. Sie können den Proxy sogar die Anfragen für einen Mandanten zwischen mehreren Servern ausgleichen lassen.