{"id":91635,"date":"2020-08-15T19:42:23","date_gmt":"2020-08-15T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem"},"modified":"2020-08-15T19:42:23","modified_gmt":"2020-08-15T17:42:23","slug":"na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej alle sammen! Mit navn er Nikolaj Golov. Tidligere arbejdede jeg hos Avito, hvor jeg i seks \u00e5r ledede Data Platform, hvilket bet\u00f8d, at jeg arbejdede med alle slags databaser: analytiske (Vertica, ClickHouse), streaming og OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). I l\u00f8bet af denne tid har jeg f\u00e5et indsigt i mange forskellige og specielle databaser samt de unikke anvendelsesscenarier for dem.<\/p>\n<p>Nu arbejder jeg hos ManyChat. I bund og grund er det en startup - ny, ambiti\u00f8s og hurtigt voksende. Og da jeg f\u00f8rste gang kom ind i virksomheden, opstod det klassiske sp\u00f8rgsm\u00e5l: \u201eHvad b\u00f8r en ung startup overveje at v\u00e6lge fra markedet for DBMS og databaser?\u201c <\/p>\n<p>I denne artikel, baseret p\u00e5 mit foredrag ved <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">online festival RIT++2020<\/a><\/noindex>, vil jeg svare p\u00e5 dette sp\u00f8rgsm\u00e5l. Videoen af foredraget er tilg\u00e6ngelig p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/6a5df9b75ad435ebe88adf920ab9ea8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Almindeligt kendte databaser i 2020<\/h2>\n<p>\nDet er 2020, jeg kiggede mig omkring og s\u00e5 tre typer databaser. <\/p>\n<p>Den f\u00f8rste type - <b>klassiske OLTP databaser<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. De blev skrevet for lang tid siden, men er stadig relevante, fordi de er velkendte blandt udviklerf\u00e6llesskabet.<\/p>\n<p>Den anden type - <b>databaser fra nullerne<\/b>. De fors\u00f8gte at skille sig ud fra klassiske skabeloner ved at undvige SQL, traditionelle strukturer og ACID ved at implementere indbygget sharding og andre attraktive funktioner. For eksempel er dette Cassandra, MongoDB, Redis eller Tarantool. Alle disse l\u00f8sninger \u00f8nskede at tilbyde markedet noget radikalt nyt og fandt deres niche, fordi de i bestemte opgaver viste sig at v\u00e6re ekstremt praktiske. Disse databaser vil jeg omtale med det overordnede begreb NOSQL.<\/p>\n<p>Nullerne er slut, vi er blevet vant til NOSQL databaser, og verden er, efter min mening, g\u00e5et til n\u00e6ste trin - til <b>managed databaser<\/b>. Disse databaser har samme kerne som klassiske OLTP databaser eller nye NoSQL. Men de kr\u00e6ver ikke DBA og DevOps, og de k\u00f8rer p\u00e5 administreret hardware i skyen. For udvikleren er det \"bare en database\", der fungerer et sted, og hvordan den er installeret p\u00e5 serveren, hvem der har konfigureret serveren, og hvem der opdaterer den, bekymrer ingen sig om.<\/p>\n<p>Eksempler p\u00e5 s\u00e5danne databaser:<\/p>\n<ul>\n<li>AWS RDS - managed wrapper over PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB - AWS's svar p\u00e5 en dokumentbaseret database, der minder om Redis og MongoDB.<\/li>\n<li>Amazon Redshift - managed analytisk database.<\/li>\n<\/ul>\n<p>\nI bund og grund er det gamle databaser, men l\u00f8ftet op i et managed milj\u00f8, uden behov for hardware arbejde. <\/p>\n<p><i>Bem\u00e6rk. Eksemplerne er taget fra AWS-milj\u00f8et, men deres analoger findes ogs\u00e5 i Microsoft Azure, Google Cloud eller Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHvad er s\u00e5 nyt i alt dette? I 2020 er der ikke noget af dette.<\/p>\n<h2>Serverless koncept<\/h2>\n<p>\nVirkelig nye p\u00e5 markedet i 2020 er serverless eller serverl\u00f8se l\u00f8sninger.<\/p>\n<p>Jeg vil fors\u00f8ge at forklare, hvad det betyder, ved at bruge et almindeligt service- eller backend-applikationseksample.<br \/>\nFor at implementere en almindelig backend-applikation k\u00f8ber eller lejer vi en server, kopierer koden til den, offentligg\u00f8r et endpoint, og betaler regelm\u00e6ssigt for leje, elektricitet og datacenteroplysninger. Dette er den standardprocedure.<\/p>\n<p>Er der en anden m\u00e5de? Med serverless-tjenester er det muligt.<\/p>\n<p>Hvad er essensen af denne tilgang: ingen server, ikke engang leje af en virtuel instans i skyen. For at implementere en service kopierer vi koden (funktioner) til et repository og offentligg\u00f8r et endpoint. Derefter betaler vi blot for hver function-anrop, helt uafh\u00e6ngigt af det hardware, hvor den k\u00f8rer.<\/p>\n<p>Jeg vil fors\u00f8ge at illustrere denne tilgang med billeder.<br \/>\n<img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Klassisk deployment<\/b>. Vi har en service med en bestemt belastning. Vi s\u00e6tter to instanser op: fysiske servere eller instanser i AWS. Eksterne anmodninger rettes mod disse instanser, som derefter behandler dem. <\/p>\n<p>Som vist p\u00e5 billedet, er serverne ikke udnyttet ens. En er udnyttet p\u00e5 100%, der er to anmodninger, mens den anden kun er p\u00e5 50% \u2014 den st\u00e5r delvist stille. Hvis der kommer ikke tre anmodninger, men 30, vil hele systemet ikke kunne h\u00e5ndtere belastningen og begynde at h\u00e6nge.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Serverless deployment<\/b>. I et serverless-milj\u00f8 har en s\u00e5dan service ingen instanser og servere. Der er en pulje af opvarmede ressourcer \u2014 sm\u00e5 forberedte Docker-containere med implementeret kode for funktionen. Systemet modtager eksterne anmodninger, og for hver enkelt h\u00e6ver serverless-rammen et lille container med koden: det behandler netop denne anmodning og dr\u00e6ber containeren.<\/p>\n<p>\u00c9n anmodning \u2014 \u00e9n h\u00e6vet container, 1000 anmodninger \u2014 1000 containere. Og implementeringen p\u00e5 fysiske servere er allerede arbejdet fra cloud-udbyderen. Det er helt skjult af serverless-rammen. I dette koncept betaler vi for hver anmodning. For eksempel, hvis der kommer \u00e9n anmodning om dagen \u2014 har vi betalt for \u00e9n anmodning, kommer der en million p\u00e5 et minut \u2014 har vi betalt for en million. Eller pr. sekund, det sker ogs\u00e5.<\/p>\n<p>Koncepten for publicering af serverless funktioner er egnet til stateless tjenester. Hvis du derimod har brug for en stateful tjeneste, tilf\u00f8jer vi en database til tjenesten. I dette tilf\u00e6lde, n\u00e5r det kommer til arbejde med state, skriver og l\u00e6ser hver stateful funktion simpelthen fra databasen. Og det kan v\u00e6re fra en hvilken som helst af de tre typer databaser, der blev beskrevet i starten af artiklen.<\/p>\n<p>Hvad er den samlede begr\u00e6nsning for alle disse databaser? Det er omkostningerne ved en konstant anvendt cloud- eller hardware-server (eller flere servere). Uanset om vi bruger en klassisk database eller en managed database, er vi stadig n\u00f8dt til at betale for hardware, elektricitet og leje af datacenter 24\/7, uanset om vi har DevOps og administrator eller ej. Hvis vi har en klassisk database, betaler vi for master og slave. For en h\u00f8jtydende sharded database betaler vi for 10, 20 eller 30 servere, og det er en konstant udgift.<\/p>\n<p>Tilstedev\u00e6relsen af permanent reserverede servere i udgiftsstrukturen blev tidligere betragtet som en uundg\u00e5elig plage. Almindelige databaser har ogs\u00e5 andre vanskeligheder, s\u00e5som gr\u00e6nser for antallet af forbindelser, begr\u00e6nsninger for skalerbarhed og geodistribueret konsensus \u2014 nogle af disse kan l\u00f8ses i bestemte databaser, men ikke alle p\u00e5 \u00e9n gang og ikke perfekt.<\/p>\n<h2>Serverless database \u2014 teori<\/h2>\n<p>\nSp\u00f8rgsm\u00e5let i 2020: Kan man ogs\u00e5 lave en database serverless? Alle har h\u00f8rt om serverless backend\u2026 lad os ogs\u00e5 fors\u00f8ge at g\u00f8re databasen serverless.<\/p>\n<p>Det lyder m\u00e6rkeligt, fordi databasen jo er en stateful tjeneste, som ikke helt egner sig til serverless infrastruktur. Desuden er state for databasen meget stor: gigabyte, terabyte, og i analytiske databaser endda petabyte. Det kan ikke bare nemt implementeres i letv\u00e6gts Docker-containere.<\/p>\n<p>P\u00e5 den anden side er praktisk taget alle moderne databaser fyldt med en enorm m\u00e6ngde logik og komponenter: transaktioner, validering af integritet, procedurer, relationelle afh\u00e6ngigheder og meget logik. En ganske stor del af logikken i databasen kr\u00e6ver blot en lille smule state. Gigabyte og terabyte anvendes kun af en lille del af logikken i databasen, der er knyttet til konkret udf\u00f8relse af foresp\u00f8rgsler.<\/p>\n<p>Som f\u00f8lge heraf er id\u00e9en: hvis en del af logikken tillader stateless udf\u00f8relse, hvorfor s\u00e5 ikke opdele databasen i stateful og stateless dele.<\/p>\n<h2>Serverless til OLAP-l\u00f8sninger<\/h2>\n<p>\nLad os se p\u00e5, hvordan opdelingen af databasen i stateful og stateless dele kan se ud med praktiske eksempler.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>For example, we have an analytical database<\/b>: external data (red cylinder on the left), an ETL process that loads data into the database, and an analyst who sends SQL queries to the database. This is a classic schema of how a data warehouse operates. <\/p>\n<p>In this scheme, ETL is executed conditionally once. After that, you need to constantly pay for the servers on which the database with the ETL-loaded data operates to have something to query. <\/p>\n<p>Let's consider an alternative approach implemented in AWS Athena Serverless. Here, there is no permanently allocated hardware that stores the loaded data. Instead:<\/p>\n<ul>\n<li>The user sends an SQL query to Athena. The Athena optimizer analyzes the SQL query and looks for specific data in the metadata storage needed to fulfill the request.<\/li>\n<li>Based on the collected data, the optimizer loads the necessary data from external sources into temporary storage (a temporary database).<\/li>\n<li>In the temporary storage, the SQL query from the user is executed, and the result is returned to the user. <\/li>\n<li>The temporary storage is cleared, and resources are freed up.<\/li>\n<\/ul>\n<p>In this architecture, we only pay for the query execution process. No queries = no costs.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThis is a working approach, and it is implemented not only in Athena Serverless but also in Redshift Spectrum (in AWS).<\/p>\n<p>The example of Athena shows that the Serverless database operates on real queries with tens and hundreds of terabytes of data. For hundreds of terabytes, we need hundreds of servers, but we don't have to pay for them \u2014 we pay for the queries. The speed of each query is (very) low compared to specialized analytical databases like Vertica, but we do not pay for downtime.<\/p>\n<p>Such a database is applicable for rare analytical ad-hoc queries. For example, when we spontaneously decide to test a hypothesis on a massive volume of data. For these cases, Athena is ideal. For regular queries, such a system becomes costly. In this case, cache the data in some specialized solution. <\/p>\n<h2>Serverless for OLTP solutions<\/h2>\n<p>\nThe previous example discussed OLAP tasks (analytical). Now, let's consider OLTP tasks.<\/p>\n<p>Lad os forestille os en skalerbar PostgreSQL eller MySQL. Lad os oprette en almindelig managed instance PostgreSQL eller MySQL med minimale ressourcer. N\u00e5r der kommer mere belastning p\u00e5 instansen, tilslutter vi ekstra replikaer, som vi fordeler en del af l\u00e6sebelastningen til. Hvis der ikke er nogen foresp\u00f8rgsler og belastning, slukker vi for replikaerne. Den f\u00f8rste instans er master, mens de \u00f8vrige er replikaer.<\/p>\n<p>Denne id\u00e9 er realiseret i en database kaldet Aurora Serverless AWS. Princippet er enkelt: foresp\u00f8rgsler fra eksterne applikationer modtages af en proxy-fl\u00e5de. N\u00e5r den ser en stigning i belastningen, tildeler den beregningsressourcer fra forvarmede minimale instanser - tilslutningen sker s\u00e5 hurtigt som muligt. Afbrydelse af instanserne sker ogs\u00e5 p\u00e5 samme m\u00e5de.<\/p>\n<p>Inden for Aurora findes begrebet Aurora Capacity Unit, ACU. Dette er (betegnet) en instans (server). Hver specifik ACU kan v\u00e6re master eller slave. Hver Capacity Unit har sit eget RAM, processor og minimal disk. Dermed er \u00e9n master, mens de \u00f8vrige er read-only replikaer.<\/p>\n<p>Antallet af aktive Aurora Capacity Units er en konfigurerbar parameter. Det minimale antal kan v\u00e6re en eller nul (i s\u00e5 fald virker databasen ikke, hvis der ikke er foresp\u00f8rgsler).<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5r databasen modtager foresp\u00f8rgsler, aktiverer proxy-fl\u00e5den Aurora Capacity Units, hvilket \u00f8ger systemets ydeevne. Muligheden for at \u00f8ge og mindske ressourcerne g\u00f8r det muligt for systemet at \"jonglere\" med ressourcerne: automatisk at tage individuelle ACU offline (ved at erstatte dem med nye) og anvende alle aktuelle opdateringer p\u00e5 de offline ressourcer.<\/p>\n<p>Aurora Serverless-databasen kan skalere l\u00e6sebelastningen. Men dette n\u00e6vnes ikke direkte i dokumentationen. Der kan opst\u00e5 en f\u00f8lelse af, at de kan konfigurere multi-master. Der er dog ikke nogen magi involveret. <\/p>\n<p>Denne database er velegnet til at spare penge p\u00e5 systemer med uforudsigelig adgang. For eksempel, n\u00e5r vi opretter MVP'er eller marketinglandingssider, forventer vi normalt ikke stabil belastning. Derfor betaler vi ikke for instanser, n\u00e5r der ikke er adgang. N\u00e5r der pludselig opst\u00e5r belastning, for eksempel efter en konference eller reklamekampagne, bes\u00f8ger mange mennesker siden, og belastningen stiger pludseligt. Aurora Serverless h\u00e5ndterer automatisk denne belastning og tilslutter hurtigt de n\u00f8dvendige ressourcer (ACU). Efter konferencen glemmer alle prototypen, serverne (ACU) slukker, og omkostningerne falder til nul \u2014 det er praktisk.<\/p>\n<p>Denne l\u00f8sning er ikke velegnet til stabil h\u00f8j belastning, fordi den ikke kan skalere skrivebelastningen. Alle disse tilslutninger og frakoblinger af ressourcer sker p\u00e5 et s\u00e5kaldt 'scale point' \u2014 det tidspunkt, hvor databasen ikke er under en transaktion, og der ikke holdes midlertidige tabeller. For eksempel kan der i l\u00f8bet af en uge ikke ske et scale point, og databasen fungerer med de samme ressourcer og kan simpelthen hverken udvides eller samles. <\/p>\n<p>Der er ikke noget magisk \u2014 det er almindelig PostgreSQL. Men processen med at tilf\u00f8je maskiner og frakoble dem er delvist automatiseret.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAurora Serverless er en gammel database, der er omskrevet til skyen for at udnytte de unikke fordele ved Serverless. Og nu vil jeg fort\u00e6lle om en database, der oprindeligt er skrevet til skyen, til en serverless tilgang \u2014 Serverless-by-design. Den blev straks udviklet uden antagelsen om, at den k\u00f8rte p\u00e5 fysiske servere.<\/p>\n<p>Denne database kaldes Snowflake. Den har tre n\u00f8glekomponenter.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen f\u00f8rste er metadatabaseblokken. Det er en hurtig in-memory tjeneste, der h\u00e5ndterer sikkerhed, metadata, transaktioner, og optimering af foresp\u00f8rgsler (p\u00e5 illustrationen til venstre).<\/p>\n<p>Den anden blok er et stort antal virtuelle compute-klynger til beregninger (i illustrationen \u2014 en samling bl\u00e5 cirkler).<\/p>\n<p>Den tredje blok er et datalagringssystem baseret p\u00e5 S3. S3 er en ubegribelig objektlagring i AWS, lidt som en ubegribelig Dropbox til virksomheder.<\/p>\n<p>Lad os se, hvordan Snowflake fungerer under antagelse af en kold start. Det vil sige, at databasen eksisterer, dataene er indl\u00e6st, og der er ingen aktive foresp\u00f8rgsler. Hvis der ikke er nogen foresp\u00f8rgsler mod databasen, s\u00e5 har vi den hurtige in-memory Metadata service (den f\u00f8rste blok) k\u00f8rende. Og vi har et S3-lager, hvor tabellerne er gemt, opdelt i s\u00e5kaldte mikropartitioner. For enkelhedens skyld: hvis tabellen indeholder handler, s\u00e5 er mikropartitionerne dage med handler. Hver dag er en separat mikropartition, en separat fil. N\u00e5r databasen k\u00f8rer i dette tilstand, betaler du kun for det plads, der optages af dataene. Desuden er taksten for pladsen meget lav (is\u00e6r i betragtning af den betydelige komprimering). Metadata tjenesten k\u00f8rer ogs\u00e5 konstant, men kr\u00e6ver ikke mange ressourcer for at optimere foresp\u00f8rgsler, og tjenesten kan betragtes som betinget gratis. <\/p>\n<p>Lad os nu forestille os, at en bruger kommer til vores database og sender en SQL-foresp\u00f8rgsel. SQL-foresp\u00f8rgslen sendes straks til behandling i Metadata tjenesten. Tjenesten analyserer foresp\u00f8rgslen, de tilg\u00e6ngelige data, brugerens rettigheder, og hvis alt er i orden, udarbejder den en behandlingsplan for foresp\u00f8rgslen.<\/p>\n<p>Derefter initierer tjenesten opstarten af \u200b\u200bberegningsklusteret. Beregningsklusteret er et cluster af servere, der udf\u00f8rer beregninger. Det er et cluster, der kan indeholde 1 server, 2 servere, 4, 8, 16, 32 \u2014 s\u00e5 mange du \u00f8nsker. Du sender en foresp\u00f8rgsel, og der startes straks dette cluster. Det tager virkelig kun sekunder.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00e5 vej mod serverl\u00f8se databaser \u2014 hvordan og hvorfor\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5r klyngen er startet, begynder mikropartitioner, som er n\u00f8dvendige for at behandle din anmodning, at blive kopieret fra S3 til klyngen. Det vil sige, lad os forestille os, at der til udf\u00f8relsen af en SQL-anmodning kr\u00e6ves to partitioner fra \u00e9n tabel og \u00e9n fra en anden. I s\u00e5 fald kopieres kun de tre n\u00f8dvendige partitioner til klyngen, ikke alle tabellerne i sin helhed. Netop fordi alt er placeret i samme datacenter og forbundet med meget hurtige forbindelser, foreg\u00e5r hele overf\u00f8rselsprocessen meget hurtigt: p\u00e5 sekunder, meget sj\u00e6ldent p\u00e5 minutter, medmindre det drejer sig om nogle ekstremt komplekse anmodninger. Derfor kopieres mikropartitioner til beregningsklyngen, og n\u00e5r dette er afsluttet, udf\u00f8res SQL-anmodningen p\u00e5 denne beregningsklynge. Resultatet af denne anmodning kan v\u00e6re en enkelt r\u00e6kke, flere r\u00e6kker eller en tabel - de sendes til brugeren, s\u00e5 de kan eksporteres, vises i deres BI-v\u00e6rkt\u00f8j eller bruges p\u00e5 anden vis.<\/p>\n<p>Hver SQL-anmodning kan ikke kun l\u00e6se aggregater fra tidligere indl\u00e6ste data, men ogs\u00e5 indl\u00e6se\/andre nye data i databasen. Det vil sige, det kan v\u00e6re en anmodning, der for eksempel foretage en inds\u00e6ttelse af nye poster i en anden tabel, hvilket f\u00f8rer til oprettelsen af en ny partition p\u00e5 beregningsklyngen, som automatisk gemmes i det samlede S3-lager.<\/p>\n<p>Det ovenfor beskrevne scenarie, fra brugerens ankomst til klyngens oprettelse, dataloading, udf\u00f8relse af foresp\u00f8rgsler og modtagelse af resultater, afregnes med en takst pr. minut for brugen af den oprettede virtuelle beregningsklynge, den virtuelle warehouse. Taksten varierer afh\u00e6ngigt af AWS-zonen og klyngeens st\u00f8rrelse, men i gennemsnit koster det nogle f\u00e5 dollars i timen. En klynge med fire maskiner koster det dobbelte af en med to maskiner, og en med otte maskiner koster yderligere det dobbelte. Der er muligheder for 16, 32 maskiner, alt efter kompleksiteten af foresp\u00f8rgslerne. Men du betaler kun for de minutter, hvor klyngen faktisk er aktiv, fordi n\u00e5r der ikke er nogen foresp\u00f8rgsler, kan du n\u00e6sten tr\u00e6kke h\u00e6nderne v\u00e6k, og efter 5-10 minutters ventetid (justerbar parameter) slukker den selv, frigiver ressourcer og bliver gratis.<\/p>\n<p>Det er helt realistisk, at du sender en foresp\u00f8rgsel, og klustret dukker op, s\u00e5 at sige, p\u00e5 et minut. Det tager et minut at beregne, yderligere fem minutter til at slukke, og du betaler i sidste ende for syv minutters brug af dette kluster i stedet for m\u00e5neder og \u00e5r.<\/p>\n<p>Det f\u00f8rste scenarie beskrev brugen af Snowflake i en enkeltbruger-ops\u00e6tning. Lad os nu forestille os, at der er mange brugere, hvilket er t\u00e6ttere p\u00e5 et realistisk scenarie.<\/p>\n<p>Lad os antage, at vi har mange analytikere og Tableau-rapporter, der konstant bombarderer vores database med et stort antal enkle analytiske SQL-foresp\u00f8rgsler.<\/p>\n<p>Derudover, lad os antage, at vi har opfindsomme dataforskere, der fors\u00f8ger at g\u00f8re frygtelige ting med dataene, arbejde med titusinder af terabyte, analysere milliarder og billioner af r\u00e6kker af data. <\/p>\n<p>For de to typer belastning, der er beskrevet ovenfor, tillader Snowflake at ops\u00e6tte flere uafh\u00e6ngige beregningsklustre med forskellig kapacitet. Disse beregningsklustre arbejder uafh\u00e6ngigt, men med f\u00e6lles konsistente data.<\/p>\n<p>For et stort antal lette foresp\u00f8rgsler kan du ops\u00e6tte 2-3 sm\u00e5 klustre, hver med en st\u00f8rrelse p\u00e5, lad os sige, 2 maskiner. Denne adf\u00e6rd kan implementeres, blandt andet, ved hj\u00e6lp af automatiske indstillinger. Det vil sige, at du siger: \"Snowflake, ops\u00e6t et lille kluster. Hvis belastningen p\u00e5 det overstiger et bestemt parameter, ops\u00e6t en tilsvarende anden eller tredje. N\u00e5r belastningen begynder at falde \u2014 sluk for de overskydende.\" S\u00e5 alle f\u00e5r nok ressourcer uanset hvor mange analytikere der kommer og begynder at se rapporterne.<\/p>\n<p>Hvis analytikerne derimod sover, og ingen ser p\u00e5 rapporterne, kan klustrene helt slukkes, og du stopper med at betale for dem.<\/p>\n<p>For tunge foresp\u00f8rgsler (fra dataforskere) kan du ops\u00e6tte et meget stort kluster med for eksempel 32 maskiner. Dette kluster vil ogs\u00e5 kun blive betalt for de minutter og timer, hvor dit enorme foresp\u00f8rgsel k\u00f8rer.<\/p>\n<p>Den ovenfor beskrevne mulighed g\u00f8r det muligt at opdele ikke kun 2, men ogs\u00e5 flere typer belastninger (ETL, overv\u00e5gning, materialisering af rapporter,\u2026).<\/p>\n<p>Lad os opsummere Snowflake. Databasen kombinerer en smuk id\u00e9 med en fungerende implementering. I ManyChat bruger vi Snowflake til analyse af alle tilg\u00e6ngelige data. Vi har ikke tre klynger som i eksemplet, men mellem 5 og 9, forskellige st\u00f8rrelser. Vi har nogle med 16 maskiner, 2-maskiner, og der er ogs\u00e5 super sm\u00e5 1-maskine klynger til visse opgaver. De fordeler belastningen effektivt og hj\u00e6lper os med at spare penge.<\/p>\n<p>Databasen skalerer effektivt b\u00e5de l\u00e6se- og skrivebelastningen. Dette er en betydelig forskel og et stort gennembrud sammenlignet med \"Aurora\", som kun kunne h\u00e5ndtere l\u00e6sebelastning. Snowflake muligg\u00f8r skalering af disse beregningsklynger til ogs\u00e5 at h\u00e5ndtere skrivebelastning. Som n\u00e6vnt bruger vi i ManyChat flere klynger; sm\u00e5 og super sm\u00e5 klynger bruges prim\u00e6rt til ETL, til dataindl\u00e6sning. Analytikere arbejder allerede p\u00e5 mellemstore klynger, som slet ikke p\u00e5virkes af ETL-belastningen, og derfor arbejder de meget hurtigt. <\/p>\n<p>Derfor er databasen velegnet til OLAP-opgaver. Desv\u00e6rre er den dog endnu ikke anvendelig til OLTP-belastninger. For det f\u00f8rste er databasen kolonnebaseret, med alle de konsekvenser, det indeb\u00e6rer. For det andet er den tilgang, hvor man efter behov aktiverer en beregningsklynge for hver foresp\u00f8rgsel og fylder den med data, desv\u00e6rre ikke hurtig nok til OLTP-belastninger. Sekunder af ventetid for OLAP-opgaver er normalt, men for OLTP-opgaver er det uacceptabelt; 100 ms ville v\u00e6re bedre, og 10 ms ville v\u00e6re endnu bedre.<\/p>\n<h2>Resultat<\/h2>\n<p>\nEn serverless database er mulig ved at opdele databasen i stateless og stateful dele. Du har m\u00e5ske bem\u00e6rket, at i alle de n\u00e6vnte eksempler er den stateful del, s\u00e5 at sige, opbevaringen af mikropartitioner i S3, mens den stateless del er optimereren, der arbejder med metadata, h\u00e5ndterer sikkerhedssp\u00f8rgsm\u00e5l, som kan aktiveres som uafh\u00e6ngige, letv\u00e6gts stateless services.<\/p>\n<p>Udf\u00f8relsen af SQL-foresp\u00f8rgsler kan ogs\u00e5 betragtes som tjenester med en let state, der kan aktivere i serverless tilstand, ligesom beregningsklynger i Snowflake, hente kun de n\u00f8dvendige data, udf\u00f8re foresp\u00f8rgslen og \"slukke\".<\/p>\n<p>Serverless databaser p\u00e5 produktionsniveau er nu tilg\u00e6ngelige og fungerer. Disse serverless databaser er allerede klar til at h\u00e5ndtere OLAP-opgaver. Desv\u00e6rre anvendes de til OLTP-opgaver... med nuancer, da der er begr\u00e6nsninger. P\u00e5 den ene side er det et minus. Men p\u00e5 den anden side er det en mulighed. M\u00e5ske finder nogle af l\u00e6serne en m\u00e5de at g\u00f8re en OLTP-database helt serverless uden begr\u00e6nsninger i Aurora.<\/p>\n<p>Jeg h\u00e5ber, det har v\u00e6ret interessant for dig. For serverless fremtiden \ud83d\ude42<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/514298\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0410\u0432\u0438\u0442\u043e \u0438 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u043b Data Platform, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438: \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (Vertica, ClickHouse), \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0438 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91635","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47P\u00e5 vej mod serverless databaser \u2014 hvordan og hvorfor | ProHoster","description":"Hej alle sammen! Mit navn er Nikolaj Golov.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-15T17:42:23+00:00","article:modified_time":"2020-08-15T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91635","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:23:25","updated":"2022-09-27 17:18:10","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}