Sie haben selbst ein interessantes Projekt. Ich habe noch nie jemanden direkt gesehen, der versucht hat, etwas so Großes zu implementieren, zumindest auf SQL Server. Je mehr ich Ihren Beitrag lese, desto mehr Fragen kommen auf mich zu ...
Im schlimmsten Fall benötigen Sie in Bezug auf die Infrastruktur (was in geschäftlicher Hinsicht eigentlich das beste Szenario ist) 10.000 Datenbanken und 2.000 Benutzer. Das sind 20.000.000 Benutzer. Sie werden nicht erfolgreich versuchen, 20 M SQL Server-Anmeldungen zu verwalten. IMO. Nur die schiere Anzahl von ihnen, die damit zu tun haben, sie von Server zu Server zu verschieben, auf ID-Kollisionen und nicht übereinstimmende IDs zu achten, und ich bin mir nicht sicher, wie sich SQL Server mit 20 Millionen Zeilen in sys.server_principals verhalten würde. Darüber hinaus möchte Ihre Web-App wahrscheinlich eine Verbindung als einzelner Benutzer oder mit einer sehr geringen Anzahl von Benutzern herstellen. IIS kann Verbindungen nur dann bündeln, wenn die DSN-Zeichenfolgen identisch sind. Eines der Attribute einer DSN-Zeichenfolge ist der Benutzername. Unterschiedliche Benutzer bedeuten kein Pooling.
Sie müssen Ihr eigenes Schema für Benutzeranmeldeinformationen erstellen. Es muss in der Lage sein, herauszufinden, zu welchem Mandanten ein Benutzer gehört, und dann muss Ihr Webcode die richtige Datenbank auswählen. Diese Benutzermetadaten sind kritisch, müssen irgendwo gespeichert werden, müssen geclustert oder gespiegelt werden, müssen schnell sein und müssen gut geschützt werden (aus Sicht der Sicherheit). verschlüssle es.). Unter der Annahme, dass SQL hier sogar eine gute Idee ist, würde ich diese Datenbank von den Instanzen fernhalten, die Server-Mandanten verwenden. Dies ist sicherheits- und lastseitig hilfreich, obwohl ich vermute, dass nach der Validierung eines Benutzers und der Steuerung der Webanwendung in die richtige Datenbank auf einer anderen Instanz keine diesbezüglichen Benutzer-Metadaten mehr abgefragt werden Benutzer.
Kurze Frage: Sollen zwei verschiedene Benutzer, die zu zwei verschiedenen Mandanten gehören, denselben Benutzernamen haben dürfen?
Noch eine kurze Frage: Wenn ich Ihnen sage, dass ich für FuBar, Inc. arbeite, woher wissen Sie das? Wird FuBar Ihnen eine Liste der Benutzer geben und Sie geben ihnen eine Liste der Benutzernamen zurück, oder werden sie sich selbst versorgen?
Sie müssen mehrere Instanzen verwenden. Wenn sich sogar ein Bruchteil dieser Benutzer dazu entscheidet, auf einmal auf die Anwendung zuzugreifen, schmilzt eine einzelne Instanz. Es sind nicht genügend Worker-Threads vorhanden, um alle diese Anforderungen gleichzeitig auszuführen. Wenn nur 1000 Benutzer gleichzeitig auf Ihre Instanz zugreifen, werden wahrscheinlich keine Worker-Threads mehr vorhanden sein und die Anforderung wird gestapelt und abgewartet. Ich habe gesehen, wie das passiert ist. Das unmittelbare Symptom ist, dass sich neue Verbindungen nicht bei der Instanz anmelden können, da keine Worker-Threads für deren Wartung verfügbar sind. Wenn dies ein sehr kurzlebiges Verhalten ist, kann Ihre App überleben. Wenn nicht oder Ihre App pingelig ist, erhalten Benutzer Fehler.
Auch wenn Sie nicht viele Mieter haben, sollten Sie sich Gedanken über die Zukunft und die Automatisierung machen, denn wenn Sie feststellen, dass Ihr Server überlastet ist und 10 neue Mieter online gehen können, ist es viel zu spät und Ihr Service (und Ihre Kunden und Ihre zukünftigen Ex-Kunden werden leiden, bis Sie das Problem gelöst haben.
Sie benötigen eine Möglichkeit, Datenbanken von überlasteten Servern auf leicht ausgelastete (oder neue) Server zu verschieben. Ob Sie ein Ausfallfenster erhalten, hängt von Ihrem SLA ab.
Stellen Sie eine bestimmte Anwendung wie SalesForce bereit oder sind diese Datenbanken nur Container für das, was Ihre Mandanten einfügen möchten?
Wie groß sind die Datenbanken? Wenn sie nicht sehr groß sind, können Sie sie einfach aus einer Sicherungsdatei wiederherstellen, die eine Vorlage enthält. (Das ist nicht viel anders als das, was die Modelldatenbank tut, aber ich habe seit meinen Tagen mit SQL 6.5 niemanden mehr gesehen, der das Modell wirklich gut verwendet.) Nachdem die Vorlage unter dem neuen Datenbanknamen wiederhergestellt wurde, können Sie dies tun Passen Sie dann die neue Datenbank nach Bedarf für einen bestimmten Mandanten an. Sie können die Anpassung natürlich erst vornehmen, wenn Sie den Mieter haben. Wenn die Datenbank groß ist, befolgen Sie möglicherweise die gleichen grundlegenden Schritte, mit der Ausnahme, dass Sie die Wiederherstellung im Voraus durchführen, bevor ein neuer Mandant den Speicherplatz benötigt. Sie können ein paar dieser Datenbanken behalten, vielleicht eine pro Instanz. Wenn Sie zu viele behalten, werden Sie möglicherweise gezwungen, mehr Hardware und / oder Speicher zu kaufen, als Sie benötigen.
Wie gehen Sie mit Aktualisierungen der Schemas um, wenn es sich um Ihre eigene App handelt? Wie können Sie Versionen der Datenbank direkt mit Versionen des Codes verbinden, wenn Sie eine einzelne URL verwenden, die zu Ihrer Web-App führt?
Wie erkennt und zerstört man nicht mehr genutzte Datenbanken? Warten Sie, bis Ihre A / R-Gruppe sagt, dass jemand seine Rechnung seit drei Monaten nicht bezahlt hat?
Wenn Mandanten Berechtigungen verwalten, bedeutet dies, dass sie etwas über die Funktionsweise der App wissen oder dass Ihre App eine sehr einfache Rollenstruktur aufweist. Am Beispiel von Blogger können Benutzer (Beiträge lesen), (Beiträge lesen und Kommentare abgeben), (... und Beiträge erstellen), (... und die Beiträge anderer bearbeiten), (... und zurücksetzen Passwörter anderer Benutzer) oder (... und was auch immer). Es sollte nicht allzu schwierig sein, eine Rolle für die verschiedenen Rechte zu haben und einen Benutzer der einen oder anderen Rolle zuzuweisen, aber Sie möchten nicht, dass Ihre App GRANT-Anweisungen ausführt. Achten Sie auf Rollen, die eine Hierarchie haben und von der Vererbung abhängen. Dies kann verwirrend werden. Wenn Sie einen Benutzer heraufstufen oder herabstufen, würde ich sagen, dass Sie ihn aus allen zugeordneten Rollen entfernen und ihn dann wieder zu der einen Rolle hinzufügen, die er benötigt. Oh,
Ich denke, dass ich hier nur die Oberfläche zerkratzt habe, und dieser Beitrag ist schon zu lang. Was Sie wirklich brauchen, ist ein Buch oder zumindest ein Whitepaper von jemandem, der dies getan hat. Die meisten dieser Jungs werden nicht reden, wenn sie es als Wettbewerbsvorteil ansehen.