Hallo zusammen! Mein Name ist Nikolaj Golow. FrĂŒher habe ich bei Avito gearbeitet und sechs Jahre die Datenplattform geleitet, das heiĂt, ich habe mich um alle Datenbanken gekĂŒmmert: analytische (Vertica, ClickHouse), Streaming und OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). In dieser Zeit habe ich mich mit einer Vielzahl von Datenbanken auseinander gesetzt â die verschiedensten und unkonventionellsten, sowie mit speziellen AnwendungsfĂ€llen.
Derzeit arbeite ich bei ManyChat. Im Grunde handelt es sich um ein Startup â neu, ehrgeizig und schnell wachsend. Und als ich gerade in das Unternehmen gekommen bin, stellte sich die klassische Frage: âWas sollte man jetzt fĂŒr ein junges Startup im Bereich DBMS und Datenbanken vom Markt nehmen?â
In diesem Artikel, der auf meinem Vortrag basiert, , werde ich diese Frage beantworten. Die Videoaufzeichnung des Vortrags ist verfĂŒgbar unter .

Allseits bekannte Datenbanken des Jahres 2020
Es ist das Jahr 2020, ich habe mich umgeschaut und drei Typen von Datenbanken gesehen.
Der erste Typ â klassische OLTP-Datenbanken: PostgreSQL, SQL Server, Oracle, MySQL. Sie wurden vor langer Zeit geschrieben, sind aber immer noch relevant, weil sie der Entwicklergemeinschaft gut bekannt sind.
Der zweite Typ â Datenbanken aus den âNullernâ. Sie versuchten, sich von klassischen Mustern zu lösen, indem sie auf SQL, traditionelle Strukturen und ACID verzichteten, durch die EinfĂŒhrung von eingebautem Sharding und anderen attraktiven Funktionen. Beispiele hierfĂŒr sind Cassandra, MongoDB, Redis oder Tarantool. All diese Lösungen wollten dem Markt etwas grundlegend Neues bieten und fanden ihren Platz, weil sie sich in bestimmten Aufgaben als Ă€uĂerst praktisch erwiesen. Diese Datenbanken bezeichne ich als Sammelbegriff NOSQL.
Die âNullerâ sind vorbei, die NOSQL-Datenbanken sind akzeptiert worden, und die Welt hat aus meiner Sicht den nĂ€chsten Schritt gemacht â zu verwalteten Datenbanken.Ihre Kerntechnologie ist die gleiche wie die von klassischen OLTP-Datenbanken oder neuen NoSQL-Datenbanken. Aber sie benötigen keine DBA und DevOps und laufen auf verwalteter Hardware in der Cloud. FĂŒr den Entwickler ist das âeinfach eine Datenbankâ, die irgendwo funktioniert, und wie sie auf dem Server installiert ist, wer den Server konfiguriert hat und wer ihn aktualisiert, interessiert niemanden.
Beispiele fĂŒr solche Datenbanken:
- AWS RDS â eine verwaltete Schicht ĂŒber PostgreSQL/MySQL.
- DynamoDB â der AWS-Ableger einer dokumentenbasierten Datenbank, Ă€hnlich wie Redis und MongoDB.
- Amazon Redshift â eine verwaltete analytische Datenbank.
Im Grunde sind das alte Datenbanken, aber in einer verwalteten Umgebung, ohne dass mit Hardware gearbeitet werden muss.
Hinweis. Die Beispiele beziehen sich auf die AWS-Umgebung, aber auch ihre Alternativen gibt es in Microsoft Azure, Google Cloud oder Yandex.Cloud.

Was ist also neu daran? Im Jahr 2020 nichts davon.
Das Konzept von Serverless
TatsÀchlich neu auf dem Markt im Jahr 2020 sind Serverless- oder cloudlose Lösungen.
Ich werde versuchen zu erklÀren, was das bedeutet, am Beispiel eines normalen Services oder Backend-Anwendung.
Um eine normale Backend-Anwendung bereitzustellen, kaufen oder mieten wir einen Server, kopieren den Code darauf, veröffentlichen einen externen Endpunkt und zahlen regelmĂ€Ăig fĂŒr Miete, Strom und die Dienste des Rechenzentrums. Das ist das Standardverfahren.
Gibt es eine andere Möglichkeit? Mit Serverless-Services ja.
Worin liegt der Fokus dieses Ansatzes: Kein Server, nicht einmal die Miete eines virtuellen Instances in der Cloud. Um den Service bereitzustellen, kopieren wir den Code (Funktionen) in ein Repository und veröffentlichen den externen Endpunkt. Danach zahlen wir einfach fĂŒr jeden Aufruf dieser Funktion und ignorieren dabei die Hardware, auf der sie ausgefĂŒhrt wird.
Ich werde versuchen, diesen Ansatz mit Bildern zu veranschaulichen.

Klassisches Deployment. Wir haben einen Service mit einer bestimmten Last. Wir betreiben zwei Instanzen: physische Server oder Instanzen in AWS. An diese Instanzen werden externe Anfragen weitergeleitet, die dort verarbeitet werden.
Wie auf dem Bild zu sehen ist, sind die Server unterschiedlich ausgelastet. Einer ist zu 100 % ausgelastet, dort gibt es zwei Anfragen, der andere nur zu 50 % â er steht teilweise still. Wenn nicht drei Anfragen, sondern 30 kommen, kann das gesamte System mit der Last nicht umgehen und beginnt zu stocken.

Serverless Deployment. In einer serverlosen Umgebung hat ein solcher Service keine Instanzen und Server. Es gibt einen Pool von vorgeheizten Ressourcen â kleinen vorbereiteten Docker-Containern mit dem bereitgestellten Funktionscode. Das System erhĂ€lt externe Anfragen und fĂŒr jede von ihnen startet das serverlose Framework einen kleinen Container mit dem Code: es verarbeitet genau diese Anfrage und zerstört den Container.
Eine Anfrage â ein gestarteter Container, 1000 Anfragen â 1000 Container. Und das Deployment auf physischer Hardware ist bereits die Aufgabe des Cloud-Anbieters. Es wird vollstĂ€ndig vom serverlosen Framework verborgen. In diesem Konzept zahlen wir fĂŒr jeden Aufruf. Zum Beispiel, wenn eine Anfrage pro Tag kommt â wir haben fĂŒr einen Aufruf bezahlt, wenn eine Million pro Minute kommt â wir haben fĂŒr eine Million bezahlt. Oder pro Sekunde, das kommt auch vor.
Das Konzept der Veröffentlichung einer serverlosen Funktion eignet sich fĂŒr einen zustandslosen Dienst. Wenn Sie jedoch einen zustandsbehafteten Dienst benötigen, fĂŒgen wir der Dienstleistung eine Datenbank hinzu. In diesem Fall, wenn es um den Umgang mit dem Zustand geht, schreibt und liest jede zustandsbehaftete Funktion einfach aus der Datenbank. Dabei kann es sich um eine Datenbank eines der drei Typen handeln, die zu Beginn des Artikels beschrieben wurden.
Was ist die allgemeine EinschrĂ€nkung all dieser Datenbanken? Es sind die Kosten fĂŒr einen stĂ€ndig genutzten Cloud- oder physikalischen Server (oder mehrere Server). Es spielt keine Rolle, ob wir eine klassische Datenbank oder eine verwaltete verwenden, ob ein DevOps- und ein Administrator vorhanden sind oder nicht, wir zahlen dennoch 24/7 fĂŒr die Hardware, den Strom und die Miete des Rechenzentrums. Wenn wir eine klassische Datenbank haben, zahlen wir fĂŒr Master und Slave. Bei einer hochbelasteten, sharded Datenbank zahlen wir fĂŒr 10, 20 oder 30 Server und das kontinuierlich.
Die Tatsache, dass in der Kostenstruktur stĂ€ndig reservierte Server vorhanden sind, wurde frĂŒher als unvermeidliches Ăbel angesehen. Gewöhnliche Datenbanken haben auch andere Herausforderungen, wie zum Beispiel Limits fĂŒr die Anzahl der Verbindungen, SkalierungsbeschrĂ€nkungen, georedundante Konsensbildung â diese können in bestimmten Datenbanken irgendwie gelöst werden, aber nicht alle auf einmal und nicht perfekt.
Serverlose Datenbank â Theorie
Die Frage des Jahres 2020: Kann man auch eine Datenbank serverlos gestalten? Jeder hat von einem serverlosen Backend gehört... wie wÀre es, auch eine Datenbank serverlos zu machen?
Es klingt seltsam, denn eine Datenbank ist schlieĂlich ein zustandsbehafteter Dienst, der nicht wirklich fĂŒr serverlose Infrastrukturen geeignet ist. Dabei ist der Zustand einer Datenbank sehr groĂ: Gigabytes, Terabytes und in analytischen Datenbanken sogar Petabytes. So einfach lĂ€sst sich das nicht in leichten Docker-Containern umsetzen.
Andererseits basieren nahezu alle modernen Datenbanken auf einer groĂen Menge an Logik und Komponenten: Transaktionen, Konsistenz, Verfahren, relationale AbhĂ€ngigkeiten und viel Logik. Ein betrĂ€chtlicher Teil der Logik einer Datenbank benötigt oft nur einen kleinen Zustand. Gigabytes und Terabytes werden nur von einem kleinen Teil der Logik der Datenbank beansprucht, die mit der direkten AusfĂŒhrung von Anfragen zu tun hat.
Dementsprechend die Idee: Wenn ein Teil der Logik ein zustandsloses AusfĂŒhren zulĂ€sst, warum nicht die Datenbank in zustandsbehaftete und zustandslose Teile aufteilen.
Serverlos fĂŒr OLAP-Lösungen
Schauen wir uns praktische Beispiele an, wie eine Aufteilung einer Datenbank in zustandsbehaftete und zustandslose Teile aussehen könnte.

Zum Beispiel haben wir eine analytische Datenbank.: externe Daten (roter Zylinder links), ETL-Prozess, der Daten in die Datenbank lĂ€dt, und ein Analyst, der SQL-Abfragen an die Datenbank sendet. Dies ist das klassische Schema fĂŒr die Arbeit mit einem Data Warehouse.
In diesem Schema wird ETL bedingt einmal ausgefĂŒhrt. Danach mĂŒssen wir stĂ€ndig fĂŒr die Server zahlen, auf denen die Datenbank mit den durch ETL geladenen Daten lĂ€uft, damit wir Anfragen stellen können.
Betrachten wir einen alternativen Ansatz, der in der AWS Athena Serverless-Datenbank umgesetzt ist. Hier gibt es keine stÀndig zugewiesene Hardware, auf der die geladenen Daten gespeichert werden. Stattdessen:
- Der Benutzer sendet eine SQL-Abfrage an Athena. Der Optimierer von Athena analysiert die SQL-Abfrage und sucht im Metadaten-Speicher nach den spezifischen Daten, die fĂŒr die AusfĂŒhrung der Abfrage benötigt werden.
- Der Optimierer lÀdt basierend auf den gesammelten Daten die benötigten Daten aus externen Quellen in einen temporÀren Speicher (temporÀre Datenbank) herunter.
- Im temporĂ€ren Speicher wird die SQL-Abfrage des Benutzers ausgefĂŒhrt, das Ergebnis wird an den Benutzer zurĂŒckgegeben.
- Der temporÀre Speicher wird geleert, Ressourcen werden freigegeben.
In dieser Architektur zahlen wir nur fĂŒr den Prozess der AbfrageausfĂŒhrung. Keine Abfragen â keine Kosten.

Dies ist ein funktionierender Ansatz und wird nicht nur in Athena Serverless, sondern auch in Redshift Spectrum (in AWS) umgesetzt.
Am Beispiel von Athena ist zu sehen, dass die Serverless-Datenbank mit echten Abfragen von Dutzenden und Hunderten von Terabyte Daten arbeitet. FĂŒr Hunderte Terabyte werden Hunderte von Servern benötigt, aber wir mĂŒssen nicht dafĂŒr bezahlen â wir zahlen fĂŒr die Abfragen. Die Geschwindigkeit jeder Abfrage ist (sehr) langsam im Vergleich zu spezialisierten analytischen Datenbanken wie Vertica, aber wir bezahlen auch nicht fĂŒr Stillstandszeiten.
Solch eine Datenbank ist fĂŒr seltene analytische Ad-hoc-Abfragen anwendbar. Zum Beispiel, wenn wir spontan entscheiden, eine Hypothese an einem riesigen Datenvolumen zu ĂŒberprĂŒfen. FĂŒr diese FĂ€lle eignet sich Athena perfekt. FĂŒr regelmĂ€Ăige Abfragen wird ein solches System teuer. In diesem Fall sollten Sie die Daten in einer speziellen Lösung cachen.
Serverless fĂŒr OLTP-Lösungen.
Im vorherigen Beispiel wurden OLAP-Aufgaben (analytische) betrachtet. Jetzt betrachten wir OLTP-Aufgaben.
Stellen wir uns ein skalierbares PostgreSQL oder MySQL vor. Lassen Sie uns eine gewöhnliche verwaltete Instanz von PostgreSQL oder MySQL mit minimalen Ressourcen einrichten. Wenn die Instanz mehr Last erhÀlt, werden wir zusÀtzliche Replikate verbinden, auf die wir einen Teil der Lese-Last verteilen. Gibt es keine Anfragen und keine Last, schalten wir die Replikate ab. Die erste Instanz ist der Master, die anderen sind Replikate.
Diese Idee ist in einer Datenbank namens Aurora Serverless AWS umgesetzt. Das Prinzip ist einfach: Die Anfragen von externen Anwendungen nimmt ein Proxy-Fleet entgegen. Bei steigender Last stellt es Rechenressourcen aus vorgewĂ€rmten minimalen Instanzen bereit â die Verbindung erfolgt so schnell wie möglich. Das Ausschalten der Instanzen geschieht ebenso.
Innerhalb von Aurora gibt es das Konzept der Aurora Capacity Unit, ACU. Dies ist (nennen wir es so) eine Instanz (Server). Jede spezifische ACU kann Master oder Slave sein. Jede Capacity Unit verfĂŒgt ĂŒber ihren eigenen Arbeitsspeicher, Prozessor und minimalen Speicherplatz. Folglich gibt es ein Master-Exemplar, die anderen sind nur read-only Replikate.
Die Anzahl dieser aktiven Aurora Capacity Units ist ein einstellbarer Parameter. Die Mindestanzahl kann eins oder null sein (in diesem Fall funktioniert die Datenbank nicht, wenn keine Anfragen vorliegen).

Wenn die Datenbank Anfragen erhĂ€lt, hebt das Proxy-Fleet Aurora Capacity Units an, um die Leistung der Ressourcen des Systems zu erhöhen. Die Möglichkeit, Ressourcen zu vergröĂern und zu verringern, erlaubt es dem System, mit Ressourcen zu âjonglierenâ: automatisch einzelne ACUs anzuschalten (indem sie durch neue ersetzt werden) und auf die abgeschalteten Ressourcen alle aktuellen Updates anzuwenden.
Die Aurora Serverless-Datenbank kann die Lese-Last skalieren. Aber in der Dokumentation wird dies nicht direkt gesagt. Es könnte der Eindruck entstehen, dass sie ein Multi-Master-Setup herstellen können. Doch es gibt kein Magie.
Diese Datenbank eignet sich gut, um nicht viel Geld fĂŒr Systeme mit unvorhersehbarem Zugriff auszugeben. Beispielsweise erwarten wir bei der Erstellung eines MVP oder von Marketing-Visitenkarten-Webseiten normalerweise keine stabile Last. Entsprechend bezahlen wir bei fehlendem Zugriff nicht fĂŒr Instanzen. Wenn unerwartet eine Last entsteht, wie nach einer Konferenz oder Werbekampagne, strömen die Menschen auf die Seite und die Last steigt sprunghaft an, Aurora Serverless nimmt diese Last automatisch an und bindet schnell fehlende Ressourcen (ACU) hinzu. Nach der Konferenz ist das interessiertes Publikum vergessen, die Server (ACU) werden abgeschaltet und die Ausgaben sinken auf Null â praktisch.
Diese Lösung eignet sich nicht fĂŒr stabile Hochlast, da sie nicht in der Lage ist, die schreibenden Lasten zu skalieren. All diese Verbindungen und Abschaltungen von Ressourcen geschehen im sogenannten âSkalierungspunktâ â einem Zeitpunkt, an dem die Datenbank nicht durch eine Transaktion gehalten wird und temporĂ€re Tabellen nicht genutzt werden. Beispielsweise kann es innerhalb einer Woche keinen Skalierungspunkt geben, und die Datenbank arbeitet einfach mit den gleichen Ressourcen und kann sich nicht erweitern oder verkleinern.
Es gibt keinen Zauber â es ist einfach nur PostgreSQL. Aber der Prozess der HinzufĂŒgung von Maschinen und der teilweisen Automatisierung der Abschaltung ist automatisiert.
Serverless by design
Aurora Serverless ist eine alte Datenbank, die fĂŒr die Cloud umgeschrieben wurde, um die spezifischen Vorteile von Serverless zu nutzen. Jetzt erzĂ€hle ich von einer Datenbank, die von Grund auf fĂŒr die Cloud und den serverless Ansatz entwickelt wurde â Serverless-by-design. Sie wurde sofort ohne die Annahme entwickelt, dass sie auf physischen Servern arbeitet.
Diese Datenbank heiĂt Snowflake. Sie besteht aus drei SchlĂŒsselkomponenten.

Die erste ist der Metadatenblock. Dies ist ein schneller In-Memory-Service, der Fragen zu Sicherheit, Metadaten, Transaktionen und Anfrageoptimierung löst (in der Abbildung links).
Der zweite Block ist eine Vielzahl von virtuellen Rechenclustern fĂŒr Berechnungen (in der Abbildung â eine Ansammlung blauer Kreise).
Der dritte Block ist ein Speichersystem auf Basis von S3. S3 ist ein unbegrenzter Objektspeicher in AWS, Ă€hnlich einem unbegrenzten Dropbox fĂŒr Unternehmen.
Lassen Sie uns anschauen, wie Snowflake funktioniert, unter der Annahme eines Kaltstarts. Das heiĂt, die Datenbank existiert, die Daten wurden hochgeladen, es gibt keine aktiven Abfragen. Folglich, wenn es keine Abfragen an die Datenbank gibt, haben wir einen schnellen in-memory Metadata Service (der erste Block) aktiviert. Und wir haben ein S3-Speicher, in dem die Tabellendaten in sogenannten Mikropartitionen gespeichert sind. Zur Vereinfachung: Wenn in der Tabelle Transaktionen gespeichert sind, dann sind Mikropartitionen die Tage der Transaktionen. Jeder Tag ist eine separate Mikropartition, eine separate Datei. Und wenn die Datenbank in diesem Modus lĂ€uft, zahlen Sie nur fĂŒr den Platz, den die Daten einnehmen. Dabei ist der Tarif fĂŒr den Platz sehr niedrig (insbesondere unter BerĂŒcksichtigung der erheblichen Kompression). Der Metadata Service lĂ€uft ebenfalls kontinuierlich, aber fĂŒr die Optimierung von Abfragen werden nicht viele Ressourcen benötigt, und der Service kann als bedingt kostenlos betrachtet werden.
Stellen wir uns nun vor, dass ein Benutzer zu unserer Datenbank kommt und eine SQL-Abfrage eingibt. Die SQL-Abfrage wird sofort zur Verarbeitung an den Metadata Service gesendet. Folglich analysiert dieser Service die Abfrage, die verfĂŒgbaren Daten, die Berechtigungen des Benutzers, und wenn alles in Ordnung ist, erstellt er einen Verarbeitungsplan fĂŒr die Abfrage.
Dann initiiert der Service den Start des Rechenclusters. Ein Rechencluster ist ein Cluster von Servern, die Berechnungen durchfĂŒhren. Das heiĂt, es ist ein Cluster, das aus 1, 2, 4, 8, 16, 32 Servern bestehen kann â so viele, wie Sie möchten. Sie senden die Abfrage und sofort beginnt der Start dieses Clusters. Das dauert tatsĂ€chlich nur Sekunden.

Nachdem der Cluster gestartet wurde, beginnen die Mikropartitionen, die fĂŒr die Bearbeitung Ihrer Anfrage benötigt werden, aus S3 in den Cluster kopiert zu werden. Das bedeutet, stellen wir uns vor, dass fĂŒr die AusfĂŒhrung einer SQL-Anfrage zwei Partitionen aus einer Tabelle und eine aus einer anderen benötigt werden. In diesem Fall werden nur die drei benötigten Partitionen in den Cluster kopiert, nicht alle Tabellen vollstĂ€ndig. Genau aus diesem Grund und weil alles innerhalb eines einzigen Rechenzentrums ist und mit sehr schnellen KanĂ€len verbunden ist, erfolgt der gesamte Prozess der DatenĂŒbertragung sehr schnell: innerhalb von Sekunden, sehr selten innerhalb von Minuten, es sei denn, es handelt sich um monströse Anfragen. Entsprechend werden die Mikropartitionen in den Rechencluster kopiert, und nach Abschluss wird die SQL-Anfrage auf diesem Rechencluster ausgefĂŒhrt. Das Ergebnis dieser Anfrage kann eine Zeile, mehrere Zeilen oder eine Tabelle sein â sie werden an den Benutzer gesendet, damit er sie exportieren, in seinem BI-Tool anzeigen oder anderweitig nutzen kann.
Jede SQL-Anfrage kann nicht nur Aggregate aus zuvor geladenen Daten berechnen, sondern auch neue Daten in die Datenbank laden/erstellen. Das heiĂt, es kann sich um eine Anfrage handeln, die beispielsweise neue EintrĂ€ge in eine andere Tabelle einfĂŒgt, was zur Schaffung einer neuen Partition im Rechencluster fĂŒhrt, die wiederum automatisch im gemeinsamen S3-Speicher gespeichert wird.
Das oben beschriebene Szenario, vom Eintreffen des Benutzers bis zum Hochfahren des Clusters, Laden der Daten, AusfĂŒhren von Anfragen und Erhalten von Ergebnissen, wird nach einem Tarif pro Minute der Nutzung des hochgefahrenen virtuellen Rechenclusters, des virtuellen Warehouses, abgerechnet. Der Tarif variiert je nach AWS-Zone und ClustergröĂe, betrĂ€gt aber im Durchschnitt einige Dollar pro Stunde. Ein Cluster mit vier Maschinen kostet doppelt so viel wie eines mit zwei Maschinen, eines mit acht Maschinen kostet noch einmal doppelt so viel. Optionen mit 16, 32 Maschinen sind je nach KomplexitĂ€t der Anfragen verfĂŒgbar. Aber Sie zahlen nur fĂŒr die Minuten, in denen der Cluster tatsĂ€chlich arbeitet, denn wenn keine Anfragen vorliegen, legen Sie quasi die HĂ€nde weg, und nach 5-10 Minuten Wartezeit (ein einstellbarer Parameter) wird er selbst abgeschaltet, gibt Ressourcen frei und wird kostenlos.
Es ist ein völlig realistisches Szenario, in dem Sie eine Anfrage senden, der Cluster nach etwa einer Minute auftaucht, eine weitere Minute benötigt, um zu rechnen, dann fĂŒnf Minuten zum Ausschalten und Sie am Ende fĂŒr sieben Minuten Arbeitszeit dieses Clusters bezahlen, und nicht fĂŒr Monate oder Jahre.
Das erste Szenario beschrieb die Nutzung von Snowflake im Einzelbenutzer-Modus. Lassen Sie uns nun annehmen, dass es viele Benutzer gibt, was nÀher am realen Szenario ist.
Angenommen, wir haben viele Analysten und Tableau-Berichte, die unsere Datenbank stĂ€ndig mit einer groĂen Anzahl einfacher analytischer SQL-Abfragen bombardieren.
DarĂŒber hinaus nehmen wir an, dass wir einfallsreiche Data Scientists haben, die versuchen, mit den Daten monströse Dinge zu tun, mit Dutzenden von Terabyte zu operieren und Milliarden und Billionen von Datenzeilen zu analysieren.
FĂŒr die oben beschriebenen beiden Arten von Lasten ermöglicht es Snowflake, mehrere unabhĂ€ngige Rechencluster mit unterschiedlicher Leistung zu provisionieren. Diese Rechencluster arbeiten unabhĂ€ngig, jedoch mit gemeinsamen konsistenten Daten.
FĂŒr eine groĂe Anzahl einfacher Abfragen können 2-3 kleine Cluster hochgefahren werden, je zwei Maschinen groĂ. Dieses Verhalten kann auch durch automatische Einstellungen realisiert werden. Das heiĂt, Sie sagen: âSnowflake, starte ein kleines Cluster. Wenn die Last darĂŒber einen bestimmten Parameter ĂŒberschreitet, starte ein Ă€hnliches zweites, drittes. Wenn die Last zu sinken beginnt â schalte ĂŒberflĂŒssige aus.â Damit alle Ressourcen haben, unabhĂ€ngig davon, wie viele Analysten kommen und Berichte ansehen.
Wenn jedoch die Analysten schlafen und sich niemand die Berichte ansieht, können die Cluster vollstĂ€ndig heruntergefahren werden, und Sie hören auf, dafĂŒr zu zahlen.
FĂŒr schwere Abfragen (von Data Scientists) können Sie jedoch ein sehr groĂes Cluster mit theoretisch 32 Maschinen hochfahren. Dieses Cluster wird ebenfalls nur fĂŒr die Minuten und Stunden bezahlt, in denen Ihre riesige Abfrage dort arbeitet.
Die oben beschriebene Möglichkeit ermöglicht es, die Lasten nicht nur auf 2, sondern auch auf mehrere Cluster zu verteilen (ETL, Monitoring, Materialisierung von Berichten,...).
Fassen wir zusammen: Snowflake vereint eine ansprechende Idee mit einer funktionierenden Umsetzung. Bei ManyChat nutzen wir Snowflake zur Analyse aller vorhandenen Daten. Wir haben nicht drei Cluster wie im Beispiel, sondern zwischen 5 und 9 in unterschiedlichen GröĂen. Es gibt diese sogenannten 16-Maschinen-Cluster, 2-Maschinen-Cluster und auch sehr kleine 1-Maschinen-Cluster fĂŒr spezielle Aufgaben. Sie verteilen die Last erfolgreich und ermöglichen uns erhebliche Einsparungen.
Die Datenbank skalieret erfolgreich die Lese- und Schreiblast. Das ist ein riesiger Unterschied und ein groĂer Fortschritt im Vergleich zu 'Aurora', die lediglich die Lese-last bewĂ€ltigen konnte. Snowflake ermöglicht es, diese Rechencluster auch fĂŒr Schreiblasten zu skalieren. Wie bereits erwĂ€hnt, verwenden wir bei ManyChat mehrere Cluster; die kleinen und superkleinen Cluster werden ĂŒberwiegend fĂŒr ETL eingesetzt, um Daten zu laden. Analytiker arbeiten bereits auf den mittleren Clustern, die von der ETL-Last völlig unberĂŒhrt sind und daher sehr schnell arbeiten.
Dementsprechend eignet sich die Datenbank gut fĂŒr OLAP-Aufgaben. Leider ist sie jedoch noch nicht fĂŒr OLTP-Lasten anwendbar. Erstens handelt es sich um eine spaltenorientierte Datenbank, mit allen damit verbundenen Konsequenzen. Zweitens ist der Ansatz, bei jedem Bedarf einen Rechencluster hochzufahren und mit Daten zu versorgen, fĂŒr OLTP-Lasten leider noch nicht schnell genug. Wartezeiten von Sekunden sind fĂŒr OLAP-Aufgaben in Ordnung, fĂŒr OLTP-Anforderungen jedoch inakzeptabel; besser wĂ€ren 100 ms, noch besser 10 ms.
Fazit
Eine serverlose Datenbank ist durch die Trennung der Datenbank in stateless und stateful Teile möglich. Ihnen ist sicherlich aufgefallen, dass in allen genannten Beispielen der stateful Teil, sagen wir mal, die Speicherung der Mikropartitionen in S3 ist, wÀhrend der stateless Teil der Optimierer ist, der mit Metadaten arbeitet und Sicherheitsfragen bearbeitet, die als unabhÀngige, leichtgewichtige stateless Dienste bereitgestellt werden.
Die AusfĂŒhrung von SQL-Abfragen kann ebenfalls als Dienste mit leichtem Zustand betrachtet werden, die im serverlosen Modus hochkommen können, vergleichbar mit den Rechenclustern von Snowflake, nur die benötigten Daten herunterladen, die Abfrage ausfĂŒhren und dann 'stillgelegt' werden.
Serverless-Datenbanken auf Produktionsniveau sind bereits verfĂŒgbar und funktionstĂŒchtig. Diese serverlosen Datenbanken sind bereit, OLAP-Aufgaben zu bewĂ€ltigen. Leider kommen sie fĂŒr OLTP-Aufgaben⊠mit EinschrĂ€nkungen zum Einsatz, da es gewisse BeschrĂ€nkungen gibt. Auf der einen Seite ist das ein Nachteil. Auf der anderen Seite ist es eine Möglichkeit. Vielleicht findet einer der Leser einen Weg, wie eine OLTP-Datenbank vollstĂ€ndig serverlos und ohne EinschrĂ€nkungen von Aurora realisiert werden kann.
Ich hoffe, es war interessant fĂŒr Sie. Auf eine serverlose Zukunft đ
Quelle: habr.com
