211service.com
Bygg en modern applikation med specialbyggda AWS-databaser
Tillhandahålls av Amazon webbtjänster
Dagarna med monolitiska databaser som passar alla är bakom oss. Som Werner Vogels, CTO och vice vd för Amazon.com, sa, Sällan kan en databas passa behoven hos flera olika användningsfall. Tidigare konstruerades webbapplikationer med hjälp av LAMP-stacken (Linux, Apache, MySQL och PHP), där en enda databas användes för många olika upplevelser. Däremot dagens webbapplikationer från kunder som t.ex Expedia, Airbnb och Capital One använd inte en enda databas – de använder flera olika typer av databaser.
Faktum är att utvecklare idag bygger mycket distribuerade applikationer med hjälp av en mängd specialbyggda databaser . På sätt och vis gör utvecklare det de är bäst på – dela upp komplexa applikationer i mindre bitar – vilket gör att de kan välja rätt verktyg för rätt jobb.
I det här blogginlägget diskuterar vi AWS specialbyggda databaser och hur man använder dem för att skapa rika upplevelser för dina kunder. Vi går också igenom ett detaljerat exempel på dessa databaser som driver olika upplevelser i en applikation, och tillhandahåller de verktyg du behöver för att snurra upp appen för dig själv på några minuter.
AWS-kunder berättar för oss att de vill bygga skalbara, högpresterande och funktionella applikationer som har specifika prestanda och affärsbehov. Under de senaste åren har vi svarat på dessa kundbehov genom att introducera nya tjänster som t.ex Amazon Neptunus för grafdatabaser, Amazon-Aurora för helt hanterade relationsdatabaser av kommersiell kvalitet, samt en ständigt förbättrad funktionsuppsättning som t.ex Amazon Aurora Serverlös . På AWS re:Invent 2018, AWS meddelat flera nya tillägg och funktioner till vår familj av specialbyggda databaser:
- Amazon Quantum Ledger Database (QLDB), en specialbyggd reskontradatabas.
- Amazon Timestream , en tidsseriedatabastjänst för internet-of-things (IoT) och operativa applikationer.
- Amazon DynamoDB on-demand kapacitetsläge , ett faktureringsalternativ som låter dig betala endast för de resurser du förbrukar.
- Amazon Aurora Global Database , som spänner över flera AWS-regioner samtidigt som skrivningar replikeras med en typisk latens på mindre än en sekund.
I januari 2019, AWS meddelade Amazon DocumentDB (med MongoDB-kompatibilitet). Med dessa tillägg, utvecklare har ett val av relations-, nyckel-värde-, dokument-, minnes-, sök-, graf-, tidsserie- och reskontradatabaser för att passa deras individuella användningsfall. Var och en av dessa databaser är byggda för att vara rätt verktyg för rätt jobb.
Hur AWS-kunder använder specialbyggda databaser
Hur utnyttjar AWS-kunder alla dessa specialbyggda databaser tillsammans? På AWS re:Invent 2018 presenterade vi Databaser om AWS: Rätt verktyg för rätt jobb . I den här sessionen diskuterade vi hur AWS-kunder använder olika databaser tillsammans för att leverera rika, end-to-end-upplevelser för sina kunder.
Vi visade en demo i sessionen som ger ett verkligt exempel på hur kunder bygger applikationer genom att använda specialbyggd arkitektur på AWS. Demonstrationen beskriver hur ett webbskyltfönster (i det här fallet en bokhandel) är byggt ovanpå flera databaser, som var och en tar upp olika användningsfall. Ett klipp av demon följer, med start 21:43.
Hur man adresserar olika användningsfall med olika specialbyggda databaser
Det föregående klippet visade upp en onlinebokhandelsdemoapplikation (se följande skärmdump). Som med alla moderna, full-stack webbapplikationer, har denna applikation flera olika användningsfall, inklusive en produktkatalog, produktsökning, bästsäljarlista och sociala rekommendationer.
Figur 1: En skärmdump av AWS Bookstore Demo App
Låt oss börja med användningsfallet för produktkatalogen. När en användare kommer åt bokhandelns webbbutik kan de förvänta sig att se en lista med produkter. Produkter innehåller vanligtvis unika identifierare och attribut som beskrivningar, kvantiteter, platser och priser. I teknisk mening är metoden för att hämta dessa typer av attribut ofta en nyckel-värdesökning baserad på produktens unika identifierare. Detta innebär att en applikation kan hämta dessa andra attribut när en produkts unika identifierare tillhandahålls. Detta användningsfall gör Amazon DynamoDB passar utmärkt som det hållbara systemet för bokhandelns produktkatalog eftersom DynamoDB ger snabb, förutsägbar prestanda i alla skala för nyckel-värde-sökningar. Med DynamoDB kan produktkatalogen börja med några hundra produkter och skalas till miljarder produkter utan att behöva bygga om eller ändra databaser.
Det andra användningsfallet är att göra det möjligt för kunder att söka i produktkatalogen. När kunder kommer till bokhandeln vill de hitta den produkt de tänker köpa eller söka igenom katalogen för att hitta nästa bra läsning. I dagens värld tränas användare i att vara effektiva med nyckelordssökningar för att hitta det de letar efter. Amazon Elasticsearch-tjänst (Amazon ES) är en databasteknik som löser dessa användarbehov. Med naturliga språkfunktioner, facetterad navigering och rankade resultat hjälper Amazon ES kunder att snabbt hitta de artiklar de vill ha i produktkatalogen.
Bokhandelsapplikationen måste hålla produktkatalogen (i DynamoDB) synkroniserad med sökindexet i Amazon ES. Närhelst en produkt läggs till, uppdateras eller tas bort från katalogens produkttabell i DynamoDB, måste ändringen också återspeglas i sökindexet i Amazon ES. Ett enkelt sätt att göra detta är att använda Amazon DynamoDB-strömmar med AWS Lambda att asynkront uppdatera Amazon ES-index varje gång en ändring görs i produktkatalogen i DynamoDB.
Det tredje användningsfallet är en bästsäljarlista för produktkatalogen som gör det möjligt för bokhandelns användare att se vilka de 20 mest köpta böckerna är. För denna upplevelse tillåter den idealiska databasen bokhandeln att upprätthålla en topplista utan att behöva göra långa och dyra summeringsfrågor över alla köp varje gång en användare uppdaterar webbsidan. Amazon ElastiCache för Redis tillhandahåller exakt vad som behövs, inklusive inbyggda datastrukturer i minnet som sorterade uppsättningar som gör att bokhandeln snabbt och effektivt kan skapa en bästsäljarlista. För att få det igång kan bokhandeln använda DynamoDB Streams (liknande användningsfallet för produktsökning) från beställningstabellen för att uppdatera den senaste statusen i ElastiCache varje gång ett nytt föremål köps. Med den tillgängliga bästsäljarlistan kan bokhandeln också visa en del av den på sin hemsidas hemsida. Dessutom, eftersom data finns i minnet och tillgänglig via de inbyggda sorterade uppsättningarna, kommer bokhandeln att uppleva mikrosekunders läsfördröjningar för frågor på bästsäljarlistan.
Det fjärde användningsfallet är att ge sociala rekommendationer för att hjälpa bokhandelns kunder att hitta mer kontextuellt lämpligt innehåll – i det här fallet innehåll baserat på vad deras vänner har köpt. Eftersom sociala rekommendationer finns på bokhandelns hemsida och andra sidor på webbplatsen måste rekommendationerna vara snabba. När webbplatsen växer måste också lösningen skalas med fler produkter, sidor och användare. Med dessa krav kan en specialbyggd grafdatabas som t.ex Amazon Neptunus är en naturlig passform för att navigera i länkar i data, vilket möjliggör rekommendationer som är baserade på sociala kopplingar och relaterad köpaktivitet. Neptune tillhandahåller den nödvändiga funktionaliteten och prestanda som vi behöver för att snabbt bygga och köra frågor för att korsa grafrelationer, och det kommer att skalas när webbplatsen (och applikationen) växer utan att kompromissa med prestanda.
För att hämta och uppdatera all denna information gör webbskyltfönstret en serie olika API-anrop. Här är en bild av hur applikationen ser ut i backend, med hjälp av Amazon API Gateway och AWS Lambda:
Figur 2: Arkitektonisk diagram av AWS Bookstore Demo App
För denna bokhandelsapplikation utvärderade vi applikationens huvudsakliga användningsfall och valde den bästa databasen för varje användningsfall. Specialbyggda databaser gör att du kan skapa skalbara, högpresterande och funktionella backend-infrastrukturer för att driva dina applikationer och adressera varje användningsfall med den mest lämpliga komponenten. Genom att följa detta tillvägagångssätt kan du bygga en liknande arkitektur med dina egna resurser.
Få det igång
Varje kund som skapar en webbapplikation måste gå igenom nästan exakt samma process för att välja komponenter, men det är bara halva striden. Kanske ännu viktigare, efter att ha valt sin önskade arkitektur måste de bygga högen från grunden, varje gång. Detta fick oss att tänka: varför inte göra arkitekturen lättare att bygga? Med så många kunder som går igenom en mycket liknande process, hur kan vi förenkla detta? För kunder som fortfarande är i inlärnings- eller undersökande faser, hur kan vi hjälpa dem att få igång en fullstackapplikation på några minuter med hjälp av dessa specialbyggda databaser?
För att svara på dessa frågor skapade vi en singel AWS CloudFormation mall för att automatisera skapandet av hela denna bokhandelsdemoapplikationsstapel, från början till slut, på bara några minuter. Vidare gjorde vi all källkod, bilder och exempeldata tillgängliga på GitHub för dig att distribuera, utforska, ändra och utöka.
Bild 3: AWS Bookstore Demo App-förrådet på GitHub
Som vi visade i re:Invent-sessionen är AWS Bookstore Demo App en fungerande applikation som använder fyra specialbyggda databaser för att ge en kraftfull, funktionell användarupplevelse. Du kan distribuera applikationen i ditt AWS-konto med några få klick med AWS CloudFormation (för mer information, se filen readme.md på GitHub ). När du väl har distribuerats i ditt konto kan du utforska datamängderna i Amazon DynamoDB, Amazon Elasticsearch, Amazon ElastiCache för Redis och Amazon Neptune. Readme.md-filen innehåller ytterligare steg som leder dig igenom hur du gör detta steg för steg, tillsammans med kommentarer om hur allt hänger ihop. Du kan använda appen som en sandlåda eller lärandeverktyg för att utforska hur en arkitektur som denna passar ihop, eller som en startmall för att bygga din egen applikation.
Vad händer om mina ansökningskrav är annorlunda?
AWS Bookstore Demo App är bara ett exempel på hur du kan använda specialbyggda databaser för att bygga en skalbar och högpresterande full-stack-applikation, till exempel en webbutik. Om du vill börja med den här stacken som baslinje men ditt användningsfall är mer passande för en relationsdatabas (som Amazon RDS), kan du ändra applikationen för att använda det istället. Om du vill utnyttja ElastiCache för cachning framför några av de andra databaskomponenterna för att förbättra prestandan kan du lägga till det också. Faktum är att vi uppmuntrar dig att dela vår repo och ändra demoapplikationen för att utforska områden som du vill lära dig mer om. Du kan byta ut databastyper, prova olika komponenter och ladda dina egna resurser och data. Om du utvecklar något intressant som du känner skulle vara värdefullt för andra att använda, vänligen skicka in en pull-förfrågan så att vi kan utöka demon.
Om din applikation är helt annorlunda, men du fortfarande letar efter en grundläggande full-stack-applikation att bygga ovanpå, är AWS Bookstore Demo App byggd ovanpå AWS full-stack mall (finns även på GitHub ). AWS Full-Stack Template tillhandahåller de grundläggande tjänsterna, komponenterna och VVS som behövs för att få igång en grundläggande webbapplikation, vilket sparar tid och hjälper dig att fokusera på din applikations differentiatorer. Du kan bygga på AWS Full-Stack-mall för att skapa vilken applikation som helst du föreställer dig, oavsett om det är ett resebokningsverktyg, en blogg eller en annan webbapp. AWS Bookstore Demo App är bara ett exempel på vad du kan skapa med hjälp av AWS full-stack mall .
Nästa gång du använder ett program, försök att föreställa dig vilken databas som ligger bakom gardinerna. Mer än troligt finns det flera databaser (och andra tjänster) som arbetar tillsammans för att driva din upplevelse. Om du vill lära dig mer och börja bygga, ta en av dessa full-stack-applikationer för en runda. Vi ser fram emot att se vad du bygger!
