Entwerfen einer Lösung mit Azure

Abgeschlossen

Beim Entwurf einer Anwendungsarchitektur müssen Sie sich zunächst mit dem Umfang und der Vielfalt der funktionalen und nicht funktionalen Anforderungen vertraut machen. Anschließend wählen Sie die geeigneten Tools, Technologien und Dienste aus, um diese Anforderungen zu erfüllen.

Für das obige Szenario zum Ermitteln der aktuellen Busposition gelten die folgenden wichtigen Anforderungen:

  • Eine Website zum Überwachen der Buspositionen in Echtzeit
  • Benachrichtigungen, wenn sich ein Bus in der Nähe befindet
  • Automatisierte Bereitstellung und Skalierung

Sehen wir uns dieses Szenario näher an. Im Folgenden erfahren Sie, wie Sie unter Verwendung verschiedener Azure-Dienste eine entsprechende Lösung entwickeln können.

Abrufen von Echtzeitbusdaten

Viele Städte und Gemeinden stellen Daten zum öffentlichen Personenverkehr über GTFS (General Transit Feed Specification) bereit. Diese Spezifikation unterstützt auch einen Echtzeitfeed mit der Bezeichnung GTFS Real-Time Reference v2 (GTFS-RT). Dieser Feed umfasst ein JSON-Dokument, das dem folgenden Beispiel ähnelt (dieses Beispiel stammt aus dem King County Metro-Feed):

{
      "id": "1618418866_4318",
      "vehicle": {
        "trip": {
          "trip_id": "49195161",
          "direction_id": 0,
          "route_id": "100001",
          "start_date": "20210414",
          "schedule_relationship": "SCHEDULED"
        },
        "vehicle": {
          "id": "4318",
          "label": "4318"
        },
        "position": {
          "latitude": 47.64524,
          "longitude": -122.370171
        },
        "current_stop_sequence": 228,
        "stop_id": "2010",
        "current_status": "IN_TRANSIT_TO",
        "timestamp": 1618418841
      }
    },

Nachdem Sie nun wissen, dass ein solcher Feed verfügbar ist, müssen Sie herausfinden, wie eine Benachrichtigung gesendet werden kann, sobald ein Bus so nah ist, dass Fahrgäste sich auf den Weg zur Bushaltestelle begeben sollte. Dazu können Sie einenGeofence erstellen, der einige Bushaltestellen vor dem gewünschten Halt liegt. Auf diese Weise können Sie benachrichtigt werden, wenn der Bus den Geofence erreicht bzw. verlässt. Wenn der Fahrgast eine solche Benachrichtigung erhält, muss er noch nicht einmal auf der Karte nachsehen, wo sich der Bus gerade befindet. Sobald er die Benachrichtigung empfängt, weiß er, dass er losgehen muss.

Entwerfen einer Lösung mit Azure-Diensten

Nachfolgend ist eine mögliche Architektur für dieses Szenario und die ideale Lösung gezeigt:

Diagramm der Microservicearchitektur zum rechtzeitigen Erreichen von Bussen

In dieser Architektur werden verschiedene Dienste verwendet, um die Menge an Code zu minimieren, der geschrieben werden muss. Außerdem können so die Skalierbarkeits- und Infrastrukturvorteile von Azure genutzt werden.

Bekannter Text (Well-Known Text, WKT) ist eine Nur-Text-Markupsprache für die Darstellung von Vektorgeometriepositionen auf einer Karte. WKT ist ein OGC-Standard (Open Geospatial Consortium) zum Darstellen von räumlichen Daten im Textformat. Die meisten OGC-kompatiblen Systeme unterstützen WKT.

An dieser Stelle erhalten Sie einen Überblick über die ausgewählten Lösungskomponenten und erfahren, weshalb sie verwendet werden. Der Schwerpunkt dieses Moduls liegt dann auf dem Datenbankdienst.

Speichern und Verarbeiten von Daten mit Azure SQL-Datenbank

Azure SQL-Datenbank eignet sich hervorragend für dieses Szenario. Im Folgenden zeigen wir Ihnen, weshalb.

Azure SQL-Datenbank verfügt über native JSON-Unterstützung. Dadurch lässt sich die Menge an Code reduzieren, die zum Bearbeiten der Daten benötigt wird, die an die Datenbank gesendet bzw. von der Datenbank empfangen werden. Außerdem wird die Lösung durch die Flexibilität von JSON agiler und lässt sich einfacher verbessern. Darüber hinaus wird sichergestellt, dass Sie Datenarrays effizient an Azure SQL übergeben, Roundtrips optimieren und die Latenz reduzieren können.

Azure SQL bietet zudem vollständige Unterstützung für Geofunktionen. Dies ist ein großartiges Feature, da die Bearbeitung von Geodaten nicht gerade einfach ist. Mit einer funktionsreichen räumlichen Engine innerhalb der Datenbank lässt sich die Komplexität vermeiden, die mit der Integration in externe Bibliotheken einhergeht. Außerdem müssen Sie Daten nicht verschieben, um z. B. herauszufinden, ob sich ein Bus innerhalb eines definierten Geofence befindet. Da Azure SQL den Open Geospatial Consortium-Standards entspricht, lassen sich die in Azure SQL gespeicherten Daten problemlos in Visualisierungsbibliotheken wie OpenLayers integrieren.

Den oben genannten Features liegen die soliden Grundlagen des relationalen Modells zugrunde, das im Laufe der Jahre kontinuierlich verbessert wurde, um die Anforderungen moderner Anwendungen zu erfüllen. Azure SQL-Datenbank ist bis zu 100 TB skalierbar mit der Hyperscale-Ebene, was bedeutet, dass Sie sie für speicherintensive Anwendungen (z. B. große Datenbanken) verwenden können. Azure SQL-Datenbank ist auch kosteneffizient, wenn Sie die Serverlose Ebene verwenden, die automatische Skalierung und Anhalten und Fortsetzen unterstützt. Azure SQL unterstützt zudem Columnstore-Indizes für ultraschnelle analytische Abfragen, Graphmodelle für eine vereinfachte Verwaltung komplexer Objektbeziehungen und einen hochmodernen Abfrageoptimierer, der kontinuierlich verbessert wird und sogar den anspruchsvollsten Workloads gerecht wird (z. B. den enormen Workloads beim Multiplayer-Onlinegaming).

Mit Azure SQL kann darüber hinaus problemlos auf statische Daten zugegriffen werden, z. B. auf die bereitgestellten GTFS-Routeninformationen, die in einem Azure Blob Storage-Konto gespeichert werden können. Wir können die OPENROWSET-Funktion in Azure SQL verwenden, um Daten aus einer Textdatei zu importieren, ohne dass ein anderer Dienst erforderlich ist. Dies ermöglicht es uns, die Komplexität der Lösung zu minimieren.

All diese Gründe sprechen für den Einsatz von Azure SQL-Datenbank für Anwendungen wie die App zum Ermitteln der Busposition, bei der JSON- und Geodaten verarbeitet werden, während Sie gleichzeitig von den integrierten Funktionen für Datenzugriff und -verarbeitung der Engine profitieren möchten. Die Ebene „Serverlos“ von Azure SQL-Datenbank eignet sich hervorragend für Szenarios mit Anforderungen an eine automatische Skalierung. Mit dieser Option werden Sie problemlos Spitzenzeiten gerecht, in denen eine größere Anzahl von Fahrgästen auf die App zugreift. Azure SQL-Datenbank unterstützt außerdem CI/CD-Technologien (Continuous Integration und Continuous Delivery/Continuous Deployment) wie Azure DevOps und GitHub Actions, was das Automatisieren der Bereitstellung vereinfacht.

Erstellen eines API-Diensts mit Azure Functions

Sie benötigen eine API, um auf den GTFS-Feed zuzugreifen und diesen zu nutzen, falls Benutzer*innen benachrichtigt werden sollen, sobald sich ein Bus innerhalb eines Geofence befindet. Außerdem wird eine API benötigt, um Daten für eine Webanwendung bereitzustellen. Sie haben sich aufgrund der Einfachheit und serverlosen Architektur für Azure Functions als Dienst entschieden. Azure Functions ist ein hervorragender Dienst, dessen serverlose Architektur sich automatisch auf den gewünschten Umfang skalieren lässt. Auf diese Weise lassen sich fast alle Infrastrukturaspekte mit Azure Functions abdecken. Zudem bietet Azure Functions Unterstützung für verschiedene Sprachen, sodass Sie Ihre bevorzugte oder die am besten geeignete Sprache für Ihre aktuelle Aufgabe auswählen können und somit ein echter Microserviceansatz umgesetzt wird.

Senden von Benachrichtigungen mit Azure Logic Apps

Wenn eine Benachrichtigung gesendet werden soll, sobald sich ein Bus innerhalb des Geofence befindet und Fahrgäste zur Haltestelle gehen sollten, kann zu diesem Zweck Azure Logic Apps eingesetzt werden. Azure Logic Apps verfügt über eine große Anzahl von Connectors für die Integration mit anderen Diensten. Sie können mit Azure Logic Apps beispielsweise eine SMS-Nachricht oder eine E-Mail von Ihrem Outlook- oder Gmail-Konto senden. Besonders hervorzuheben ist, dass Azure Logic Apps eine Plattform mit wenig Code bzw. eine codefreie Plattform ist. Sie können den Benachrichtigungsdienst für die Busposition also ganz einfach mit nur wenigen Mausaktionen einrichten.

Hosten der Webanwendung mit Azure Static Web Apps

Zum Visualisieren von Geodaten, die die Geofences und Buspositionen auf einer Karte darstellen, können Sie eine statische HTML-Seite erstellen. Verwenden Sie hierzu die bekannten jQuery- und OpenLayers-Bibliotheken. Die statische Seite muss Daten von einer serverseitigen REST-API abrufen, die von einer anderen Azure-Funktion bereitgestellt wird. Da für die Visualisierungsseite sowohl eine Client- als auch eine Back-End-Komponente benötigt werden, können Sie zu diesem Zweck Azure Static Web Apps nutzen. Mit Azure Static Web Apps lässt sich die Lösung problemlos entwickeln und bereitstellen, da die Funktionen von Azure Web Apps und Azure Functions kombiniert werden. Außerdem ist die Integration mit GitHub Actions bereits vorhanden.

Automatisieren der Bereitstellung mit GitHub Actions

Wie Sie gesehen haben, besteht die vollständige Lösung aus mehreren beweglichen Teilen: dem Back-End-Dienst zum Pullen von Daten aus dem Echtzeitfeed, der Datenbank zum Speichern, Verarbeiten und Bereitstellen von Daten sowie der Front-End-Visualisierungslösung, die aus einer statischen HTML-Datei und einem REST-API-Endpunkt besteht. Durch die Verwendung einer CI/CD-Pipeline über GitHub Actions automatisieren Sie die Bereitstellung all dieser Komponenten über GitHub und Visual Studio Code, wenn Sie Änderungen committen. Datenbankänderungen werden (sofern vorhanden) gemeinsam mit Azure Functions- und Azure Static Web Apps-Änderungen vollständig automatisiert und orchestriert bereitgestellt.

Wissensbeurteilung

1.

Welcher Datenbankdienst sollte in diesem Szenario zum Speichern, Verarbeiten und Bereitstellen der Echtzeitbusdaten verwendet werden?

2.

Ein gängiges offenes Standarddateiformat, das wir für den Empfang von IoT-Daten von Transitfahrzeugen in diesem Szenario verwenden werden:

3.

Welche Dienstebene oder welches Feature von Azure SQL-Datenbank bietet Unterstützung für ein Szenario, in dem eine Datenbank mit 12 TB benötigt wird?