Skapa en lösning med Hjälp av Azure

Slutförd

När du skapar en programarkitektur måste du förstå bredden av funktionella och icke-funktionella krav och sedan koppla ihop dessa krav med verktyg, tekniker och tjänster som kan uppfylla dessa krav.

I bussfångstscenariot finns det några huvudkrav:

  • En webbplats för övervakning av realtidsbussplatser
  • Meddelanden när en buss är i närheten
  • Automatiserad distribution och skalning

Nu ska vi titta närmare på det här scenariot och hur du kan skapa en lösning med hjälp av olika Azure-tjänster.

Hämta realtidsbussdata

Många städer tillhandahåller kollektivtrafikdata via GTFS (General Transit Feed Specification), som också stöder ett realtidsflöde som kallas GTFS realtidsreferens v2 (GTFS-RT). Flödet består av ett JSON-dokument som ser ut som följande exempel (från King County Metro-flödet ):

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

Om du vet att en sådan feed är tillgänglig måste du nästa lista ut hur du ska meddelas när en buss är tillräckligt nära dig så att du vet att börja gå till busstationen för att fånga bussen i tid. För att göra det kan vi skapa en geofence ett par busshållplatser före vår avsedda station. På så sätt kan du meddelas när bussen går in i eller lämnar geofence. Om du kan få ett meddelande när det händer behöver du inte ens fortsätta att kontrollera på en karta var bussen finns. När du får meddelandet vet du att det är dags att lämna.

Skapa en lösning med Azure-tjänster

Baserat på scenariot och den perfekta lösningen är följande en möjlig arkitektur:

Diagram of the Catch the bus microservices architecture.

Arkitekturen använder flera olika tjänster för att minimera mängden kod som du behöver skriva och för att dra största möjliga nytta av skalbarhets- och infrastrukturfördelarna som Azure ger.

Välkänd text (WKT) är ett oformaterad textmarkeringsspråk för att representera vektorgeometriplatser på en karta. WKT är en OGC-standard (Open Geospatial Consortium) som används för att representera rumsliga data i ett textformat. De flesta OGC-kompatibla system stöder välkänd text.

Här får du en översikt över vilka lösningskomponenter som väljs och varför. I den här modulen fokuserar du sedan på databastjänsten.

Lagra och bearbeta data med Azure SQL Database

Azure SQL Database passar bra för det här scenariot. Låt oss förstå varför.

Azure SQL Database har inbyggt JSON-stöd, vilket bidrar till att minska mängden kod som behövs för att manipulera data som skickas och tas emot med databasen. Det gör också lösningen mer flexibel och lätt att förbättra tack vare JSON:s flexibla natur. Det säkerställer också att du effektivt kan skicka datamatriser till Azure SQL, optimera rundturer och minska svarstiden.

Azure SQL ger också fullständigt geospatialt stöd, vilket är en bra funktion eftersom manipulering av geospatiala data inte är det enklaste av uppgifter. Genom att ha en helt aktuell geospatial motor i databasen kan du undvika komplexiteten med att integrera med externa bibliotek. Du behöver inte heller flytta runt data för att ta reda på om till exempel en buss ligger inom en definierad geofence. Eftersom Azure SQL följer Open Geospatial Consortium-standarderna är det enkelt att integrera data som lagras i Azure SQL med visualiseringsbibliotek som OpenLayers.

Ovan nämnda funktioner bygger på de stenfasta grunderna i relationsmodellen, som utvecklats genom år av förbättringar för att uppfylla kraven i moderna program. Azure SQL Database är skalbart upp till 100 TB med Hyperskala-nivån, vilket innebär att du kan använda den för lagringsintensiva program (till exempel stora databaser). Azure SQL Database är också kostnadseffektivt när du använder den serverlösa nivån, som stöder automatisk skalning och pausa och återuppta. Azure SQL har också stöd för columnstore-index för snabba analysfrågor, grafmodeller för att förenkla komplex objektrelationshantering och en toppmodern frågeoptimerare som kontinuerligt förbättras och kan hantera även den mest krävande arbetsbelastningen, som den som krävs av dagens massiva onlinespel för flera spelare.

Med Azure SQL är det också enkelt att komma åt statiska data, till exempel den väginformation som tillhandahålls av GTFS-standarden, som kan lagras i ett Azure Blob Storage-konto. Vi kan använda OPENROWSET funktionen i Azure SQL för att importera data från en textfil utan att behöva någon annan tjänst. På så sätt kan vi minimera lösningens komplexitet.

Därför passar Azure SQL Database bra för program som busfångstappen, där du hanterar JSON- och geospatiala data, men vill också dra nytta av de funktioner för dataåtkomst och procedur som är inbyggda i motorn. Serverlös Azure SQL Database är ett bra alternativ för att uppfylla kravet på automatisk skalning, vilket gör att programmet kan hantera upptagna tider under dagen när fler försöker fånga bussen. Azure SQL Database stöder även tekniker för kontinuerlig integrering och kontinuerlig leverans/kontinuerlig distribution (CI/CD), till exempel Azure DevOps och GitHub Actions, vilket förenklar distributionsautomatiseringen.

Skapa en API-tjänst med Azure Functions

Du behöver ett API för att komma åt och använda GTFS-flödet, för att meddela en användare om en buss har angett en geofence och för att hantera data till en webbapp. Du har valt Azure Functions som valfri tjänst på grund av dess enkelhet och serverlösa arkitektur. Azure Functions är en bra tjänst eftersom dess serverlösa natur autoskalningar till det du behöver, vilket lämnar nästan alla infrastrukturaspekter till Azure Functions. Azure Functions har stöd för olika språk, så att du kan välja önskad eller den lämpligaste för den uppgift som du arbetar med, vilket följer en ren mikrotjänstmetod.

Skicka meddelanden med Azure Logic Apps

För att få ett meddelande om att en buss ligger inom geofence och du måste börja gå till busstationen är ett alternativ i Azure att använda Azure Logic Apps. Azure Logic Apps har ett stort antal anslutningsappar så att du kan integrera med andra tjänster. Du kan till exempel använda Azure Logic Apps för att skicka ett SMS eller skicka ett e-postmeddelande från ditt Outlook- eller Gmail-konto. Det som är bra med Azure Logic Apps är att det är en plattform med låg kod/ingen kod, så det är enkelt att konfigurera meddelandetjänsten för att fånga bussen, och du kan göra det med bara några få musåtgärder.

Vara värd för webbprogrammet med Azure Static Web Apps

Om du vill visualisera geospatiala data, som representerar geofences och busspositioner på en karta, kan du skapa en statisk HTML-sida med hjälp av de välkända jQuery- och OpenLayers-biblioteken. Den statiska sidan måste hämta data från ett REST-API på serversidan som en annan Azure-funktion tillhandahåller. Eftersom både klient- och serverdelsdelar behövs för att visualiseringssidan ska fungera kan du dra nytta av Azure Static Web Apps. Azure Static Web Apps gör det enkelt att utveckla och distribuera lösningen eftersom den kombinerar funktionerna i Azure Web Apps och Azure Functions, plus att den har integrering med Inbyggd GitHub Actions.

Automatisera distributionen med GitHub Actions

Som du har sett består den fullständiga lösningen av flera rörliga delar: serverdelstjänsten för att hämta data från realtidsflödet; databasen för att lagra, bearbeta och hantera data. och klientdelsvisualiseringslösningen, som består av en statisk HTML-fil och en REST API-slutpunkt. Genom att använda en CI/CD-pipeline via GitHub Actions automatiserar du distributionen av alla delar via GitHub och Visual Studio Code när du genomför ändringar. Databasändringar, om det finns några, tillsammans med ändringar i Azure Functions och Azure Static Web Apps, kommer att distribueras på ett helt automatiserat och orkestrerat sätt.

Kunskapstest

1.

I det här scenariot ska vilken databastjänst användas för att lagra, bearbeta och hantera realtidsbussdata?

2.

Ett vanligt öppet standardfilformat som vi använder för att ta emot IoT-data från överföringsfordon i det här scenariot är:

3.

Vilken tjänstnivå eller funktion i Azure SQL Database stöder ett scenario där en 12 TB-databas krävs?