Een oplossing ontwerpen met Behulp van Azure

Voltooid

Voor het maken van een toepassingsarchitectuur moet u inzicht krijgen in de breedte van functionele en niet-functionele vereisten en deze vereisten vervolgens koppelen aan hulpprogramma's, technologieën en services die aan deze vereisten kunnen voldoen.

In het busvangende scenario zijn er enkele belangrijke vereisten:

  • Een website voor het bewaken van realtime buslocaties
  • Meldingen wanneer een bus dichtbij is
  • Geautomatiseerde implementatie en schalen

Laten we dieper ingaan op dit scenario en hoe u een oplossing kunt ontwerpen met behulp van verschillende Azure-services.

Realtime busgegevens ophalen

Veel steden bieden gegevens over openbaar vervoer via GTFS (General Transit Feed Specification) die ook ondersteuning biedt voor een realtime feed met de naam GTFS real-time Reference v2 (GTFS-RT). De feed bestaat uit een JSON-document dat eruitziet als het volgende voorbeeld (uit De Metro-feed van King County):

{
      "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
      }
    },

Als u weet dat een dergelijke feed beschikbaar is, moet u vervolgens uitzoeken hoe u een melding krijgt wanneer een bus dicht bij u is, zodat u weet dat u naar het busstation gaat om de bus op tijd te halen. Om dat te doen, kunnen we een geofence een paar bushaltes maken voor ons beoogde station. Op deze manier kunt u een melding ontvangen wanneer de bus de geofence binnenkomt of verlaat. Als u een melding krijgt wanneer dat gebeurt, hoeft u niet eens op een kaart te blijven controleren waar de bus zich bevindt. Wanneer u de melding krijgt, weet u dat het tijd is om te vertrekken.

Een oplossing ontwerpen met Azure-services

Dit is een mogelijke architectuur op basis van het scenario en de ideale oplossing:

Diagram van de architectuur van catch the bus microservices.

De architectuur maakt gebruik van verschillende services om de hoeveelheid code te minimaliseren die u moet schrijven en om optimaal te profiteren van de schaalbaarheids- en infrastructuurvoordelen die Azure biedt.

Well-Known Text (WKT) is een opmaaktaal voor tekst zonder opmaak voor het weergeven van vectorgeometrielocaties op een kaart. WKT is een OGC-standaard (Open Geospatial Consortium) die wordt gebruikt om ruimtelijke gegevens in een tekstindeling weer te geven. De meeste OGC-compatibele systemen ondersteunen bekende tekst.

Hier krijgt u een overzicht van welke oplossingsonderdelen worden geselecteerd en waarom. Vervolgens richt u zich in deze module op de databaseservice.

Gegevens opslaan en verwerken met Azure SQL Database

Azure SQL Database is geschikt voor dit scenario. Laten we eens begrijpen waarom.

Azure SQL Database biedt systeemeigen JSON-ondersteuning, wat helpt bij het verminderen van de hoeveelheid code die nodig is voor het manipuleren van gegevens die worden verzonden en ontvangen met de database. Het maakt de oplossing ook flexibeler en gemakkelijker te verbeteren dankzij de flexibele aard van JSON. Het zorgt er ook voor dat u efficiënt matrices van gegevens kunt doorgeven aan Azure SQL, retouren kunt optimaliseren en latentie kunt verminderen.

Azure SQL biedt ook volledige georuimtelijke ondersteuning. Dit is een uitstekende functie, omdat het bewerken van georuimtelijke gegevens niet de eenvoudigste taken is. Door een volledig functionele georuimtelijke engine in de database te hebben, kunt u de complexiteit van integratie met externe bibliotheken voorkomen. U hoeft ook geen gegevens te verplaatsen om erachter te komen, bijvoorbeeld als een bus zich in een gedefinieerde geofence bevindt. Omdat Azure SQL voldoet aan de open georuimtelijke consortiumstandaarden, is het eenvoudig om gegevens die zijn opgeslagen in Azure SQL te integreren met visualisatiebibliotheken zoals OpenLayers.

De bovengenoemde functies zijn gebouwd op de rotsvaste fundamenten van het relationele model, ontwikkeld door jaren van verbetering om te voldoen aan de vereisten van moderne toepassingen. Azure SQL Database is schaalbaar tot 100 TB met de Hyperscale-laag, wat betekent dat u deze kunt gebruiken voor opslagintensieve toepassingen (bijvoorbeeld grote databases). Azure SQL Database is ook rendabel wanneer u de serverloze laag gebruikt, die ondersteuning biedt voor automatisch schalen en onderbreken en hervatten. Azure SQL biedt ook ondersteuning voor columnstore-indexen voor razendsnelle analytische query's, grafiekmodellen om het beheer van complexe objectrelaties te vereenvoudigen en een geavanceerde queryoptimalisatie die continu wordt verbeterd en zelfs de meest veeleisende werkbelasting kan verwerken, zoals de manier die nodig is voor de enorme multiplayer online gaming van vandaag.

Met Azure SQL is het ook eenvoudig om toegang te krijgen tot statische gegevens, zoals de routegegevens van de GTFS-standaard, die kunnen worden opgeslagen in een Azure Blob Storage-account. We kunnen de OPENROWSET functie in Azure SQL gebruiken om gegevens uit een tekstbestand te importeren zonder dat er een andere service nodig is. Hierdoor kunnen we de complexiteit van de oplossing minimaliseren.

Om deze redenen is Azure SQL Database geschikt voor toepassingen zoals de busvangende app, waar u te maken hebt met JSON- en georuimtelijke gegevens, maar ook wilt profiteren van de mogelijkheden voor gegevenstoegang en procedures die zijn ingebouwd in de engine. Serverloos in Azure SQL Database is een uitstekende optie om te voldoen aan de vereiste voor automatisch schalen, zodat de toepassing drukke tijden overdag kan verwerken wanneer meer mensen de bus proberen te pakken. Azure SQL Database ondersteunt ook technologieën voor continue integratie en continue levering/continue implementatie (CI/CD), zoals Azure DevOps en GitHub Actions, waardoor implementatieautomatisering wordt vereenvoudigd.

Een API-service bouwen met Azure Functions

U hebt een API nodig voor toegang tot en verbruik van de GTFS-feed, om een gebruiker op de hoogte te stellen als een bus een geofence heeft ingevoerd en om gegevens te leveren aan een webtoepassing. U hebt Azure Functions geselecteerd als de gewenste service vanwege de eenvoud en serverloze architectuur. Azure Functions is een uitstekende service omdat de serverloze aard automatisch wordt aangepast aan wat u nodig hebt, waardoor bijna alle infrastructurele aspecten aan Azure Functions worden overgelaten. Azure Functions biedt ondersteuning voor verschillende talen, zodat u een of de meest geschikte taal kunt kiezen voor de taak waarop u werkt, die een pure microservicesbenadering volgt.

Meldingen verzenden met Azure Logic Apps

Als u een melding wilt ontvangen dat een bus zich in de geofence bevindt en u moet beginnen met wandelen naar het busstation, is een optie in Azure om Azure Logic Apps te gebruiken. Azure Logic Apps heeft een groot aantal connectors, zodat u kunt integreren met andere services. U kunt bijvoorbeeld Azure Logic Apps gebruiken om een sms-bericht te verzenden of een e-mailbericht te verzenden vanuit uw Outlook- of Gmail-account. Wat handig is met Azure Logic Apps, is dat het een platform met weinig code/geen code is, dus het instellen van de meldingsservice voor het vangen van de bus is eenvoudig en u kunt dit doen met slechts een paar muisacties.

De webtoepassing hosten met Azure Static Web Apps

Als u georuimtelijke gegevens wilt visualiseren, die de geofences en busposities op een kaart vertegenwoordigt, kunt u een statische HTML-pagina maken met behulp van de bekende jQuery- en de OpenLayers-bibliotheken. De statische pagina moet gegevens ophalen uit een REST API aan de serverzijde die door een andere Azure-functie wordt verstrekt. Omdat zowel de client- als back-endonderdelen nodig zijn om de visualisatiepagina te laten werken, kunt u profiteren van Azure Static Web Apps. Met Azure Static Web Apps kunt u de oplossing eenvoudig ontwikkelen en implementeren, omdat deze de mogelijkheden van Azure Web Apps en Azure Functions combineert, plus integratie met ingebouwde GitHub Actions.

Implementatie automatiseren met GitHub Actions

Zoals u hebt gezien, bestaat de volledige oplossing uit verschillende bewegende onderdelen: de back-endservice voor het ophalen van gegevens uit de realtime feed; de database voor het opslaan, verwerken en verwerken van gegevens; en de front-endvisualisatieoplossing, die bestaat uit een statisch HTML-bestand en een REST API-eindpunt. Met behulp van een CI/CD-pijplijn via GitHub Actions automatiseert u de implementatie van alle onderdelen via GitHub en Visual Studio Code wanneer u wijzigingen doorvoert. Databasewijzigingen, indien aanwezig, samen met Wijzigingen in Azure Functions en Azure Static Web Apps, worden op een volledig geautomatiseerde en ingedeelde manier geïmplementeerd.

Kenniscontrole

1.

Welke databaseservice moet in dit scenario worden gebruikt om de realtime busgegevens op te slaan, te verwerken en te verwerken?

2.

Een algemene open standaardbestandsindeling die we gebruiken voor het ontvangen van IoT-gegevens van transitvoertuigen in dit scenario is:

3.

Welke servicelaag of functie in Azure SQL Database biedt ondersteuning voor een scenario waarin een database van 12 TB is vereist?