Wir erstellen APIs mithilfe von ServiceStack , die mandantenfähig sind. Wir wollen DNS-basiertes Load-Balancing und Routing durchführen, anstatt Dinge über einen Reverse-Proxy (wie nginx oder haproxy) zusammenzufassen.
Wir haben DTOs anfordern, die einen Tenant-Parameter haben. Mit ServiceStack (und seinem SwaggerFeature) können wir benutzerdefinierte Routen definieren und die DTOs so dokumentieren, dass wir Werte aus Pfad, Abfrage, Kopfzeilen oder Text lesen können.
Wie verbinden wir (am besten) Dinge, damit DTO-Eigenschaften auch Werte aus einem Hostnamenmuster lesen können? Also, machen Sie die Route nehmen Werte von der Suche aus dem Hostnamen sowie den Pfad?
Wir hätten gern URLs wie
https://{tenant}.{DNS zone for environment}/{rest of path with tokens}
Auch die DNS-Zone hängt davon ab, in welcher Umgebung wir uns befinden - für Nichtproduktion verwenden wir (sagen wir) testing-foobar.com
, und Produktion verwenden wir real-live.com
. Idealerweise können wir beide mit einer einzelnen Routen-Deklaration unterstützen (und wir dekorieren lieber das Anforderungs-DTO anstelle der imperativen Deklaration zur Laufzeit AppHost.Init
).
Ich habe dies gerade in dieser Woche auf einem bestehenden Multi-Tenant-System gelöst, das .NET-Sicherheitsprinzipale verwendet, um mit den Benutzerberechtigungen und Mandanten umzugehen. Ich habe einen benutzerdefinierten ServiceRunner verwendet, um den Mandanten auszuwählen und die Sicherheit einzurichten. Ihr Ansatz zu Multi-Tenant ist anders, aber die Verwendung eines ServiceRunner scheint immer noch ein gültiger Ansatz zu sein.
Sie würden mit so etwas enden:
%Vor%Vielleicht ist der Requests-Filtering-Ansatz irgendwie besser, aber das erledigt unsere Aufgabe.
Tags und Links routing binding servicestack load-balancing