Abrufen von Echtzeitupdates für Datenänderungen mithilfe von Microsoft Graph
In diesem Artikel wird ein gängiges Microsoft Graph-Integrationsmuster für ein Geschäftsszenario beschrieben, das Verbesserungen der Unternehmenszusammenarbeit für mobile Apps bietet, um einen schreibgeschützten Feed freigegebener Nachrichten von Microsoft Teams nahezu in Echtzeit zu empfangen.
Dieses Szenario ist ein nicht interaktiver Anwendungsfall, der auf Datenänderungen basiert, die durch externe Ereignisse ausgelöst werden, und die folgenden Architekturanforderungen hat:
- Ein Datenintegrationstyp.
- Ein ausgehender Datenfluss von Microsoft 365-Grenzen zur App.
- Ein geringes Datenvolumen pro Menschlicher Interaktion, aber ein potenziell hohes Datenvolumen, abhängig von der Anzahl der Benutzer.
- Eine Datenlatenz nahezu in Echtzeit, um aktuellen Feed zu generieren.
Die beste Integrationsoption für dieses Szenario ist die Verwendung von Microsoft Graph-Änderungsbenachrichtigungen, die Sowohl Ereignisbenachrichtigungen als auch den Inhalt einer freigegebenen Nachricht übermitteln und Webhooks implementieren können. Die Client-App stellt einen geheimen Clientschlüssel und einen Verschlüsselungsschlüssel bereit und macht einen HTTP-Endpunkt verfügbar, an dem der Microsoft Graph-Benachrichtigungsdienst Änderungen veröffentlicht. Die Client-App kann synchrone Microsoft Graph-Anforderungen akzeptieren und sofort darauf reagieren und skalieren, um Ereignisse zu behandeln, die von anderen Clients ausgelöst werden, die Nachrichten generieren. Diese Art von App-Interaktion wird als Pushmodus bezeichnet.
Das folgende Diagramm zeigt die Architektur für diese Lösung.
Lösungskomponenten
Die Lösungsarchitektur umfasst die folgenden Komponenten:
- mit Azure App Service können Sie Web-Apps, mobile Back-Ends und RESTful-APIs in Ihrer bevorzugten Programmiersprache erstellen und hosten, ohne die Infrastruktur zu verwalten. Es bietet automatische Skalierung und Hochverfügbarkeit, unterstützt sowohl Windows als auch Linux und ermöglicht automatisierte Bereitstellungen von GitHub, Azure DevOps oder einem beliebigen Git-Repository.
- Microsoft Entra ID, die zum Verwalten der Authentifizierung für Microsoft Graph-APIs erforderlich ist und delegierte Berechtigungen und Anwendungsberechtigungen unterstützt, um den OAuth-Fluss zu aktivieren.
- Funktions-App, bei der es sich um eine serverlose Komponente handelt, mit der Sie für eine große Anzahl von Benachrichtigungen skalieren können, und verfügt über Geschäftslogik zum Verarbeiten und Senden von Benachrichtigungen an einen Zieldienst.
- Einfache Speicherwarteschlange, die Ihnen hilft, die Last aus dem App-Dienst zu entfernen, indem Benachrichtigungen vor der asynchronen Verarbeitung durch einen instance einer Funktions-App beibehalten werden.
- Azure Application Gateway, das Websicherheits- und Routingfunktionen bereitstellt.
- Microsoft Graph-Benachrichtigungsdienst, der Benachrichtigungsabonnements verwaltet und Änderungsbenachrichtigungen an Clients übermittelt.
Überlegungen
Die folgenden Überlegungen unterstützen die Verwendung dieses Integrationsmusters:
Verfügbarkeit: Microsoft Graph ruft den Clientwebhook auf, wenn eine neue Nachricht in einem freigegebenen Kanal oder Chat veröffentlicht wird. Der Webhook muss den ganzen Tag oder sogar 24 Stunden lang hoch verfügbar sein.
Latenz: Der Webhook muss Microsoft Graph-Benachrichtigungsanforderungen innerhalb von drei Sekunden bestätigen. Wenn Microsoft Graph innerhalb dieses Zeitraums keinen 200-Klassencode empfängt, sendet es die Änderungsbenachrichtigung mehrmals für bis zu vier Stunden erneut.
Skalierbarkeit: Der Clientwebhook muss zu jeder Tageszeit für eine große Anzahl von Benachrichtigungen skaliert werden können. Dazu fügen Sie dem App-Dienst weitere Instanzen hinzu und instanziieren weitere Funktions-App-Instanzen, um den Zieldienst umgehend zu aktualisieren.
Lösungskomplexität: Die Webhooklösung erfordert auch benutzerdefinierten Code zum Verwalten von Abonnements und Verschlüsselungsschlüssel zum Verarbeiten der Daten. Diese Lösung ist aufgrund der Anzahl der beteiligten Komponenten und der Skalierbarkeits- und Verfügbarkeitsanforderungen sehr komplex.