AWS tillhandahåller Batch-tjänst som är designad för ingenjörer och forskare att köra stora beräkningsbatch-jobb. Du skapar en beräkningsmiljö, associerar den med en jobbkö och definierar sedan jobbdefinitioner som anger vilka containerbilder som ska köras.
I jämförelse med Lambdas kräver det lite mer setup, men å andra sidan behöver du inte oroa dig längre för tidsbegränsningar. Vi använder den för närvarande för att köra tunga aggregationer i vår DWH - uppgift, vilket var svårt att göra med bara lambdas.
Även om Glue, Lambda, Batch möjliggör snabb kodutveckling och distribution, kan QA vara besvärligt.
Eftersom mer kritiska och komplexa pipelines utvecklas, är det på något sätt svårt att säkerställa att korrekta tester äger rum. Det är omöjligt att replikera den serverlösa miljön lokalt för enhetstestning.
Att sätta upp en dedikerad serverlös testmiljö med Köp telefonnummerlista tillräckligt med meningsfull data och metadata är en ganska utmaning, för att inte tala om kostnadskonsekvensen.
För att mildra detta skapar vi Glue Development-slutpunkter när det är nödvändigt för att testa kodartefakter innan vi marknadsför dem i produktion.
För Lambda, när vi använder Python, skapar vi lokala virtuella miljöer där vi kan köra enhetstester och sedan paketera våra applikationer.
Dessutom använder vi PostgreSQL docker-bild för att simulera rödförskjutning, vilket inte heller är idealiskt eftersom det ibland finns betydande skillnader mellan dessa databaser.
För att orkestrera våra pipelines använder vi AWS Step Functions .
Step Fungerar en helt hanterad tjänst, vilket innebär att du inte behöver konfigurera några instanser.
Stegfunktioner bygger på konceptet med tillståndsmaskiner, och de kan implementeras som JSON-dokument. Bland många andra funktioner tillåter de att köra jobb synkront och asynkront, hantera beroenden, parallella körningar, etc.
Och självklart är Glue, Lambda och Batch helt integrerade med Step Functions. Förmodligen skulle ett verktyg som stöder DAG (Direct Acyclic Graph) kunna vara mer lämpligt för invecklade batchpipelines, men tills nyligen fanns inget sådant verktyg tillgängligt i AWS som en hanterad tjänst.
AWS tillhandahåller nu Apache Airflow som en hanterad, serverlös tjänst. Visst kommer vi att utvärdera detta i framtiden, men sanningen är att Step-funktionerna har tjänat oss väl. De är enkla att implementera och underhålla och tillhandahåller alla funktioner vi behöver.
Vårt moln Data Warehouse
Eftersom vi förlitar oss på AWS är Redshift det naturliga valet för vårt Data Warehouse. Det ger många fördelar och några brister, som jag inte kommer att gå in på i detalj.
Redshift passar vårt serverlösa tillvägagångssätt eftersom det inte finns någon serverhantering inblandad och att skala både vertikalt och horisontellt är en relativt enkel process.
Dessutom finns produktionsliknande funktioner som arbetsbelastningshantering och automatiserade ögonblicksbilder tillgängliga, vilket gör det till en utmärkt lösning inom AWS för att stödja vår analysfunktion.
Frågeprestanda är också tillfredsställande och kan stödja våra rapporteringskrav.
Nyligen började vi också arbeta med att lägga till AWS Spectrum till vår stack.
Spectrum gör det möjligt att söka efter extern data, till exempel en lagrad i S3, så att du inte behöver importera data till databasen.
Rapporter, rapporter!
Vår rapportering görs med Tableau Online, en molnbaserad analystjänst. Det är den enda analyskomponenten utanför vår AWS-infrastruktur.
På Tableau Online kan vi bygga och dela rapporter, schemalägga utdrag, skapa ad hoc-analyser, allt i ett mycket trevligt användargränssnitt — drömmarna för analytiker (eller hur?!).
Utan att gå in på så mycket detaljer ger den det vi behöver utan att behöva hantera några servrar och skalar sömlöst.
Som väntat presenterar Tableau också sina utmaningar. Främst för att den har en direkt koppling till databasen och analytiker kan publicera rapporter med godtycklig SQL-kod och schemalägga att den ska köras.
För att lösa detta problem har vi implementerat få datastyrningsåtgärder, såsom separata köer i Redshift för Tableau-användare med begränsningar av resurser.
Vi startade också en process för att flytta extraktschemat för att istället bli en del av ETL (mot att använda Tableau UI). På så sätt kommer vi att kontrollera vilka frågor och vid vilken tidpunkt de kommer att köras för rapporteringsändamål; detta görs mestadels via Tableau API.
Slutmålet vi har här är att integrera Tableau i vår datainfrastruktur och hantera den som vilken annan komponent vi har.
Vårt serverlösa tillvägagångssätt accelererar vår analys och vad detta betyder för framtida arbete
Vårt serverlösa tillvägagångssätt har visat sig möjliggöra och påskynda hur analyser är tillgängliga för vår verksamhet.
Detta kommer inte utan sina egna utmaningar och begränsningar, men det tillåter betydande kostnadsbesparingar samtidigt som det levererar konsekvent kvalitet och underlättar agil förändringshantering.
När fler serverlösa verktyg görs tillgängliga, bör noggrann övervägande göras för att välja de mer lämpliga verktygen och utvärdera deras kostnader och fördelar.
Enligt vår erfarenhet är fördelarna och nackdelarna med serverlös analys:
Fördelar:
Ingen serverhantering. Inget behov av att manuellt hantera serverinstanser. Alla beräkningsresurser kan enkelt konfigureras.
Minskad kostnad, betala bara för infrastruktur när den används.
Snabba distributioner.
Nackdelar:
Testning och felsökning är ganska utmanande. Svårt att replikera miljön lokalt.
Inte särskilt bra för långvariga processer, på grund av Lambda-gränser.
Ganska komplicerat att lägga till komponenter utanför AWS-stacken.
Håll ögonen öppna. Mer om detta kommer snart!
AWS Step Functions orkestrerar våra pipelines
-
- Posts: 3
- Joined: Sun Dec 15, 2024 3:51 am