Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellen Sie Hilfsdienste, die im Auftrag von Consumerdiensten oder -anwendungen Netzwerkanforderungen senden. Stellen Sie sich einen Botschafterdienst als Out-of-Process-Proxy vor, der mit dem Kunden verortet wird.
Verwenden Sie das Ambassador-Muster, um allgemeine Clientkonnektivitätsaufgaben wie Überwachung, Protokollierung, Routing, Sicherheit wie Transport Layer Security (TLS) und Resilienzmuster auf sprachunabhängige Weise zu entladen. Erweitern Sie die Netzwerkfunktionen von älteren Anwendungen oder anderen Anwendungen, die schwer zu ändern sind, mithilfe des Ambassador-Musters. Spezialisierte Teams können auch das Ambassador-Muster verwenden, um diese Features zu implementieren.
Kontext und Problem
Robuste cloud-basierte Anwendungen erfordern Funktionen wie Circuit Breaking, Routing, Metering und Überwachung sowie Netzwerkkonfigurations-Updates. Wenn das Entwicklungsteam den Code nicht verwaltet oder nicht einfach ändern kann, kann es schwierig oder sogar unmöglich sein, ältere Anwendungen oder vorhandene Codebibliotheken zu aktualisieren, um diese Features hinzuzufügen.
Netzwerkanrufe erfordern möglicherweise auch eine erhebliche Konfiguration für Verbindung, Authentifizierung und Autorisierung. Wenn mehrere Anwendungen diese Aufrufe in verschiedenen Sprachen und Frameworks verwenden, müssen Sie die Aufrufe für jede Instanz separat konfigurieren. Möglicherweise muss ein zentrales Team in Ihrer Organisation Netzwerk- und Sicherheitsfunktionen verwalten. Mit einer großen Codebasis kann es riskant sein, dass dieses Team nicht vertrauten Anwendungscode aktualisiert.
Lösung
Fügen Sie Clientframeworks und Bibliotheken in einen externen Prozess ein, der als Proxy zwischen Ihrer Anwendung und externen Diensten fungiert. Um die Kontrolle über Routing, Resilienz und Sicherheitsfeatures bereitzustellen und hostbezogene Zugriffsbeschränkungen zu vermeiden, stellen Sie den Proxy in derselben Hostumgebung wie Ihre Anwendung bereit. Verwenden Sie das Botschaftermuster, um die Instrumentierung zu standardisieren und zu erweitern. Der Proxy kann Leistungsmetriken wie Latenz oder Ressourcennutzung in derselben Hostumgebung wie die Anwendung überwachen.
Diagramm, das eine Clientanwendung und einen Botschafterproxy zeigt, der auf demselben Host verortet ist. Die Clientanwendung sendet Anfragen an den Botschafter, anstatt externe Dienste direkt anzurufen. Der Botschafter leitet diese Anfragen an den Remotedienst weiter. Antworten vom Remotedienst kehren über den Botschafter und zurück zur Clientanwendung zurück.
Sie können Features verwalten, die unabhängig von der Anwendung an den Botschafter geladen werden. Sie können den Botschafter aktualisieren und ändern, ohne die älteren Funktionen der Anwendung zu stören. Separate, spezialisierte Teams können auch Sicherheits-, Netzwerk- oder Authentifizierungsfeatures implementieren und verwalten, die an den Botschafter verschoben wurden.
Sie können Botschafterdienste als Sidecar bereitstellen, um den Lebenszyklus einer verbrauchenden Anwendung oder eines Diensts zu begleiten. Wenn mehrere separate Prozesse auf einem gemeinsamen Host einen Botschafter gemeinsam nutzen, können Sie sie auch als Daemon oder Windows-Dienst bereitstellen. Wenn der verbrauchende Dienst containerisiert wird, erstellen Sie den Botschafter als separaten Container auf demselben Host, und richten Sie die entsprechenden Links für die Kommunikation ein.
Probleme und Überlegungen
Beachten Sie die folgenden Punkte bei Ihrer Entscheidung, wie dieses Muster implementiert werden soll:
Der Proxy erhöht den Latenzaufwand. Überlegen Sie, ob eine Clientbibliothek, die die Anwendung direkt aufruft, ein besserer Ansatz ist.
Berücksichtigen Sie die möglichen Auswirkungen der Einbeziehung generalisierter Features in den Proxy. Beispielsweise könnte der Botschafter Wiederholungen verarbeiten, aber dieser Ansatz ist möglicherweise nicht sicher, es sei denn, alle Operationen sind idempotent.
Erwägen Sie einen Mechanismus, mit dem der Client einen Kontext an den Proxy und zurück an den Client übergeben kann. Fügen Sie z. B. HTTP-Anforderungsheader ein, um die Wiederholung zu deaktivieren, oder geben Sie die maximale Anzahl von Wiederholungsversuche an.
Überlegen Sie, wie Sie den Proxy packen und bereitstellen.
Überlegen Sie, ob Sie eine einzelne freigegebene Instanz für alle Clients oder eine Instanz für jeden Client verwenden möchten.
Wann Sie dieses Muster verwenden sollten
Verwenden Sie dieses Muster in folgenden Fällen:
Sie müssen einen allgemeinen Satz von Clientkonnektivitätsfeatures für mehrere Sprachen oder Frameworks erstellen.
Sie müssen grenzüberschreitende Clientkonnektivitätsbedenken an Infrastrukturentwickler oder andere spezialisiertere Teams entladen.
Sie müssen Cloud- oder Clusterkonnektivitätsanforderungen in einer älteren Anwendung oder einer Anwendung unterstützen, die schwer zu ändern ist.
Sie müssen Protokolle oder Verbindungsmuster unterstützen, die API-Gateways, Dienstgitter oder Standardmäßige Eingangs- und Ausgangssteuerelemente nicht einfach verarbeiten.
Dieses Muster ist möglicherweise nicht geeignet, wenn:
Netzwerkanforderungslatenz ist wichtig. Ein Proxy führt zu minimalem Aufwand, und dieser Aufwand kann sich auf die Anwendung auswirken.
Die Konnektivitätsfunktionen des Clients werden von einer einzigen Sprache genutzt. In diesem Fall könnte eine bessere Option eine Clientbibliothek sein, die als Paket an die Entwicklungsteams verteilt wird.
Konnektivitätsfeatures können nicht generalisiert werden, und diese Features erfordern eine tiefere Integration in die Clientanwendung.
Ihre Anwendungsplattform unterstützt vorgefertigte Lösungen wie ein Service-Mesh, um gegenseitiges TLS (mTLS), die Verwaltung des Datenverkehrs und Richtlinienfunktionen zu handhaben. Verwenden Sie diese Lösungen, anstatt eine benutzerdefinierte Botschafterlösung zu erstellen.
Workloadentwurf
Bewerten Sie, wie Sie das Ambassador-Muster im Design einer Workload verwenden, um die in den Azure Well-Architected Framework-Säulen behandelten Ziele und Prinzipien zu erfüllen. Die folgende Tabelle enthält Anleitungen dazu, wie dieses Muster die Ziele jeder Säule unterstützt.
| Säule | So unterstützt dieses Muster die Säulenziele |
|---|---|
| Zuverlässigkeitsentwurfsentscheidungen helfen Ihrer Arbeitsauslastung, ausfallsicher zu werden und sicherzustellen, dass sie nach auftreten eines Fehlers wieder in einen voll funktionsfähigen Zustand versetzt wird. | Dieses Muster führt einen Vermittlungspunkt für die Netzwerkkommunikation ein, sodass Sie Zuverlässigkeitsmuster zur Netzwerkkommunikation hinzufügen können, z. B. Wiederholung oder Pufferung. - RE:07 Selbsterhaltung |
| Sicherheitsdesignentscheidungen tragen dazu bei, die Vertraulichkeit, Integrität und Verfügbarkeit der Daten und Systeme Ihrer Workload sicherzustellen. | Mit diesem Muster können Sie die Sicherheit für die Netzwerkkommunikation implementieren, die der Client nicht direkt verarbeiten kann. - SE:06 Netzwerksteuerungen - SE:07-Verschlüsselung |
Wenn dieses Muster Kompromisse innerhalb einer Säule einführt, sollten Sie sie gegen die Ziele der anderen Säulen berücksichtigen.
Beispiel
Das folgende Diagramm zeigt eine Anwendung, die eine Anforderung an einen Remotedienst über einen Ambassador-Proxy stellt. Der Botschafter bietet Routing, Schaltkreisbruch und Protokollierung. Er ruft den Remotedienst auf und gibt dann die Antwort an die Clientanwendung zurück.
Diagramm, das eine Clientanwendung zeigt, die eine Anforderung an einen Botschafterproxy sendet. Die Anwendung sendet eine Anfrage an den Remotedienst über einen Ambassador-Proxy. Der Botschafter bestimmt den Standort der Remotedienste und leitet die Anfrage entsprechend weiter. Der Botschafter überprüft den Zustand des Leitungsschutzschalters und erweitert die Anforderungsheader mit Tracing-Informationen. Der Botschafter beginnt mit der Messung der Anforderungslatenz. Der Botschafter verschlüsselt und sendet die Anforderung mithilfe der gegenseitigen zertifikatbasierten Authentifizierung. Der Remotedienst empfängt die Anforderung und sendet die Antwort. Der Botschafter protokolliert die Anforderungslatenz. Der Botschafter gibt die Antwort an den Kunden zurück. Die Anwendung empfängt die Antwort.
In containerisierten Umgebungen würde dieser Botschafter als Sidecar-Container neben dem Anwendungscontainer ausgeführt. In nichtcontainerisierten Umgebungen würden Sie sie als lokaler Prozess oder Windows-Dienst auf demselben Host implementieren.