Ich versuche, eine webbasierte SaaS-Lösung zu erstellen, und bin auf eine Straße gestoßen, auf der ich nicht sicher bin, ob ich mehrere Mandanten oder mehrere Instanzen verwenden soll. Ich werde versuchen zu beschreiben, was ich erreichen möchte und welche Ansätze Vor- und Nachteile haben (meine Meinung, je nachdem, was ich gelesen habe). Bitte geben Sie Ihre Vorschläge an, falls ich bei einem Ansatz etwas verpasst habe.
Die Anwendung, die ich erstellen möchte, ist, wie bereits erwähnt, eine SaaS-Lösung, mit der Unternehmen ihre Konten erstellen können und jedes Konto / Unternehmen seine eigenen Benutzer, Kunden, Produkte, Dienstleistungen usw. hat. Jeder Benutzer; Wer ist ein Mitarbeiter des Unternehmens? In Bezug auf ein Konto / Unternehmen haben Sie nur Zugriff auf die Kunden, Produkte und Dienstleistungen des Unternehmens. Unternehmen können eine unbegrenzte Anzahl von Kunden, Produkten und Dienstleistungen haben. Daher sollte jedes Unternehmen über ein eigenes Rechenzentrum verfügen.
Zu diesem Zweck habe ich beschlossen, eine gemeinsam genutzte Datenbank (Speichern aller Benutzeranmeldeinformationen für Anmeldezwecke) und ein gemeinsames Schema für mehrere Datenbanken (Datenbank pro Konto / Unternehmen) zu erstellen. Grundsätzlich Multi Tenancy .
Dann schlug jemand vor, stattdessen Multi Instance zu verwenden, wobei jedes Unternehmen eine eigene Instanz der Anwendung (dh Code, Bibliotheken, Datenbank, Frameworks usw.) hat, die vollständig von den anderen Unternehmen getrennt ist. Das klingt besser, da ich mich nicht um eine zusätzliche Ebene kümmern muss, in der ich sicherstellen muss, dass die Benutzer jedes Mandanten nur auf die Daten ihres Unternehmens zugreifen können. Ich denke, es ist gut zu erwähnen, dass ich auf Docker angewiesen bin , um diesen Ansatz zu erreichen (ich habe ihn noch nie verwendet), aber ich denke, es fehlen Funktionen (dazu später mehr), die ich in Zukunft benötigen werde (zumindest habe ich das nicht getan) finde sie nicht mit ein wenig Suche).
Jeder Ansatz hat jedoch Vor- und Nachteile, sodass ich mich nicht für einen Ansatz entscheiden konnte. Hier ist eine Liste, die ich aber nicht kenne, da mir das Wissen in beiden fehlt, sodass es etwas geben könnte, das mir nicht bekannt ist, oder eine Lösung für ein Problem, das ich im Web nicht gefunden habe: [Jeder Ansatz hat eine geordnete Liste, von der ich einen Vergleich nach dem anderen verfolgte]
Multi Tenancy :
- Gemeinsamer Host / Hardware, gemeinsam genutzter Code und mehrere Datenbanken.
- Es ist einfacher , die Funktionalität des Codes zu erweitern und Fehler zu beheben (gemeinsam genutzter Code).
- Es ist schwieriger , die Hardware zu erweitern (könnte einen Cloud-Dienst verwenden) oder die Datenbank eines einzelnen Mandanten auf ein anderes System zu verschieben, ohne Änderungen am Code vorzunehmen.
- Wie bereits erwähnt, muss ich dem System vor allem eine zusätzliche Ebene hinzufügen, um sicherzustellen, dass der Benutzer tatsächlich zu seinem Unternehmen gehört und nicht auf die Informationen anderer Unternehmen zugreift.
Multi-Instanz :
- Freigegebener oder nicht freigegebener Host / Hardware, Code pro Instanz und Datenbank pro Instanz.
- Es ist schwieriger , die Funktionalität zu erweitern oder Fehler zu beheben (ich bin mir nicht sicher, ob es eine Möglichkeit gibt, dies in Docker zu tun, wo Sie einer Instanz oder einem Docker-Container Funktionalität / Feature hinzufügen und für die anderen bereitstellen können).
- Es ist einfacher , die gesamte Instanz auf einen anderen Host / eine andere Hardware zu verschieben.
- Als Instanz muss ich mich nicht um diese Ebene kümmern, da jede Instanz ihre eigene Datenbank hat.
Alle Vor- und Nachteile sind überflüssig, falls ich etwas manuell tun möchte (z. B. eine Instanz für jeden Mandanten manuell erstellen), und deshalb bezweifle ich die Docker-Lösung, es sei denn, es gibt eine Möglichkeit, dies zu lösen, was möglicherweise die Hauptlösung ist Grund der Frage. Ich würde es begrüßen, wenn Sie die Frage mit Verweisen auf die Lösungen beantworten würden und warum dieser Ansatz Ihrer Meinung nach besser ist als der andere.
Für den Fall, dass dies helfen würde (vielleicht?), Verwenden wir Laravel als Hauptframework für das Back-End (alle RESTfully).