{"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\/de\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo zusammen! Mein Name ist Nikolaj Golow. Fr\u00fcher habe ich bei Avito gearbeitet und sechs Jahre die Datenplattform geleitet, das hei\u00dft, ich habe mich um alle Datenbanken gek\u00fcmmert: analytische (Vertica, ClickHouse), Streaming und OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). In dieser Zeit habe ich mich mit einer Vielzahl von Datenbanken auseinander gesetzt \u2013 die verschiedensten und unkonventionellsten, sowie mit speziellen Anwendungsf\u00e4llen.<\/p>\n<p>Derzeit arbeite ich bei ManyChat. Im Grunde handelt es sich um ein Startup \u2013 neu, ehrgeizig und schnell wachsend. Und als ich gerade in das Unternehmen gekommen bin, stellte sich die klassische Frage: \u201eWas sollte man jetzt f\u00fcr ein junges Startup im Bereich DBMS und Datenbanken vom Markt nehmen?\u201c <\/p>\n<p>In diesem Artikel, der auf meinem Vortrag basiert, <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">beim Online-Festival RIT++2020<\/a><\/noindex>, werde ich diese Frage beantworten. Die Videoaufzeichnung des Vortrags ist verf\u00fcgbar unter <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" 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>Allseits bekannte Datenbanken des Jahres 2020<\/h2>\n<p>\nEs ist das Jahr 2020, ich habe mich umgeschaut und drei Typen von Datenbanken gesehen. <\/p>\n<p>Der erste Typ \u2014 <b>klassische OLTP-Datenbanken<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Sie wurden vor langer Zeit geschrieben, sind aber immer noch relevant, weil sie der Entwicklergemeinschaft gut bekannt sind.<\/p>\n<p>Der zweite Typ \u2014 <b>Datenbanken aus den \u201eNullern\u201c<\/b>. Sie versuchten, sich von klassischen Mustern zu l\u00f6sen, indem sie auf SQL, traditionelle Strukturen und ACID verzichteten, durch die Einf\u00fchrung von eingebautem Sharding und anderen attraktiven Funktionen. Beispiele hierf\u00fcr sind Cassandra, MongoDB, Redis oder Tarantool. All diese L\u00f6sungen wollten dem Markt etwas grundlegend Neues bieten und fanden ihren Platz, weil sie sich in bestimmten Aufgaben als \u00e4u\u00dferst praktisch erwiesen. Diese Datenbanken bezeichne ich als Sammelbegriff NOSQL.<\/p>\n<p>Die \u201eNuller\u201c sind vorbei, die NOSQL-Datenbanken sind akzeptiert worden, und die Welt hat aus meiner Sicht den n\u00e4chsten Schritt gemacht \u2014 zu <b>verwalteten Datenbanken.<\/b>Ihre Kerntechnologie ist die gleiche wie die von klassischen OLTP-Datenbanken oder neuen NoSQL-Datenbanken. Aber sie ben\u00f6tigen keine DBA und DevOps und laufen auf verwalteter Hardware in der Cloud. F\u00fcr den Entwickler ist das \u201eeinfach eine Datenbank\u201c, die irgendwo funktioniert, und wie sie auf dem Server installiert ist, wer den Server konfiguriert hat und wer ihn aktualisiert, interessiert niemanden.<\/p>\n<p>Beispiele f\u00fcr solche Datenbanken:<\/p>\n<ul>\n<li>AWS RDS \u2014 eine verwaltete Schicht \u00fcber PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB \u2014 der AWS-Ableger einer dokumentenbasierten Datenbank, \u00e4hnlich wie Redis und MongoDB.<\/li>\n<li>Amazon Redshift \u2014 eine verwaltete analytische Datenbank.<\/li>\n<\/ul>\n<p>\nIm Grunde sind das alte Datenbanken, aber in einer verwalteten Umgebung, ohne dass mit Hardware gearbeitet werden muss. <\/p>\n<p><i>Hinweis. Die Beispiele beziehen sich auf die AWS-Umgebung, aber auch ihre Alternativen gibt es in Microsoft Azure, Google Cloud oder Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWas ist also neu daran? Im Jahr 2020 nichts davon.<\/p>\n<h2>Das Konzept von Serverless<\/h2>\n<p>\nTats\u00e4chlich neu auf dem Markt im Jahr 2020 sind Serverless- oder cloudlose L\u00f6sungen.<\/p>\n<p>Ich werde versuchen zu erkl\u00e4ren, was das bedeutet, am Beispiel eines normalen Services oder Backend-Anwendung.<br \/>\nUm eine normale Backend-Anwendung bereitzustellen, kaufen oder mieten wir einen Server, kopieren den Code darauf, ver\u00f6ffentlichen einen externen Endpunkt und zahlen regelm\u00e4\u00dfig f\u00fcr Miete, Strom und die Dienste des Rechenzentrums. Das ist das Standardverfahren.<\/p>\n<p>Gibt es eine andere M\u00f6glichkeit? Mit Serverless-Services ja.<\/p>\n<p>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\u00f6ffentlichen den externen Endpunkt. Danach zahlen wir einfach f\u00fcr jeden Aufruf dieser Funktion und ignorieren dabei die Hardware, auf der sie ausgef\u00fchrt wird.<\/p>\n<p>Ich werde versuchen, diesen Ansatz mit Bildern zu veranschaulichen.<br \/>\n<img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Klassisches Deployment<\/b>. 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. <\/p>\n<p>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 % \u2014 er steht teilweise still. Wenn nicht drei Anfragen, sondern 30 kommen, kann das gesamte System mit der Last nicht umgehen und beginnt zu stocken.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Serverless Deployment<\/b>. In einer serverlosen Umgebung hat ein solcher Service keine Instanzen und Server. Es gibt einen Pool von vorgeheizten Ressourcen \u2014 kleinen vorbereiteten Docker-Containern mit dem bereitgestellten Funktionscode. Das System erh\u00e4lt externe Anfragen und f\u00fcr jede von ihnen startet das serverlose Framework einen kleinen Container mit dem Code: es verarbeitet genau diese Anfrage und zerst\u00f6rt den Container.<\/p>\n<p>Eine Anfrage \u2014 ein gestarteter Container, 1000 Anfragen \u2014 1000 Container. Und das Deployment auf physischer Hardware ist bereits die Aufgabe des Cloud-Anbieters. Es wird vollst\u00e4ndig vom serverlosen Framework verborgen. In diesem Konzept zahlen wir f\u00fcr jeden Aufruf. Zum Beispiel, wenn eine Anfrage pro Tag kommt \u2014 wir haben f\u00fcr einen Aufruf bezahlt, wenn eine Million pro Minute kommt \u2014 wir haben f\u00fcr eine Million bezahlt. Oder pro Sekunde, das kommt auch vor.<\/p>\n<p>Das Konzept der Ver\u00f6ffentlichung einer serverlosen Funktion eignet sich f\u00fcr einen zustandslosen Dienst. Wenn Sie jedoch einen zustandsbehafteten Dienst ben\u00f6tigen, f\u00fcgen 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.<\/p>\n<p>Was ist die allgemeine Einschr\u00e4nkung all dieser Datenbanken? Es sind die Kosten f\u00fcr einen st\u00e4ndig 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\u00fcr die Hardware, den Strom und die Miete des Rechenzentrums. Wenn wir eine klassische Datenbank haben, zahlen wir f\u00fcr Master und Slave. Bei einer hochbelasteten, sharded Datenbank zahlen wir f\u00fcr 10, 20 oder 30 Server und das kontinuierlich.<\/p>\n<p>Die Tatsache, dass in der Kostenstruktur st\u00e4ndig reservierte Server vorhanden sind, wurde fr\u00fcher als unvermeidliches \u00dcbel angesehen. Gew\u00f6hnliche Datenbanken haben auch andere Herausforderungen, wie zum Beispiel Limits f\u00fcr die Anzahl der Verbindungen, Skalierungsbeschr\u00e4nkungen, georedundante Konsensbildung \u2014 diese k\u00f6nnen in bestimmten Datenbanken irgendwie gel\u00f6st werden, aber nicht alle auf einmal und nicht perfekt.<\/p>\n<h2>Serverlose Datenbank \u2014 Theorie<\/h2>\n<p>\nDie Frage des Jahres 2020: Kann man auch eine Datenbank serverlos gestalten? Jeder hat von einem serverlosen Backend geh\u00f6rt... wie w\u00e4re es, auch eine Datenbank serverlos zu machen?<\/p>\n<p>Es klingt seltsam, denn eine Datenbank ist schlie\u00dflich ein zustandsbehafteter Dienst, der nicht wirklich f\u00fcr serverlose Infrastrukturen geeignet ist. Dabei ist der Zustand einer Datenbank sehr gro\u00df: Gigabytes, Terabytes und in analytischen Datenbanken sogar Petabytes. So einfach l\u00e4sst sich das nicht in leichten Docker-Containern umsetzen.<\/p>\n<p>Andererseits basieren nahezu alle modernen Datenbanken auf einer gro\u00dfen Menge an Logik und Komponenten: Transaktionen, Konsistenz, Verfahren, relationale Abh\u00e4ngigkeiten und viel Logik. Ein betr\u00e4chtlicher Teil der Logik einer Datenbank ben\u00f6tigt oft nur einen kleinen Zustand. Gigabytes und Terabytes werden nur von einem kleinen Teil der Logik der Datenbank beansprucht, die mit der direkten Ausf\u00fchrung von Anfragen zu tun hat.<\/p>\n<p>Dementsprechend die Idee: Wenn ein Teil der Logik ein zustandsloses Ausf\u00fchren zul\u00e4sst, warum nicht die Datenbank in zustandsbehaftete und zustandslose Teile aufteilen.<\/p>\n<h2>Serverlos f\u00fcr OLAP-L\u00f6sungen<\/h2>\n<p>\nSchauen wir uns praktische Beispiele an, wie eine Aufteilung einer Datenbank in zustandsbehaftete und zustandslose Teile aussehen k\u00f6nnte.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Zum Beispiel haben wir eine analytische Datenbank.<\/b>: externe Daten (roter Zylinder links), ETL-Prozess, der Daten in die Datenbank l\u00e4dt, und ein Analyst, der SQL-Abfragen an die Datenbank sendet. Dies ist das klassische Schema f\u00fcr die Arbeit mit einem Data Warehouse. <\/p>\n<p>In diesem Schema wird ETL bedingt einmal ausgef\u00fchrt. Danach m\u00fcssen wir st\u00e4ndig f\u00fcr die Server zahlen, auf denen die Datenbank mit den durch ETL geladenen Daten l\u00e4uft, damit wir Anfragen stellen k\u00f6nnen. <\/p>\n<p>Betrachten wir einen alternativen Ansatz, der in der AWS Athena Serverless-Datenbank umgesetzt ist. Hier gibt es keine st\u00e4ndig zugewiesene Hardware, auf der die geladenen Daten gespeichert werden. Stattdessen:<\/p>\n<ul>\n<li>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\u00fcr die Ausf\u00fchrung der Abfrage ben\u00f6tigt werden.<\/li>\n<li>Der Optimierer l\u00e4dt basierend auf den gesammelten Daten die ben\u00f6tigten Daten aus externen Quellen in einen tempor\u00e4ren Speicher (tempor\u00e4re Datenbank) herunter.<\/li>\n<li>Im tempor\u00e4ren Speicher wird die SQL-Abfrage des Benutzers ausgef\u00fchrt, das Ergebnis wird an den Benutzer zur\u00fcckgegeben. <\/li>\n<li>Der tempor\u00e4re Speicher wird geleert, Ressourcen werden freigegeben.<\/li>\n<\/ul>\n<p>In dieser Architektur zahlen wir nur f\u00fcr den Prozess der Abfrageausf\u00fchrung. Keine Abfragen \u2013 keine Kosten.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDies ist ein funktionierender Ansatz und wird nicht nur in Athena Serverless, sondern auch in Redshift Spectrum (in AWS) umgesetzt.<\/p>\n<p>Am Beispiel von Athena ist zu sehen, dass die Serverless-Datenbank mit echten Abfragen von Dutzenden und Hunderten von Terabyte Daten arbeitet. F\u00fcr Hunderte Terabyte werden Hunderte von Servern ben\u00f6tigt, aber wir m\u00fcssen nicht daf\u00fcr bezahlen \u2013 wir zahlen f\u00fcr die Abfragen. Die Geschwindigkeit jeder Abfrage ist (sehr) langsam im Vergleich zu spezialisierten analytischen Datenbanken wie Vertica, aber wir bezahlen auch nicht f\u00fcr Stillstandszeiten.<\/p>\n<p>Solch eine Datenbank ist f\u00fcr seltene analytische Ad-hoc-Abfragen anwendbar. Zum Beispiel, wenn wir spontan entscheiden, eine Hypothese an einem riesigen Datenvolumen zu \u00fcberpr\u00fcfen. F\u00fcr diese F\u00e4lle eignet sich Athena perfekt. F\u00fcr regelm\u00e4\u00dfige Abfragen wird ein solches System teuer. In diesem Fall sollten Sie die Daten in einer speziellen L\u00f6sung cachen. <\/p>\n<h2>Serverless f\u00fcr OLTP-L\u00f6sungen.<\/h2>\n<p>\nIm vorherigen Beispiel wurden OLAP-Aufgaben (analytische) betrachtet. Jetzt betrachten wir OLTP-Aufgaben.<\/p>\n<p>Stellen wir uns ein skalierbares PostgreSQL oder MySQL vor. Lassen Sie uns eine gew\u00f6hnliche verwaltete Instanz von PostgreSQL oder MySQL mit minimalen Ressourcen einrichten. Wenn die Instanz mehr Last erh\u00e4lt, werden wir zus\u00e4tzliche 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.<\/p>\n<p>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\u00e4rmten minimalen Instanzen bereit \u2013 die Verbindung erfolgt so schnell wie m\u00f6glich. Das Ausschalten der Instanzen geschieht ebenso.<\/p>\n<p>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\u00fcgt \u00fcber ihren eigenen Arbeitsspeicher, Prozessor und minimalen Speicherplatz. Folglich gibt es ein Master-Exemplar, die anderen sind nur read-only Replikate.<\/p>\n<p>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).<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWenn die Datenbank Anfragen erh\u00e4lt, hebt das Proxy-Fleet Aurora Capacity Units an, um die Leistung der Ressourcen des Systems zu erh\u00f6hen. Die M\u00f6glichkeit, Ressourcen zu vergr\u00f6\u00dfern und zu verringern, erlaubt es dem System, mit Ressourcen zu \u201ejonglieren\u201c: automatisch einzelne ACUs anzuschalten (indem sie durch neue ersetzt werden) und auf die abgeschalteten Ressourcen alle aktuellen Updates anzuwenden.<\/p>\n<p>Die Aurora Serverless-Datenbank kann die Lese-Last skalieren. Aber in der Dokumentation wird dies nicht direkt gesagt. Es k\u00f6nnte der Eindruck entstehen, dass sie ein Multi-Master-Setup herstellen k\u00f6nnen. Doch es gibt kein Magie. <\/p>\n<p>Diese Datenbank eignet sich gut, um nicht viel Geld f\u00fcr 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\u00fcr Instanzen. Wenn unerwartet eine Last entsteht, wie nach einer Konferenz oder Werbekampagne, str\u00f6men 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 \u2013 praktisch.<\/p>\n<p>Diese L\u00f6sung eignet sich nicht f\u00fcr stabile Hochlast, da sie nicht in der Lage ist, die schreibenden Lasten zu skalieren. All diese Verbindungen und Abschaltungen von Ressourcen geschehen im sogenannten \u201eSkalierungspunkt\u201c \u2013 einem Zeitpunkt, an dem die Datenbank nicht durch eine Transaktion gehalten wird und tempor\u00e4re 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. <\/p>\n<p>Es gibt keinen Zauber \u2013 es ist einfach nur PostgreSQL. Aber der Prozess der Hinzuf\u00fcgung von Maschinen und der teilweisen Automatisierung der Abschaltung ist automatisiert.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAurora Serverless ist eine alte Datenbank, die f\u00fcr die Cloud umgeschrieben wurde, um die spezifischen Vorteile von Serverless zu nutzen. Jetzt erz\u00e4hle ich von einer Datenbank, die von Grund auf f\u00fcr die Cloud und den serverless Ansatz entwickelt wurde \u2013 Serverless-by-design. Sie wurde sofort ohne die Annahme entwickelt, dass sie auf physischen Servern arbeitet.<\/p>\n<p>Diese Datenbank hei\u00dft Snowflake. Sie besteht aus drei Schl\u00fcsselkomponenten.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie erste ist der Metadatenblock. Dies ist ein schneller In-Memory-Service, der Fragen zu Sicherheit, Metadaten, Transaktionen und Anfrageoptimierung l\u00f6st (in der Abbildung links).<\/p>\n<p>Der zweite Block ist eine Vielzahl von virtuellen Rechenclustern f\u00fcr Berechnungen (in der Abbildung \u2013 eine Ansammlung blauer Kreise).<\/p>\n<p>Der dritte Block ist ein Speichersystem auf Basis von S3. S3 ist ein unbegrenzter Objektspeicher in AWS, \u00e4hnlich einem unbegrenzten Dropbox f\u00fcr Unternehmen.<\/p>\n<p>Lassen Sie uns anschauen, wie Snowflake funktioniert, unter der Annahme eines Kaltstarts. Das hei\u00dft, 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\u00e4uft, zahlen Sie nur f\u00fcr den Platz, den die Daten einnehmen. Dabei ist der Tarif f\u00fcr den Platz sehr niedrig (insbesondere unter Ber\u00fccksichtigung der erheblichen Kompression). Der Metadata Service l\u00e4uft ebenfalls kontinuierlich, aber f\u00fcr die Optimierung von Abfragen werden nicht viele Ressourcen ben\u00f6tigt, und der Service kann als bedingt kostenlos betrachtet werden. <\/p>\n<p>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\u00fcgbaren Daten, die Berechtigungen des Benutzers, und wenn alles in Ordnung ist, erstellt er einen Verarbeitungsplan f\u00fcr die Abfrage.<\/p>\n<p>Dann initiiert der Service den Start des Rechenclusters. Ein Rechencluster ist ein Cluster von Servern, die Berechnungen durchf\u00fchren. Das hei\u00dft, es ist ein Cluster, das aus 1, 2, 4, 8, 16, 32 Servern bestehen kann \u2013 so viele, wie Sie m\u00f6chten. Sie senden die Abfrage und sofort beginnt der Start dieses Clusters. Das dauert tats\u00e4chlich nur Sekunden.<\/p>\n<p><img decoding=\"async\" alt=\"Auf dem Weg zu serverlosen Datenbanken \u2013 wie und warum\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNachdem der Cluster gestartet wurde, beginnen die Mikropartitionen, die f\u00fcr die Bearbeitung Ihrer Anfrage ben\u00f6tigt werden, aus S3 in den Cluster kopiert zu werden. Das bedeutet, stellen wir uns vor, dass f\u00fcr die Ausf\u00fchrung einer SQL-Anfrage zwei Partitionen aus einer Tabelle und eine aus einer anderen ben\u00f6tigt werden. In diesem Fall werden nur die drei ben\u00f6tigten Partitionen in den Cluster kopiert, nicht alle Tabellen vollst\u00e4ndig. Genau aus diesem Grund und weil alles innerhalb eines einzigen Rechenzentrums ist und mit sehr schnellen Kan\u00e4len verbunden ist, erfolgt der gesamte Prozess der Daten\u00fcbertragung sehr schnell: innerhalb von Sekunden, sehr selten innerhalb von Minuten, es sei denn, es handelt sich um monstr\u00f6se Anfragen. Entsprechend werden die Mikropartitionen in den Rechencluster kopiert, und nach Abschluss wird die SQL-Anfrage auf diesem Rechencluster ausgef\u00fchrt. Das Ergebnis dieser Anfrage kann eine Zeile, mehrere Zeilen oder eine Tabelle sein \u2013 sie werden an den Benutzer gesendet, damit er sie exportieren, in seinem BI-Tool anzeigen oder anderweitig nutzen kann.<\/p>\n<p>Jede SQL-Anfrage kann nicht nur Aggregate aus zuvor geladenen Daten berechnen, sondern auch neue Daten in die Datenbank laden\/erstellen. Das hei\u00dft, es kann sich um eine Anfrage handeln, die beispielsweise neue Eintr\u00e4ge in eine andere Tabelle einf\u00fcgt, was zur Schaffung einer neuen Partition im Rechencluster f\u00fchrt, die wiederum automatisch im gemeinsamen S3-Speicher gespeichert wird.<\/p>\n<p>Das oben beschriebene Szenario, vom Eintreffen des Benutzers bis zum Hochfahren des Clusters, Laden der Daten, Ausf\u00fchren 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\u00f6\u00dfe, betr\u00e4gt 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\u00e4t der Anfragen verf\u00fcgbar. Aber Sie zahlen nur f\u00fcr die Minuten, in denen der Cluster tats\u00e4chlich arbeitet, denn wenn keine Anfragen vorliegen, legen Sie quasi die H\u00e4nde weg, und nach 5-10 Minuten Wartezeit (ein einstellbarer Parameter) wird er selbst abgeschaltet, gibt Ressourcen frei und wird kostenlos.<\/p>\n<p>Es ist ein v\u00f6llig realistisches Szenario, in dem Sie eine Anfrage senden, der Cluster nach etwa einer Minute auftaucht, eine weitere Minute ben\u00f6tigt, um zu rechnen, dann f\u00fcnf Minuten zum Ausschalten und Sie am Ende f\u00fcr sieben Minuten Arbeitszeit dieses Clusters bezahlen, und nicht f\u00fcr Monate oder Jahre.<\/p>\n<p>Das erste Szenario beschrieb die Nutzung von Snowflake im Einzelbenutzer-Modus. Lassen Sie uns nun annehmen, dass es viele Benutzer gibt, was n\u00e4her am realen Szenario ist.<\/p>\n<p>Angenommen, wir haben viele Analysten und Tableau-Berichte, die unsere Datenbank st\u00e4ndig mit einer gro\u00dfen Anzahl einfacher analytischer SQL-Abfragen bombardieren.<\/p>\n<p>Dar\u00fcber hinaus nehmen wir an, dass wir einfallsreiche Data Scientists haben, die versuchen, mit den Daten monstr\u00f6se Dinge zu tun, mit Dutzenden von Terabyte zu operieren und Milliarden und Billionen von Datenzeilen zu analysieren. <\/p>\n<p>F\u00fcr die oben beschriebenen beiden Arten von Lasten erm\u00f6glicht es Snowflake, mehrere unabh\u00e4ngige Rechencluster mit unterschiedlicher Leistung zu provisionieren. Diese Rechencluster arbeiten unabh\u00e4ngig, jedoch mit gemeinsamen konsistenten Daten.<\/p>\n<p>F\u00fcr eine gro\u00dfe Anzahl einfacher Abfragen k\u00f6nnen 2-3 kleine Cluster hochgefahren werden, je zwei Maschinen gro\u00df. Dieses Verhalten kann auch durch automatische Einstellungen realisiert werden. Das hei\u00dft, Sie sagen: \u201eSnowflake, starte ein kleines Cluster. Wenn die Last dar\u00fcber einen bestimmten Parameter \u00fcberschreitet, starte ein \u00e4hnliches zweites, drittes. Wenn die Last zu sinken beginnt \u2013 schalte \u00fcberfl\u00fcssige aus.\u201c Damit alle Ressourcen haben, unabh\u00e4ngig davon, wie viele Analysten kommen und Berichte ansehen.<\/p>\n<p>Wenn jedoch die Analysten schlafen und sich niemand die Berichte ansieht, k\u00f6nnen die Cluster vollst\u00e4ndig heruntergefahren werden, und Sie h\u00f6ren auf, daf\u00fcr zu zahlen.<\/p>\n<p>F\u00fcr schwere Abfragen (von Data Scientists) k\u00f6nnen Sie jedoch ein sehr gro\u00dfes Cluster mit theoretisch 32 Maschinen hochfahren. Dieses Cluster wird ebenfalls nur f\u00fcr die Minuten und Stunden bezahlt, in denen Ihre riesige Abfrage dort arbeitet.<\/p>\n<p>Die oben beschriebene M\u00f6glichkeit erm\u00f6glicht es, die Lasten nicht nur auf 2, sondern auch auf mehrere Cluster zu verteilen (ETL, Monitoring, Materialisierung von Berichten,...).<\/p>\n<p>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\u00f6\u00dfen. Es gibt diese sogenannten 16-Maschinen-Cluster, 2-Maschinen-Cluster und auch sehr kleine 1-Maschinen-Cluster f\u00fcr spezielle Aufgaben. Sie verteilen die Last erfolgreich und erm\u00f6glichen uns erhebliche Einsparungen.<\/p>\n<p>Die Datenbank skalieret erfolgreich die Lese- und Schreiblast. Das ist ein riesiger Unterschied und ein gro\u00dfer Fortschritt im Vergleich zu 'Aurora', die lediglich die Lese-last bew\u00e4ltigen konnte. Snowflake erm\u00f6glicht es, diese Rechencluster auch f\u00fcr Schreiblasten zu skalieren. Wie bereits erw\u00e4hnt, verwenden wir bei ManyChat mehrere Cluster; die kleinen und superkleinen Cluster werden \u00fcberwiegend f\u00fcr ETL eingesetzt, um Daten zu laden. Analytiker arbeiten bereits auf den mittleren Clustern, die von der ETL-Last v\u00f6llig unber\u00fchrt sind und daher sehr schnell arbeiten. <\/p>\n<p>Dementsprechend eignet sich die Datenbank gut f\u00fcr OLAP-Aufgaben. Leider ist sie jedoch noch nicht f\u00fcr 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\u00fcr OLTP-Lasten leider noch nicht schnell genug. Wartezeiten von Sekunden sind f\u00fcr OLAP-Aufgaben in Ordnung, f\u00fcr OLTP-Anforderungen jedoch inakzeptabel; besser w\u00e4ren 100 ms, noch besser 10 ms.<\/p>\n<h2>Fazit<\/h2>\n<p>\nEine serverlose Datenbank ist durch die Trennung der Datenbank in stateless und stateful Teile m\u00f6glich. Ihnen ist sicherlich aufgefallen, dass in allen genannten Beispielen der stateful Teil, sagen wir mal, die Speicherung der Mikropartitionen in S3 ist, w\u00e4hrend der stateless Teil der Optimierer ist, der mit Metadaten arbeitet und Sicherheitsfragen bearbeitet, die als unabh\u00e4ngige, leichtgewichtige stateless Dienste bereitgestellt werden.<\/p>\n<p>Die Ausf\u00fchrung von SQL-Abfragen kann ebenfalls als Dienste mit leichtem Zustand betrachtet werden, die im serverlosen Modus hochkommen k\u00f6nnen, vergleichbar mit den Rechenclustern von Snowflake, nur die ben\u00f6tigten Daten herunterladen, die Abfrage ausf\u00fchren und dann 'stillgelegt' werden.<\/p>\n<p>Serverless-Datenbanken auf Produktionsniveau sind bereits verf\u00fcgbar und funktionst\u00fcchtig. Diese serverlosen Datenbanken sind bereit, OLAP-Aufgaben zu bew\u00e4ltigen. Leider kommen sie f\u00fcr OLTP-Aufgaben\u2026 mit Einschr\u00e4nkungen zum Einsatz, da es gewisse Beschr\u00e4nkungen gibt. Auf der einen Seite ist das ein Nachteil. Auf der anderen Seite ist es eine M\u00f6glichkeit. Vielleicht findet einer der Leser einen Weg, wie eine OLTP-Datenbank vollst\u00e4ndig serverlos und ohne Einschr\u00e4nkungen von Aurora realisiert werden kann.<\/p>\n<p>Ich hoffe, es war interessant f\u00fcr Sie. Auf eine serverlose Zukunft \ud83d\ude42<br \/>\n<br \/>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Auf dem Weg zu serverlosen Datenbanken \u2014 wie und warum | ProHoster","description":"Hallo zusammen! Mein Name ist Nikolai Golov.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}