Freigeben über


Verwenden von Azure API Management in einer mehrinstanzenfähigen Lösung

Azure API Management ist ein umfassendes API-Gateway und Reverse Proxy für APIs. Es bietet viele Funktionen, darunter Caching, Response Mocking und ein Entwicklerportal, die für API-fokussierte Anwendungen nützlich sind. Dieser Artikel fasst einige der wichtigsten Funktionen von API Management zusammen, die für mandantenfähige Lösungen nützlich sind.

Hinweis

In diesem Artikel wird erläutert, wie Sie das API Management nutzen können, wenn Sie Ihre eigenen mandantenfähigen Anwendungen haben, die APIs für die interne oder externe Nutzung hosten.

Eine andere Form der Mandantenfähigkeit besteht darin, das API Management Gateway als Service für andere Teams bereitzustellen. Ein Unternehmen könnte beispielsweise über eine gemeinsame API Management-Instanz verfügen, die von mehreren Anwendungsteams bereitgestellt und genutzt wird. Dieser Artikel befasst sich nicht mit dieser Form der Mandantenfähigkeit. Ziehen Sie die Verwendung von Arbeitsbereichen in Betracht, mit denen Sie eine API Management-Instanz für mehrere Teams freigeben können, die möglicherweise unterschiedliche Zugriffsrechte haben.

Isolationsmodelle

API Management wird in der Regel als gemeinsame Komponente mit einer einzigen Instanz bereitgestellt, die Anforderungen für mehrere Mandanten bedient. Je nach Ihrem Mandantenmodell gibt es viele Möglichkeiten für die Bereitstellung von API Management. Dieser Artikel geht davon aus, dass Sie Ihre Lösung mit Hilfe von Bereitstellungsstempeln bereitstellen.

Die Art und Weise, wie Sie API Management nutzen, ist in der Regel ähnlich, unabhängig vom Isolationsmodell. Dieser Abschnitt befasst sich mit den Kosten- und Komplexitätsunterschieden zwischen den Isolierungsmodellen und damit, wie die einzelnen Ansätze Anforderungen an Ihre Backend-API-Anwendungen weiterleiten.

Aspekt Gemeinsame Instanz mit Einzel-Mandant-Backends Gemeinsame Instanz mit gemeinsamem mandantenfähigen Backend Instanz für jeden Mandanten
Anzahl der unterstützten Mandanten Mehrere Nahezu unbegrenzt Eine für jede Instanz
Kosten Geringer Geringer Höher
Bereitstellungskomplexität Niedrig: Eine einzige Instanz, die für jeden Stempel verwaltet wird Niedrig: Eine einzige Instanz, die für jeden Stempel verwaltet wird Hoch: Mehrere Instanzen zu verwalten
Komplexität der Routing-Konfiguration Höher Niedriger Geringer
Anfälligkeit für Noisy-Neighbour-Probleme Ja Ja No
Netzwerkisolierung auf Mandantenebene No Nein Ja
Beispielszenario Benutzerdefinierte Domainnamen für jeden Mandanten Große Lösung mit mehreren Mandanten mit freigegebener Anwendungsebene Mandantenspezifische Bereitstellungstempel

Modelle für die gemeinsame Instanzisolierung

Üblicherweise wird eine API Management-Instanz von mehreren Mandanten gemeinsam genutzt, was die Kosten senkt und die Bereitstellung und Verwaltung vereinfacht. Die Details, wie Sie eine API Management-Instanz gemeinsam nutzen können, hängen davon ab, wie Sie den Backend-API-Anwendungen Mandanten zuweisen.

Einzel-Mandant-Backend-Anwendung

Wenn Sie für jeden Mandanten unterschiedliche Backend-Anwendungen bereitstellen, können Sie eine einzelne API Management-Instanz bereitstellen und den Datenverkehr für jede Anforderung an das richtige Mandanten-Backend weiterleiten. Bei diesem Ansatz müssen Sie API Management mit den Backend-Hostnamen für jeden Mandanten konfigurieren oder über eine andere Möglichkeit verfügen, eine eingehende Anforderung dem richtigen Backend des Mandanten zuzuordnen.

Da dieser Ansatz eine zusätzliche Abfrage erfordert, ist er möglicherweise nicht für eine große Anzahl von Mandanten geeignet, die sich eine einzelne API Management-Instanz teilen. Es kann auch ein gewisser Leistungsaufwand entstehen, wenn Sie das Backend des Mandanten abrufen. Wie groß dieser Leistungs-Overhead ist, hängt jedoch davon ab, wie Sie eine solche Abfrage gestalten.

Gemeinsam genutzte mandantenfähige Backend-Anwendung

In Szenarien, in denen Ihre Mandanten eine gemeinsame Backend-Anwendung nutzen, wird der Routing-Prozess für API Management vereinfacht, da Sie alle Anforderungen an ein einziges Backend weiterleiten können. Wenn Sie Platzhalter-Domänen oder vom Provider ausgegebene Domänen verwenden, können Sie mit diesem Ansatz eine nahezu unbegrenzte Skalierung erreichen. Zudem müssen Anforderungen nicht dem Backend eines Mandanten zugeordnet werden, so dass individuelle Routing-Entscheidungen keine Auswirkungen auf die Leistung haben.

Instanz für jeden Mandanten

In manchen Situationen können Sie für jeden Mandanten eine Instanz von API Management bereitstellen. Wir empfehlen diesen Ansatz nur, wenn Sie nur eine kleine Anzahl von Mandanten haben oder wenn Sie strenge Compliance-Anforderungen erfüllen müssen, die eine gemeinsame Nutzung der Infrastruktur durch die Mandanten ausschließen. Wenn Sie zum Beispiel für jeden Mandanten ein eigenes virtuelles Netzwerk bereitstellen, müssen Sie wahrscheinlich auch für jeden Mandanten eine eigene API Management-Instanz bereitstellen.

Tipp

Wenn Ihr einziger Grund für die Bereitstellung mehrerer Instanzen die Unterstützung von Benutzern in verschiedenen geografischen Regionen ist, sollten Sie überlegen, ob die Funktion zur Bereitstellung mehrerer Regionen in API Management Ihren Anforderungen entspricht.

Wenn Sie eine Instanz von API Management bereitstellen, müssen Sie die Grenzwerte des Dienstes berücksichtigen, einschließlich der Grenzwerte, die für die Anzahl der API Management-Instanzen innerhalb eines Azure-Abonnements oder einer Region gelten können.

Instanzen mit einem einzigen Mandanten benötigen in der Regel nur eine minimale Routing-Konfiguration, da Sie alle Anforderungen an ein einziges Backend weiterleiten können. Dieses Szenario erfordert keine benutzerdefinierten Routing-Entscheidungen, sodass es keine zusätzlichen Auswirkungen auf die Leistung gibt. Allerdings entstehen Ihnen in der Regel höhere Ressourcenkosten als bei der Bereitstellung einer gemeinsamen Instanz. Wenn Sie Instanzen für einen einzelnen Mandanten bereitstellen müssen, sollten Sie überlegen, ob Sie mit selbst gehosteten Gateways die bereits bereitgestellten mandantenspezifischen Rechenressourcen wiederverwenden können.

API Management-Funktionen, die Mandantenfähigkeit unterstützen

API Management verwendet Richtlinien, um Flexibilität zu ermöglichen. Sie können festlegen, wie Anforderungen geprüft, weitergeleitet und verarbeitet werden, wenn Sie Richtlinien verwenden. Und wenn Sie eine mandantenfähige Lösung mit API Management entwerfen, verwenden Sie Richtlinien, um viele der Funktionen zu implementieren.

Identifizierung von Mandanten bei eingehenden Anforderungen

Überlegen Sie, wie Sie in jeder eingehenden Anforderung den entsprechenden Mandanten identifizieren können. In einer mandantenfähigen Lösung ist es wichtig, dass Sie genau wissen, wer die einzelnen Anforderungen stellt, damit Sie die Daten für diesen speziellen Mandanten zurückgeben und für keinen anderen.

API Management bietet Abonnements, die Sie zur Authentifizierung von Anforderungen verwenden können. Diese Abonnements verwenden einen eindeutigen Abonnementschlüssel, mit dem der Abonnent, der die Anforderung stellt, identifiziert werden kann. Wenn Sie sich für die Verwendung von Abonnements entscheiden, überlegen Sie, wie Sie die API Management-Abonnements Ihren eigenen Mandanten- oder Kundenidentifikatoren zuordnen können. Die Abonnements sind eng in das Entwicklerportal integriert. Bei den meisten Lösungen ist es sinnvoll, Abonnements zu verwenden, um Mandanten zu identifizieren.

Alternativ können Sie den Mandanten auch mit anderen Methoden identifizieren. Hier sind einige Beispiele für Ansätze, die innerhalb einer von Ihnen definierten benutzerdefinierten Richtlinie ausgeführt werden:

  • Verwenden Sie eine benutzerdefinierte Komponente der URL, z. B. eine Subdomain, einen Pfad oder eine Abfragezeichenfolge. In der URL https://api.contoso.com/tenant1/products könnten Sie zum Beispiel den ersten Teil des Pfades tenant1, extrahieren und ihn als Mandant-Kennung behandeln. Ähnlich könnten Sie bei der eingehenden URL https://tenant1.contoso.com/products die Subdomain tenant1 extrahieren. Um diesen Ansatz zu verwenden, sollten Sie den Pfad oder die Abfragezeichenfolge aus der Context.Request.Url-Eigenschaft parsen.

  • Verwenden Sie eine Kopfzeile für die Anforderung. Ihre Client-Anwendungen könnten zum Beispiel eine benutzerdefinierte TenantID-Kopfzeile zu Anforderungen hinzufügen. Um diesen Ansatz zu verwenden, sollten Sie die Context.Request.Headers-Sammlung lesen.

  • Extrahieren von Ansprüchen aus einem JSON-Web-Token (JWT). Sie könnten zum Beispiel einen benutzerdefinierten tenantId-Anspruch in einem JWT haben, der von Ihrem Identitätsanbieter ausgestellt wurde. Um diesen Ansatz zu verwenden, verwenden Sie die Richtlinie validate-jwt und setzen die Eigenschaft output-token-variable-name so, dass Ihre Richtliniendefinition die Werte aus dem Token lesen kann.

  • Dynamisch Suche nach Kennungen von Mandanten. Sie können mit einer externen Datenbank oder einem externen Dienst kommunizieren, während die Anforderung bearbeitet wird. Auf diese Weise können Sie eine benutzerdefinierte Mandanten-Zuordnungslogik erstellen, um eine logische Mandanten-Kennung einer bestimmten URL zuzuordnen oder um zusätzliche Informationen über einen Mandanten zu erhalten. Um diesen Ansatz zu verwenden, benutzen Sie die Richtlinie für das Senden von Anforderungen.

    Dieser Ansatz wird wahrscheinlich die Latenzzeit Ihrer Anforderungen erhöhen. Um diesen Effekt abzuschwächen, ist es eine gute Idee, die Anzahl der Anfragen an die externe API durch Caching zu reduzieren. Sie können die Richtlinien cache-store-value und cache-lookup-value verwenden, um einen Caching-Ansatz zu implementieren. Stellen Sie sicher, dass Sie Ihren Cache bei jedem hinzugefügten, entfernten oder verschobenen Mandanten, der Auswirkungen auf die Backend-Abfrage hat, ungültig machen.

Benannte Werte

API Management unterstützt benannte Werte, d. h. benutzerdefinierte Konfigurationseinstellungen, die Sie in Ihren Richtlinien verwenden können. Sie können beispielsweise einen benannten Wert verwenden, um die Backend-URL eines Mandanten zu speichern und diesen Wert dann an mehreren Stellen in Ihren Richtlinien wiederverwenden. Wenn Sie die URL aktualisieren müssen, können Sie dies an einer einzigen Stelle tun.

Warnung

In einer mandantenfähigen Lösung ist es wichtig, dass Sie bei der Festlegung der Namen Ihrer benannten Werte vorsichtig sind. Wenn die Einstellungen von Mandant zu Mandant unterschiedlich sind, stellen Sie sicher, dass die Kennung des Mandanten im Namen enthalten ist. Sie können zum Beispiel ein Muster wie tenantId-key:value verwenden, nachdem Sie bestätigt haben, dass tenantId für die Anforderung geeignet ist.

Fügen Sie den Bezeichner ein, um die Wahrscheinlichkeit zu verringern, dass Sie bei der Bearbeitung einer Anforderung für einen anderen Mandanten versehentlich auf den Wert eines anderen Mandanten verweisen oder dazu verleitet werden, darauf zu verweisen.

Authentifizierung eingehender Anforderungen

API-Anforderungen, die an das API Management Gateway gestellt werden, müssen normalerweise authentifiziert werden. API Management bietet mehrere Methoden zur Authentifizierung eingehender Anforderungen an das Gateway, darunter OAuth 2.0 und Client-Zertifikate. Überlegen Sie, welche Arten von Berechtigungsnachweisen Sie unterstützen sollten und wo diese validiert werden sollten. Sie sollten zum Beispiel überlegen, ob die Validierung in API Management, in Ihren Backend-Anwendungen oder an beiden Stellen erfolgen soll.

Weitere Informationen finden Sie unter Authentifizierung und Autorisierung bei APIs in Azure API Management.

Hinweis

Wenn Sie einen Abonnementschlüssel oder einen API-Schlüssel verwenden, ist es ratsam, auch eine andere Authentifizierungsmethode zu verwenden.

Ein Abonnementschlüssel allein ist keine starke Form der Authentifizierung, aber er ist für andere Szenarien nützlich, z. B. für die Nachverfolgung der API-Nutzung eines einzelnen Mandanten.

Weiterleitung an mandantenspezifische Backends

Wenn Sie API Management als gemeinsame Komponente verwenden, müssen Sie eingehende API-Anforderungen möglicherweise an verschiedene mandantenspezifische Backends weiterleiten. Diese Backends können sich in verschiedenen Bereitstellungsstufen befinden, oder es kann sich um verschiedene Anwendungen innerhalb einer einzigen Stufe handeln. Um das Routing in einer Richtliniendefinition anzupassen, verwenden Sie die Richtlinie set-backend-service. Sie müssen die neue Basis-URL angeben, an die die Anforderung weitergeleitet werden soll.

Cache-Antworten oder andere Daten

API Management verfügt über eine leistungsstarke Cache-Funktion, mit der Sie ganze HTTP-Antworten oder andere Daten zwischenspeichern können. Sie können den Cache zum Beispiel für Mandanten-Zuordnungen verwenden, wenn Sie eine benutzerdefinierte Logik verwenden oder die Zuordnung von einem externen Dienst abrufen.

Verwenden Sie die Richtlinien cache-store-value und cache-lookup-value, um einen Caching-Ansatz zu implementieren.

Warnung

In einer mandantenfähigen Lösung ist es wichtig, dass Sie Ihre Cache-Schlüssel sorgfältig festlegen. Wenn die im Cache gespeicherten Daten von Mandant zu Mandant variieren können, stellen Sie sicher, dass Sie die Kennung des Mandanten in den Cache-Schlüssel aufnehmen.

Fügen Sie den Bezeichner ein, um die Wahrscheinlichkeit zu verringern, dass Sie versehentlich auf den Wert eines anderen Mandanten verweisen, wenn Sie eine Anforderung für einen anderen Mandanten bearbeiten.

Benutzerdefinierte Domänen

Verwenden Sie API Management, um Ihre eigenen benutzerdefinierten Domains für den API-Gateway und das Entwicklerportal zu konfigurieren. Auf einigen Ebenen können Sie Platzhalter-Domänen oder mehrere voll qualifizierte Domänennamen (FQDNs) konfigurieren.

Sie können API Management auch zusammen mit einem Dienst wie Azure Front Door verwenden. Bei dieser Art von Konfiguration verwaltet Azure Front Door häufig benutzerdefinierte Domänen und TLS-Zertifikate (Transport Layer Security) und kommuniziert mit API Management unter Verwendung eines einzigen Domänennamens. Wenn die ursprüngliche URL vom Client Informationen über den Mandanten enthält, die Sie zur späteren Verarbeitung an die API Management-Instanz senden müssen, sollten Sie den X-Forwarded-Host Anfrage-Header verwenden oder die Azure Front Door-Regeln nutzen, um die Informationen als HTTP-Header zu übergeben.

Ratenbegrenzungen

In einer mandantenfähigen Lösung ist es üblich, Quoten oder Grenzwerte anzuwenden. Grenzwerte können Ihnen helfen, das Noisy-Neighbors-Problem zu entschärfen. Sie können auch Grenzwerte verwenden, um die Servicequalität durchzusetzen und um zwischen verschiedenen Preisebenen zu differenzieren.

Verwendung von API Management, um mandantenspezifische Grenzwerte durchzusetzen. Wenn Sie mandantenspezifische Abonnements verwenden, sollten Sie die Quotenrichtlinie verwenden, um eine Quote für jedes Abonnement durchzusetzen. Alternativ können Sie auch die Quota-by-Key-Richtlinie verwenden, um Quoten mit Hilfe eines beliebigen anderen Schlüssels für den Grenzwert durchzusetzen, z. B. einer Mandant-Kennung, die Sie aus der URL der Anforderung oder einem JWT erhalten haben.

Monetarisierung

Die Dokumentation für API Management enthält ausführliche Richtlinien zur Monetarisierung von APIs, einschließlich einer Beispielimplementierung. Die Monetarisierungsansätze kombinieren viele der Funktionen von API Management, sodass Entwickler eine API veröffentlichen, Abonnements verwalten und auf der Grundlage verschiedener Nutzungsmodelle abrechnen können.

Kapazitätsmanagement

Eine API Management-Instanz unterstützt eine bestimmte Kapazität, die die für die Bearbeitung Ihrer Anforderungen verfügbaren Ressourcen darstellt. Wenn Sie komplexe Richtlinien verwenden oder mehr APIs für die Instanz bereitstellen, verbrauchen Sie mehr Kapazität. Sie können die Kapazität einer Instanz auf verschiedene Arten verwalten, z. B. durch den Kauf weiterer Einheiten. Sie können die Kapazität Ihrer Instanz auch dynamisch skalieren.

Einige Multi-Mandanten-Instanzen können mehr Kapazität verbrauchen als Single-Mandanten-Instanzen, z. B. wenn Sie viele Richtlinien für die Weiterleitung von Anforderungen an verschiedene Backends von Mandanten verwenden. Überlegen Sie sich die Kapazitätsplanung sorgfältig und planen Sie eine Skalierung der Kapazität Ihrer Instanz, wenn Sie eine steigende Nutzung feststellen. Sie sollten auch die Leistung Ihrer Lösung testen, um Ihren Kapazitätsbedarf im Voraus zu ermitteln.

Weitere Informationen zur Skalierung von API Management finden Sie unter Upgrade und Skalierung einer Azure API Management-Instanz.

Bereitstellungen in mehreren Regionen

API Management unterstützt die Bereitstellung in mehreren Regionen, d. h. Sie können eine einzige logische API Management-Ressource in mehreren Azure-Regionen bereitstellen, ohne dass Sie die Konfiguration auf separate Ressourcen replizieren müssen. Diese Fähigkeit ist besonders hilfreich, wenn Sie Ihre Lösung weltweit verteilen oder replizieren. Sie können eine Flotte von API Management-Instanzen über mehrere Regionen hinweg bereitstellen, was eine Verarbeitung von Anforderungen mit geringer Latenz ermöglicht, und diese als eine einzige logische Instanz verwalten.

Falls Sie jedoch vollständig isolierte API Management-Instanzen benötigen, können Sie sich auch für die Bereitstellung unabhängiger API Management-Ressourcen in verschiedenen Regionen entscheiden. Bei diesem Ansatz wird die Verwaltungsebene für jede API Management-Instanz getrennt.

Beitragende

Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:

Hauptautoren:

Andere Mitwirkende:

Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.

Nächste Schritte

Informieren Sie sich über die Architekturansätze für die Integration in mandantenfähige Lösungen.