{"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\/it\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Verso i database serverless \u2014 come e perch\u00e9","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao a tutti! Mi chiamo Nikolai Golov. In passato ho lavorato in Avito e ho diretto per sei anni la Data Platform, occupandomi di tutti i database: analitici (Vertica, ClickHouse), in streaming e OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). In questo periodo mi sono familiarizzato con un gran numero di database \u2014 dei pi\u00f9 vari e insoliti, affrontando casi d'uso non standard.<\/p>\n<p>Attualmente lavoro in ManyChat. Praticamente si tratta di una startup \u2014 nuova, ambiziosa e in rapida crescita. E quando sono entrato in azienda, \u00e8 emersa la classica domanda: \"Cosa dovrebbe considerare un giovane startup sul mercato dei DBMS e dei database?\". <\/p>\n<p>In questo articolo, basato sulla mia presentazione a <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">RIT++2020 festival online<\/a><\/noindex>, risponder\u00f2 a questa domanda. La versione video della presentazione \u00e8 disponibile su <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" 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>Database noti del 2020<\/h2>\n<p>\nSiamo nel 2020, mi sono guardato intorno e ho identificato tre tipi di DB. <\/p>\n<p>Il primo tipo \u2014 <b>database OLTP classici<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Sono stati scritti molto tempo fa, ma sono ancora attuali, perch\u00e8 ben noti alla comunit\u00e0 di sviluppatori.<\/p>\n<p>Il secondo tipo \u2014 <b>database degli anni 2000<\/b>. Hanno cercato di allontanarsi dai modelli tradizionali eliminando SQL, le strutture tradizionali e ACID, integrando sharding e altre funzionalit\u00e0 attraenti. Ad esempio, ci sono Cassandra, MongoDB, Redis o Tarantool. Tutte queste soluzioni volevano offrire al mercato qualcosa di fondamentalmente nuovo e hanno trovato la loro nicchia, risultando estremamente comode in determinate situazioni. Queste banche dati possono essere definite con il termine ombrello NOSQL.<\/p>\n<p>Gli anni '00 sono finiti, le banche dati NOSQL sono diventate familiari, e il mondo, dal mio punto di vista, ha fatto il passo successivo - verso <b>banche dati managed<\/b>. Queste banche hanno un nucleo simile a quello delle tradizionali banche OLTP o delle nuove NoSQL. Tuttavia, non hanno bisogno di DBA e DevOps e funzionano su hardware gestito nel cloud. Per lo sviluppatore, \u00e8 \u00absolo una banca dati\u00bb, che opera da qualche parte, e come \u00e8 installata sul server, chi ha configurato il server e chi lo aggiorna non interessa a nessuno.<\/p>\n<p>Esempi di tali banche:<\/p>\n<ul>\n<li>AWS RDS \u2014 un wrapper managed su PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB \u2014 l'analogo AWS di una banca dati basata su documenti, simile a Redis e MongoDB.<\/li>\n<li>Amazon Redshift \u2014 una banca dati analitica managed.<\/li>\n<\/ul>\n<p>\nAlla base ci sono banche dati tradizionali, ma portate in un ambiente managed, senza la necessit\u00e0 di lavorare con l'hardware. <\/p>\n<p><i>Nota. Gli esempi sono tratti dall'ambiente AWS, ma ne esistono anche analoghi in Microsoft Azure, Google Cloud o Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCosa c'\u00e8 di nuovo? Nel 2020, niente di tutto ci\u00f2.<\/p>\n<h2>Il concetto di Serverless<\/h2>\n<p>\nLa vera novit\u00e0 sul mercato nel 2020 \u00e8 costituita dalle soluzioni serverless.<\/p>\n<p>Cercher\u00f2 di spiegare cosa significa, usando l'esempio di un servizio tradizionale o di un'applicazione backend.<br \/>\nPer distribuire un'applicazione backend tradizionale, acquistiamo o affittiamo un server, copiamo il codice su di esso, pubblichiamo un endpoint e paghiamo regolarmente per l'affitto, l'elettricit\u00e0 e i servizi del data center. Questo \u00e8 lo schema standard.<\/p>\n<p>\u00c8 possibile fare diversamente? Con i servizi serverless, s\u00ec.<\/p>\n<p>Qual \u00e8 il focus di questo approccio: nessun server, nemmeno l'affitto di un'istanza virtuale nel cloud. Per distribuire un servizio, copiamo il codice (funzioni) in un repository e pubblichiamo un endpoint. Successivamente, paghiamo solo per ogni chiamata a questa funzione, ignorando completamente l'hardware su cui viene eseguita.<\/p>\n<p>Cercher\u00f2 di illustrare questo approccio con delle immagini.<br \/>\n<img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Distribuzione classica<\/b>. Abbiamo un servizio con un carico specifico. Avviamo due istanze: server fisici o istanze in AWS. Su queste istanze vengono instradate le richieste esterne, che vengono elaborate l\u00ec. <\/p>\n<p>Come si pu\u00f2 vedere nell'immagine, i server sono utilizzati in modo diverso. Uno \u00e8 utillizato al 100%, con due richieste, mentre l'altro solo al 50% \u2014 parzialmente inattivo. Se arrivano non tre richieste, ma 30, l'intero sistema non riuscir\u00e0 a gestire il carico e comincer\u00e0 a rallentare.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Deploy senza server<\/b>. In un ambiente senza server, questo tipo di servizio non ha istanze o server. C'\u00e8 un certo pool di risorse pronte \u2014 piccoli container Docker preparati con il codice della funzione distribuito. Il sistema riceve le richieste esterne e per ciascuna di esse il framework senza server avvia un piccolo container con il codice: elabora quella specifica richiesta e termina il container.<\/p>\n<p>Una richiesta corrisponde a un contenitore sollevato, 1000 richieste corrispondono a 1000 contenitori. La distribuzione su server fisici \u00e8 gi\u00e0 un lavoro da fornitore cloud. \u00c8 completamente mascherata da un framework serverless. In questa concezione, paghiamo per ogni invocazione. Ad esempio, se arriva un invocazione al giorno, paghiamo per un invocazione; se arriva un milione al minuto, paghiamo per un milione. Oppure al secondo, pu\u00f2 succedere anche questo.<\/p>\n<p>Il concetto di pubblicazione di una funzione serverless \u00e8 adatto per un servizio stateless. Ma se hai bisogno di un servizio stateful, allora aggiungiamo un database al servizio. In questo caso, quando si tratta di gestire lo stato, ogni funzione stateful semplicemente scrive e legge dal database. E si pu\u00f2 utilizzare qualsiasi dei tre tipi di database descritti all'inizio dell'articolo.<\/p>\n<p>Qual \u00e8 il limite comune a tutti questi database? Sono i costi di un server cloud o hardware utilizzato in modo permanente (o di pi\u00f9 server). Non importa se utilizziamo un database tradizionale o un managed, che ci sia DevOps e un admin o meno, paghiamo comunque 24 ore su 24, 7 giorni su 7 per l'hardware, l'elettricit\u00e0 e l'affitto del centro dati. Se abbiamo un database tradizionale, paghiamo per master e slave. Se \u00e8 un database shardato ad alto carico, paghiamo per 10, 20 o 30 server e lo facciamo continuamente.<\/p>\n<p>La presenza di server riservati costantemente nella struttura dei costi \u00e8 stata in passato considerata un male necessario. I database tradizionali hanno anche altre complessit\u00e0, come i limiti sul numero di connessioni, le restrizioni di scalabilit\u00e0 e il consenso geograficamente distribuito: alcune di queste problematiche possono essere affrontate con specifici database, ma non tutte contemporaneamente e non in modo ideale.<\/p>\n<h2>Database serverless \u2014 teoria<\/h2>\n<p>\nDomanda del 2020: \u00e8 possibile rendere serverless anche un database? Tutti hanno sentito parlare di backend serverless... proviamo a fare lo stesso con un database serverless?<\/p>\n<p>Questo suona strano, perch\u00e9 un database \u00e8 un servizio stateful, non proprio adatto a un'infrastruttura serverless. Inoltre, lo stato di un database \u00e8 molto grande: gigabyte, terabyte, e anche petabyte nelle basi di dati analitiche. Non \u00e8 facile implementarlo in leggeri container Docker.<\/p>\n<p>D'altra parte, praticamente tutti i database moderni contengono una grande quantit\u00e0 di logica e componenti: transazioni, gestione della coerenza, procedure, dipendenze relazionali e molta logica. Un'ampia parte della logica del database richiede uno stato relativamente piccolo. Solo una piccola parte della logica del database, legata all'esecuzione delle query, utilizza direttamente gigabyte e terabyte.<\/p>\n<p>Di conseguenza, l'idea \u00e8: se parte della logica consente un'esecuzione stateless, perch\u00e9 non suddividere il database in parti Stateful e Stateless?<\/p>\n<h2>Serverless per soluzioni OLAP<\/h2>\n<p>\nVediamo come pu\u00f2 apparire la suddivisione di un database in parti Stateful e Stateless attraverso esempi pratici.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Ad esempio, abbiamo un database analitico<\/b>: dati esterni (cilindro rosso a sinistra), processo ETL che carica i dati nel database e analista che invia query SQL al database. Questo \u00e8 uno schema classico di funzionamento di un magazzino dati. <\/p>\n<p>In questo schema, condizionatamente, l'ETL viene eseguito una sola volta. Dopo, \u00e8 necessario pagare costantemente per i server su cui funziona il database con i dati caricati dall'ETL, affinch\u00e9 ci sia un posto dove inviare le query. <\/p>\n<p>Consideriamo un approccio alternativo realizzato nella base AWS Athena Serverless. Qui non ci sono hardware dedicato continuamente su cui vengono archiviati i dati caricati. Invece:<\/p>\n<ul>\n<li>L'utente invia una query SQL ad Athena. L'ottimizzatore di Athena analizza la query SQL e cerca nello storage dei metadati (Metadata) i dati specifici necessari per eseguire la query.<\/li>\n<li>L'ottimizzatore, basandosi sui dati raccolti, estrae i dati necessari da fonti esterne in uno storage temporaneo (database temporaneo).<\/li>\n<li>Nello storage temporaneo viene eseguita la query SQL dell'utente, e il risultato viene restituito all'utente. <\/li>\n<li>Lo storage temporaneo viene pulito, le risorse vengono liberate.<\/li>\n<\/ul>\n<p>In questa architettura paghiamo solo per il processo di esecuzione della query. Nessuna query \u2014 nessuna spesa.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto approccio funziona e si realizza non solo in Athena Serverless, ma anche in Redshift Spectrum (su AWS).<\/p>\n<p>L'esempio di Athena dimostra che un database Serverless opera su richieste reali con decine e centinaia di terabyte di dati. Per centinaia di terabyte sono necessari centinaia di server, ma non dobbiamo pagarli \u2014 paghiamo solo per le richieste. La velocit\u00e0 di ogni richiesta \u00e8 (molto) bassa rispetto ai database analitici specializzati come Vertica, ma non paghiamo i tempi di inattivit\u00e0.<\/p>\n<p>Questo tipo di database \u00e8 applicabile per richieste analitiche ad-hoc rare. Ad esempio, quando decidiamo spontaneamente di testare un'ipotesi su un'enorme quantit\u00e0 di dati. Per questi casi, Athena \u00e8 perfetta. Per richieste regolari, questo sistema diventa costoso. In tal caso, memorizza i dati in una soluzione specializzata. <\/p>\n<h2>Serverless per soluzioni OLTP<\/h2>\n<p>\nNell'esempio precedente, abbiamo esaminato compiti OLAP (analitici). Ora consideriamo i compiti OLTP.<\/p>\n<p>Immaginiamo un'istanza PostgreSQL o MySQL scalabile. Creiamo un'istanza gestita di PostgreSQL o MySQL con risorse minime. Quando l'istanza riceve un carico maggiore, possiamo aggiungere repliche supplementari per distribuire parte del carico di lettura. Se non ci sono richieste o carico, disattiviamo le repliche. La prima istanza \u00e8 il master, mentre le altre sono repliche.<\/p>\n<p>Questa idea \u00e8 realizzata in un database chiamato Aurora Serverless AWS. Il principio \u00e8 semplice: le richieste da applicazioni esterne vengono gestite da un proxy fleet. Con l'aumento del carico, vengono allocate risorse di calcolo da istanze minime gi\u00e0 pronte \u2014 la connessione avviene nel modo pi\u00f9 rapido possibile. Anche la disattivazione delle istanze avviene allo stesso modo.<\/p>\n<p>All'interno di Aurora esiste il concetto di Aurora Capacity Unit, ACU. Questo \u00e8 (in termini generali) un'istanza (server). Ogni singolo ACU pu\u00f2 essere master o slave. Ogni Capacity Unit ha la propria memoria, processore e disco minimo. Di conseguenza, esiste un master, mentre le altre sono repliche in sola lettura.<\/p>\n<p>Il numero di Aurora Capacity Units attive \u00e8 un parametro configurabile. Il valore minimo pu\u00f2 essere uno o zero (in tal caso il database non \u00e8 operativo se non ci sono richieste).<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuando il database riceve richieste, il fleet proxy attiva Aurora Capacity Units, aumentando le risorse produttive del sistema. La possibilit\u00e0 di aumentare e diminuire le risorse consente al sistema di \"giocolare\" con le risorse: disattivando automaticamente singole ACU (sostituendole con nuove) e applicando a quelle disattivate tutti gli aggiornamenti attuali.<\/p>\n<p>Il database Aurora Serverless pu\u00f2 scalare il carico di lettura. Tuttavia, questo non \u00e8 specificato chiaramente nella documentazione. Potrebbe sembrare che possano attivare il multi-master. Ma non ci sono magie. <\/p>\n<p>Questa base \u00e8 ideale per evitare di spendere grandi somme per sistemi con accesso imprevedibile. Ad esempio, nella creazione di MVP o siti web di marketing, di solito non ci aspettiamo un carico stabile. Pertanto, in assenza di accesso, non paghiamo per le istanze. Quando sorge un carico imprevisto, ad esempio dopo una conferenza o una campagna pubblicitaria, grandi gruppi di persone accedono al sito e il carico aumenta drasticamente; Aurora Serverless gestisce automaticamente questo carico e connette rapidamente le risorse necessarie (ACU). Poi, dopo la conferenza, tutti dimenticano il prototipo, i server (ACU) si spengono e i costi cadono a zero \u2014 molto comodo.<\/p>\n<p>Questa soluzione non \u00e8 adatta per carichi stabili e elevati, perch\u00e9 non \u00e8 in grado di scalare il carico di scrittura. Tutte queste connessioni e disconnessioni delle risorse avvengono nel momento chiamato 'scale point' \u2014 un momento in cui il database non \u00e8 bloccato da una transazione e non ha tabelle temporanee. Ad esempio, nel corso di una settimana potrebbe non verificarsi alcuno 'scale point', e il database funziona con le stesse risorse, non potendo n\u00e9 espandersi n\u00e9 ridursi. <\/p>\n<p>Non c'\u00e8 magia: si tratta di un normale PostgreSQL. Tuttavia, il processo di aggiunta di macchine e disattivazione \u00e8 parzialmente automatizzato.<\/p>\n<h2>Serverless per design<\/h2>\n<p>\nAurora Serverless \u00e8 un database vecchio adattato al cloud per sfruttare i vantaggi di Serverless. Ora, parler\u00f2 di un database progettato fin dall'inizio per il cloud e per un approccio serverless: Serverless-by-design. \u00c8 stato sviluppato sin dall'inizio senza l'assunzione di essere eseguito su server fisici.<\/p>\n<p>Questo database si chiama Snowflake. Esso \u00e8 composto da tre blocchi chiave.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl primo blocco \u00e8 il blocco dei metadati. Si tratta di un servizio in-memory veloce che si occupa di sicurezza, metadati, transazioni, ottimizzazione delle query (nella illustrazione a sinistra).<\/p>\n<p>Il secondo blocco consiste in numerosi cluster di calcolo virtuali per le elaborazioni (nell'illustrazione \u2014 un insieme di cerchi blu).<\/p>\n<p>Il terzo blocco \u00e8 il sistema di archiviazione dei dati basato su S3. S3 \u00e8 uno spazio di archiviazione oggetti illimitato in AWS, simile a un Dropbox illimitato per il business.<\/p>\n<p>Vediamo come funziona Snowflake assumendo un avvio a freddo. Cio\u00e8, il database esiste, i dati sono stati caricati, ma non ci sono query attive. Di conseguenza, se non ci sono query, abbiamo un veloce servizio di Metadata in memoria (il primo blocco). E abbiamo uno storage S3 dove sono conservati i dati delle tabelle, suddivisi in quelle che chiamiamo micro-partizioni. Per semplicit\u00e0: se nella tabella ci sono transazioni, le micro-partizioni corrispondono ai giorni delle transazioni. Ogni giorno \u00e8 una micro-partizione separata, un file separato. E quando il database funziona in questo modo, paghi solo per lo spazio occupato dai dati. Inoltre, la tariffa per lo spazio \u00e8 molto bassa (soprattutto considerando la significativa compressione). Il servizio di metadati \u00e8 sempre attivo, ma per ottimizzare le query non richiede molte risorse, e possiamo considerarlo a costo zero. <\/p>\n<p>Immaginiamo ora che un utente si connetta al nostro database e invii una query SQL. La query SQL viene subito inviata al servizio di Metadata per l'elaborazione. Di conseguenza, ricevuta la query, questo servizio la analizza, insieme ai dati disponibili e alle autorizzazioni dell'utente, e, se tutto \u00e8 a posto, elabora un piano di esecuzione della query.<\/p>\n<p>Successivamente, il servizio avvia il lancio del cluster di calcolo. Un cluster di calcolo \u00e8 un insieme di server che esegue elaborazioni. Ci\u00f2 significa che pu\u00f2 includere 1 server, 2 server, 4, 8, 16, 32 \u2014 quanti ne desiderate. Inviate una richiesta e il lancio di questo cluster inizia immediatamente. Questo richiede davvero solo pochi secondi.<\/p>\n<p><img decoding=\"async\" alt=\"Verso i database serverless \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDopo che il cluster \u00e8 stato avviato, le micro-partizioni necessarie per elaborare la tua richiesta vengono copiate dal S3 nel cluster. Supponiamo che per eseguire una query SQL siano necessarie due partizioni da una tabella e una da un'altra. In questo caso, verranno copiate nel cluster solo le tre partizioni richieste, e non tutte le tabelle intere. \u00c8 proprio per questo motivo, e perch\u00e9 tutto \u00e8 situato all'interno dello stesso data center e collegato tramite canali molto veloci, che l'intero processo di trasferimento avviene rapidamente: in pochi secondi, molto raramente in minuti, a meno che non si tratti di richieste particolarmente complesse. Le micro-partizioni vengono quindi copiate nel cluster di calcolo, e, una volta completato, la query SQL viene eseguita su questo cluster. Il risultato di questa query pu\u00f2 essere una singola riga, pi\u00f9 righe o una tabella \u2014 che vengono inviate all'esterno all'utente, affinch\u00e9 possa scaricarle, visualizzarle nel proprio strumento di BI, o utilizzarle in altro modo.<\/p>\n<p>Ogni richiesta SQL non solo pu\u00f2 calcolare aggregati dai dati precedentemente caricati, ma pu\u00f2 anche caricare\/formare nuovi dati nel database. In altre parole, pu\u00f2 trattarsi di una richiesta che, ad esempio, esegue un'inserimento in un'altra tabella di nuovi record, il che porta alla creazione di una nuova partizione nel cluster di calcolo, che a sua volta viene automaticamente salvata in un unico storage S3.<\/p>\n<p>Lo scenario descritto sopra, dalla connessione dell'utente fino all'attivazione del cluster, il caricamento dei dati, l'esecuzione delle query e la ricezione dei risultati, \u00e8 fatturato a una tariffa per minuti di utilizzo del cluster di calcolo virtuale attivato, virtual warehouse. La tariffa varia in base alla regione AWS e alle dimensioni del cluster, ma in media \u00e8 di alcuni dollari all'ora. Un cluster di quattro macchine costa il doppio rispetto a uno di due macchine, e uno di otto macchine costa ancora il doppio. Sono disponibili opzioni da 16 o 32 macchine, a seconda della complessit\u00e0 delle query. Ma paghi solo per i minuti in cui il cluster \u00e8 effettivamente attivo, perch\u00e9, quando non ci sono richieste, puoi semplicemente allontanarti e dopo 5-10 minuti di attesa (parametro configurabile) si spegner\u00e0 automaticamente, liberando risorse e diventando gratuito.<\/p>\n<p>\u00c8 assolutamente realistico che tu invii una richiesta, il cluster si attivi, per cos\u00ec dire, in un minuto, poi un minuto per eseguire i calcoli, successivamente cinque minuti per lo spegnimento, e alla fine paghi solo per sette minuti di funzionamento di questo cluster, non per mesi o anni.<\/p>\n<p>Il primo scenario descriveva l'uso di Snowflake in modalit\u00e0 singolo utente. Ora immaginiamo che ci siano molti utenti, che si avvicina di pi\u00f9 a uno scenario reale.<\/p>\n<p>Supponiamo di avere molti analisti e report di Tableau che bombardano costantemente il nostro database con un gran numero di semplici query SQL analitiche.<\/p>\n<p>In aggiunta, ipotizziamo di avere data scientist ingegnosi che cercano di fare cose incredibili con i dati, operando con decine di terabyte e analizzando miliardi e trilioni di righe di dati. <\/p>\n<p>Per i due tipi di carico descritti sopra, Snowflake consente di attivare pi\u00f9 cluster di calcolo indipendenti di diversa potenza. Questi cluster di calcolo funzionano in modo indipendente ma condividono dati coerenti.<\/p>\n<p>Per un numero elevato di richieste leggere, \u00e8 possibile attivare 2-3 piccoli cluster, ognuno composto da, diciamo, 2 macchine. Questo comportamento \u00e8 realizzabile anche attraverso impostazioni automatiche. In altre parole, si pu\u00f2 semplicemente dire: \u00abSnowflake, avvia un piccolo cluster. Se il carico supera un certo parametro, avvia un secondo e un terzo simili. Quando il carico inizia a diminuire, spegni quelli in pi\u00f9\u00bb. Cos\u00ec, indipendentemente dal numero di analisti che accedono e iniziano a consultare i report, ci saranno sempre risorse sufficienti.<\/p>\n<p>D'altra parte, se gli analisti sono inattivi e nessuno consulta i report, i cluster possono essere completamente spenti, e non si paga per loro.<\/p>\n<p>Per le richieste pesanti (da parte dei Data Scientists), \u00e8 possibile attivare un cluster molto grande con circa 32 macchine. Questo cluster sar\u00e0 addebitato solo per i minuti e le ore in cui il vostro grosso comando \u00e8 in esecuzione.<\/p>\n<p>La possibilit\u00e0 descritta sopra consente di separare i carichi in cluster non solo su 2, ma anche su pi\u00f9 tipi di carico (ETL, monitoraggio, materializzazione dei report,\u2026).<\/p>\n<p>Riassumiamo riguardo a Snowflake. La piattaforma combina un'idea accattivante con un'implementazione funzionale. In ManyChat utilizziamo Snowflake per analizzare tutti i dati disponibili. Non abbiamo tre cluster come nell'esempio, ma tra 5 e 9, di diverse dimensioni. Abbiamo cluster convenzionali da 16 macchine, cluster da 2 macchine e anche super piccoli cluster da 1 macchina per alcune attivit\u00e0. Questi gestiscono efficacemente il carico e ci permettono di risparmiare significativamente.<\/p>\n<p>La piattaforma scalda con successo il carico di lettura e scrittura. Questa \u00e8 una grande differenza e una grande innovazione rispetto a \"Aurora\", che gestiva solo il carico di lettura. Snowflake consente di scalare anche il carico di scrittura con questi cluster computazionali. Come ho accennato, in ManyChat utilizziamo diversi cluster; i cluster piccoli e super piccoli sono principalmente utilizzati per ETL, per il caricamento dei dati. Gli analisti operano su cluster medi, che non sono affatto influenzati dal carico ETL, quindi lavorano molto velocemente. <\/p>\n<p>Pertanto, il database \u00e8 ben adatto per compiti OLAP. Tuttavia, sfortunatamente, non \u00e8 ancora applicabile ai carichi di lavoro OLTP. Innanzitutto, questo database \u00e8 colonnare, con tutte le conseguenze del caso. In secondo luogo, l'approccio stesso, in cui si attiva un cluster computazionale per ogni richiesta e si riversano i dati, purtroppo, non \u00e8 ancora sufficientemente veloce per carichi di lavoro OLTP. Attendere alcuni secondi per compiti OLAP \u00e8 normale, ma inaccettabile per OLTP; sarebbe meglio avere 100 ms, e ancor meglio \u2014 10 ms.<\/p>\n<h2>Risultato<\/h2>\n<p>\nUn database serverless \u00e8 possibile grazie alla separazione del database in parti Stateless e Stateful. Avrete notato che, in tutti gli esempi forniti, la parte Stateful \u00e8, per cos\u00ec dire, la memorizzazione delle micro-partizioni in S3, mentre Stateless riguarda l'ottimizzatore, la gestione dei metadati, il trattamento delle questioni di sicurezza, che possono essere attivate come servizi Stateless leggeri e indipendenti.<\/p>\n<p>L'esecuzione di query SQL pu\u00f2 essere vista anch'essa come servizi con uno stato leggero, che possono attivarsi in modalit\u00e0 serverless, come i cluster computazionali di Snowflake, scaricando solo i dati necessari, eseguendo la query e 'spegnendosi'.<\/p>\n<p>Le banche dati serverless di livello enterprise sono ora disponibili per l'uso e funzionano. Queste banche serverless sono gi\u00e0 pronte a gestire compiti OLAP. Purtroppo, per i compiti OLTP, vengono utilizzate\u2026 con delle problematiche, poich\u00e9 ci sono delle limitazioni. Da un lato, \u00e8 un aspetto negativo. Dall'altro, \u00e8 un'opportunit\u00e0. Forse qualcuno dei lettori trover\u00e0 un modo per rendere una banca dati OLTP completamente serverless, senza limitazioni Aurora.<\/p>\n<p>Spero che sia stato interessante. Per un futuro Serverless \ud83d\ude42<br \/>\n<br \/>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Verso banche dati senza server \u2014 come e perch\u00e9 | ProHoster","description":"Ciao a tutti! Mi chiamo Nikolai Golov. In passato ho lavorato in Avito e per sei anni ho gestito la Data Platform, occupandomi di tutte le banche: analitiche (Vertica, ClickHouse), in streaming e OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Durante questo periodo ho approfondito molte banche dati \u2014 delle pi\u00f9 diverse e insolite, e con casi d'uso non standard. Ora","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}