{"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 database senza server \u2014 come e perch\u00e9","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao a tutti! Mi chiamo Nikolaj Golov. In passato ho lavorato per Avito e per sei anni ho guidato la Data Platform, occupandomi di tutti i database: analitici (Vertica, ClickHouse), streaming e OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). In questo periodo ho studiato un gran numero di database \u2014 dei pi\u00f9 vari e insoliti, e con casi d'uso non standard.<\/p>\n<p>Attualmente lavoro in ManyChat. In sostanza, \u00e8 una startup \u2014 nuova, ambiziosa e in rapida crescita. E quando sono entrato in azienda, \u00e8 sorto il classico quesito: \"Quali database sul mercato delle DBMS e dei database dovrebbe considerare una giovane startup?\". <\/p>\n<p>In questo articolo, basato sulla mia presentazione al <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">festival online RIT++2020<\/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 database senza server \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 nel 2020<\/h2>\n<p>\nSiamo nel 2020, guardandomi intorno ho notato tre tipi di database. <\/p>\n<p>Il primo tipo \u2014 <b>database OLTP classici<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Sono stati scritti molto tempo fa, ma rimangono attuali, perch\u00e9 ben conosciuti dalla comunit\u00e0 di sviluppatori.<\/p>\n<p>Il secondo tipo \u2014 <b>database degli \"anni 2000\".<\/b>Hanno cercato di allontanarsi dai modelli classici rinunciando a SQL, alle strutture tradizionali e all'ACID, grazie all'aggiunta di sharding incorporato e di altre funzionalit\u00e0 attraenti. Per 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, perch\u00e9 si sono dimostrate estremamente pratiche per determinate applicazioni. Questi database li etichetter\u00f2 con il termine ombrello NOSQL.<\/p>\n<p>\"Gli anni 2000\" sono finiti, ci siamo abituati ai database NOSQL, e il mondo, dal mio punto di vista, ha fatto il passo successivo \u2014 verso <b>database gestiti<\/b>. Questi database hanno un nucleo simile a quello dei classici database OLTP o dei nuovi NoSQL. Ma non hanno bisogno di DBA e DevOps e girano su server gestiti nel cloud. Per lo sviluppatore, \u00e8 \"semplicemente un database\", che funziona da qualche parte, e come \u00e8 stato installato sul server, chi ha configurato il server e chi lo aggiorna, non interessa a nessuno.<\/p>\n<p>Esempi di tali database:<\/p>\n<ul>\n<li>AWS RDS \u2014 un'interfaccia gestita su PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB \u2014 un'alternativa AWS a un database basato su documenti, simile a Redis e MongoDB.<\/li>\n<li>Amazon Redshift \u2014 un database analitico gestito.<\/li>\n<\/ul>\n<p>\nAlla base ci sono vecchi database, ma rielaborati in un ambiente gestito, senza necessit\u00e0 di lavorare con l'hardware. <\/p>\n<p><i>Nota. Gli esempi sono stati presi per l'ambiente AWS, ma anche i loro equivalenti esistono in Microsoft Azure, Google Cloud, o Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \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 in tutto ci\u00f2? Nel 2020, nulla di tutto questo.<\/p>\n<h2>Concetto Serverless<\/h2>\n<p>\nLa vera novit\u00e0 sul mercato nel 2020 \u00e8 rappresentata dalle soluzioni serverless o senza server.<\/p>\n<p>Prover\u00f2 a spiegare cosa significa con l'esempio di un normale servizio o di un'applicazione backend.<br \/>\nPer distribuire un'applicazione backend tradizionale, acquistiamo o noleggiamo 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>Esiste un modo diverso? Con i servizi serverless, s\u00ec.<\/p>\n<p>Qual \u00e8 il punto di questo approccio: non ci sono server, nemmeno un'istanza virtuale in affitto nel cloud. Per distribuire il servizio, copiamo il codice (funzioni) in un repository e pubblichiamo un endpoint. In seguito, paghiamo solo per ogni chiamata a questa funzione, ignorando completamente l'hardware su cui viene eseguita.<\/p>\n<p>Prover\u00f2 a illustrare questo approccio con delle immagini.<br \/>\n<img decoding=\"async\" alt=\"Verso database senza server \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 certo carico. Alziamo due istanze: server fisici o istanze in AWS. Queste istanze ricevono richieste esterne, che vengono elaborate l\u00ec. <\/p>\n<p>Come si vede nell'immagine, i server sono utilizzati in modo diverso. Uno \u00e8 utilizzato al 100%, ricevendo due richieste, mentre l'altro solo al 50% \u2014 in parte inattivo. Se arrivano non tre richieste, ma 30, l'intero sistema non regger\u00e0 il carico e inizier\u00e0 a rallentare.<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Distribuzione senza server<\/b>. In un ambiente serverless, un servizio simile non ha istanze n\u00e9 server. Esiste un certo pool di risorse pronte \u2014 piccoli container Docker preparati con il codice della funzione distribuita. Il sistema riceve richieste esterne e per ciascuna di esse il framework serverless attiva un piccolo container con il codice: elabora proprio quella richiesta e poi elimina il container.<\/p>\n<p>Una richiesta \u2014 un container attivato, 1000 richieste \u2014 1000 container. E la distribuzione su server fisici \u00e8 gi\u00e0 compito del fornitore di cloud. Questa \u00e8 completamente gestita dal framework serverless. In questo concetto, paghiamo per ogni chiamata. Ad esempio, se arriva una chiamata al giorno \u2014 paghiamo per una chiamata, se ne arrivano un milione al minuto \u2014 paghiamo per un milione. O al secondo, anche questo succede.<\/p>\n<p>Il concetto di pubblicazione di una funzione serverless si adatta a un servizio stateless. Se invece hai bisogno di un servizio statefull, allora aggiungiamo un database al servizio. In questo caso, quando si tratta di gestire lo stato, ciascuna funzione statefull legge e scrive semplicemente nel database. Inoltre, si pu\u00f2 utilizzare un database di uno qualsiasi dei tre tipi descritti all'inizio dell'articolo.<\/p>\n<p>Qual \u00e8 il limite comune a tutti questi database? Sono i costi per un server cloud o fisico utilizzato continuamente (o per pi\u00f9 server). Non importa se utilizziamo un database classico o gestito, se c'\u00e8 un 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 data center. Se abbiamo un database classico, paghiamo per master e slave. Se si tratta di un database shardato ad alta richiesta, paghiamo per 10, 20 o 30 server, e i costi sono costanti.<\/p>\n<p>La presenza di server riservati costantemente nella struttura dei costi \u00e8 stata in passato considerata un male necessario. I database tradizionali presentano anche altre complessit\u00e0, come i limiti sul numero di connessioni, la scalabilit\u00e0 limitata e il consenso geo-distribuito: alcune di queste possono essere risolte in determinati database, ma non tutte insieme e non in modo perfetto.<\/p>\n<h2>Database serverless - teoria<\/h2>\n<p>\nDomanda del 2020: \u00e8 possibile rendere un database serverless? Tutti hanno sentito parlare di backend serverless... proviamo allora a rendere serverless anche il database?<\/p>\n<p>Questo sembra strano, perch\u00e9 un database \u00e8 un servizio statefull, non molto adatto per un'infrastruttura serverless. Inoltre, lo stato di un database \u00e8 estremamente grande: gigabyte, terabyte e nei database analitici anche petabyte. Non \u00e8 cos\u00ec semplice farlo funzionare in container Docker leggeri.<\/p>\n<p>D'altra parte, praticamente tutti i database moderni sono un'enorme quantit\u00e0 di logica e componenti: transazioni, verifica dell'integrit\u00e0, procedure, dipendenze relazionali e molta logica. Una parte piuttosto grande della logica del database richiede uno stato abbastanza ridotto. I gigabyte e i terabyte sono utilizzati direttamente solo da una piccola parte della logica del database, quella che riguarda l'esecuzione diretta delle query.<\/p>\n<p>Di conseguenza, l'idea: 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 potrebbe apparire la suddivisione del database in parti Stateful e Stateless attraverso esempi pratici.<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \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 richieste SQL al database. Questo \u00e8 uno schema classico di lavoro di un data warehouse. <\/p>\n<p>In questo schema, per convenzione, l'ETL viene eseguito una sola volta. Da quel momento in poi, \u00e8 necessario pagare continuamente per i server su cui opera il database con i dati caricati dall'ETL, in modo da avere un luogo dove inviare le richieste. <\/p>\n<p>Esaminiamo un approccio alternativo, realizzato nel database AWS Athena Serverless. Qui non ci sono macchine dedicate in modo permanente su cui sono archiviati i dati caricati. Al contrario:<\/p>\n<ul>\n<li>L'utente invia una richiesta SQL ad Athena. L'ottimizzatore di Athena analizza la richiesta SQL e cerca nello storage dei metadati (Metadata) i dati specifici necessari per soddisfare la richiesta.<\/li>\n<li>L'ottimizzatore, sulla base dei dati raccolti, estrae i dati necessari da fonti esterne in uno storage temporaneo (database temporaneo).<\/li>\n<li>Nel database temporaneo viene eseguita la richiesta SQL dell'utente e il risultato viene restituito all'utente. <\/li>\n<li>Il database temporaneo viene svuotato e le risorse vengono liberate.<\/li>\n<\/ul>\n<p>In questa architettura paghiamo solo per il processo di esecuzione della richiesta. Nessuna richiesta \u2014 nessun costo.<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto \u00e8 un approccio operativo e viene realizzato non solo in Athena Serverless, ma anche in Redshift Spectrum (in AWS).<\/p>\n<p>Dall'esempio di Athena, \u00e8 evidente che il database Serverless funziona con richieste reali di decine e centinaia di terabyte di dati. Per centinaia di terabyte saranno necessari centinaia di server, ma non dobbiamo pagare per loro \u2014 paghiamo per le richieste. La velocit\u00e0 di ogni richiesta \u00e8 (molto) bassa rispetto ai database analitici specializzati come Vertica, ma non paghiamo i periodi di inattivit\u00e0.<\/p>\n<p>Tale database \u00e8 applicabile per richieste analitiche ad-hoc rare. Ad esempio, quando decidiamo spontaneamente di verificare un'ipotesi su un gigantesco volume di dati. Per questi casi, Athena \u00e8 perfetta. Per le richieste regolari, questo sistema diventa costoso. In tal caso, \u00e8 consigliabile memorizzare i dati in una soluzione specializzata. <\/p>\n<h2>Serverless per soluzioni OLTP<\/h2>\n<p>\nNel precedente esempio sono stati trattati compiti OLAP (analitici). Ora esaminiamo compiti OLTP.<\/p>\n<p>Immaginiamo un PostgreSQL o un MySQL scalabile. Creiamo un'istanza gestita di PostgreSQL o MySQL con risorse minime. Quando l'istanza subir\u00e0 un carico maggiore, collegheremo repliche aggiuntive su cui distribuiamo parte del carico di lettura. Se non ci sono richieste e carico \u2014 disconnettiamo 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: il proxy fleet accoglie le richieste delle applicazioni esterne. Vedendo un aumento del carico, assegna risorse computazionali da istanze minime precedentemente attivate \u2014 la connessione avviene il pi\u00f9 rapidamente possibile. Anche la disconnessione delle istanze avviene in modo simile.<\/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 operativa, processore e disco minimi. Di conseguenza, un master e le altre repliche sono solo in lettura.<\/p>\n<p>Il numero di Aurora Capacity Units attivi \u00e8 un parametro configurabile. Il numero minimo pu\u00f2 essere uno o zero (in tal caso, il database non funziona se non ci sono richieste).<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \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 proxy fleet attiva gli Aurora Capacity Units, aumentando le risorse di sistema. La possibilit\u00e0 di aumentare e diminuire le risorse consente al sistema di \"giocare\" con le risorse: disattivare automaticamente singoli ACU (sostituendoli con nuovi) e applicare su quelle disattivate tutti gli aggiornamenti attuali.<\/p>\n<p>Il database Aurora Serverless pu\u00f2 scalare il carico di lettura. Ma nella documentazione non viene detto esplicitamente. Potrebbe sorgere l'impressione che possano attivare un multi-master. Non c'\u00e8 alcun trucco. <\/p>\n<p>Questo database \u00e8 molto adatto per non spendere enormi 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 si verifica improvvisamente un carico, ad esempio dopo una conferenza o una campagna pubblicitaria, le folle di persone accedono al sito e il carico aumenta drasticamente, Aurora Serverless accetta automaticamente questo carico e collega rapidamente le risorse mancanti (ACU). Successivamente, la conferenza termina, tutti dimenticano il prototipo, i server (ACU) si spengono e le spese scendono a zero \u2014 comodo.<\/p>\n<p>Questa soluzione non \u00e8 adatta per carichi di lavoro stabili e elevati, perch\u00e9 non \u00e8 in grado di scalare il carico di scrittura. Tutti questi collegamenti e disconnessioni delle risorse avvengono nel momento noto come 'scale point' \u2014 il momento in cui il database non \u00e8 mantenuto da una transazione, n\u00e9 da tabelle temporanee. Ad esempio, nel corso della settimana, lo scale point potrebbe non verificarsi affatto, e il database lavora con risorse fisse e semplicemente non pu\u00f2 n\u00e9 espandersi n\u00e9 contrarsi. <\/p>\n<p>Non c'\u00e8 magia \u2014 \u00e8 un normale PostgreSQL. Ma il processo di aggiunta e disconnessione delle macchine \u00e8 parzialmente automatizzato.<\/p>\n<h2>Serverless by design<\/h2>\n<p>\nAurora Serverless \u00e8 un vecchio database riscritto per il cloud, per sfruttare i singoli vantaggi del Serverless. E ora parler\u00f2 di un database che \u00e8 stato inizialmente scritto per il cloud, secondo l'approccio serverless \u2014 Serverless-by-design. \u00c8 stato subito sviluppato senza presupporre che funzionasse su server fisici.<\/p>\n<p>Questo database si chiama Snowflake. Esso comprende tre blocchi chiave.<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \u2014 come e perch\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl primo \u00e8 il blocco dei metadati. \u00c8 un servizio in-memory veloce che si occupa di sicurezza, metadati, transazioni e ottimizzazione delle query (nell'illustrazione a sinistra).<\/p>\n<p>Il secondo blocco \u00e8 composto da numerosi cluster computazionali virtuali per i calcoli (nell'illustrazione \u2014 un insieme di cerchi blu).<\/p>\n<p>Il terzo blocco \u00e8 un sistema di archiviazione dati basato su S3. S3 \u00e8 uno spazio di archiviazione oggetti illimitato in AWS, simile a un Dropbox illimitato per le aziende.<\/p>\n<p>Vediamo come funziona Snowflake, ipotizzando un avvio a freddo. Cio\u00e8, il database esiste, i dati sono stati caricati, ma non ci sono query in corso. Di conseguenza, se non ci sono query sul database, abbiamo un servizio Metadata in-memory rapido attivo (il primo blocco). E abbiamo uno storage S3 dove si trovano i dati delle tabelle, suddivisi in cosiddette micro-partizioni. Per semplificare: se nella tabella ci sono affari, le micro-partizioni corrispondono ai giorni degli affari. 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). Anche il servizio di metadati funziona costantemente, ma per ottimizzare le query non servono molte risorse, quindi si pu\u00f2 considerare un servizio condizionatamente gratuito. <\/p>\n<p>Immaginiamo ora che un utente abbia effettuato una richiesta SQL al nostro database. La richiesta SQL viene immediatamente inviata per l'elaborazione al servizio Metadata. Di conseguenza, ricevuta la richiesta, questo servizio analizza la richiesta, i dati disponibili, i diritti dell'utente e, se tutto \u00e8 in ordine, elabora un piano di esecuzione per la query.<\/p>\n<p>Successivamente, il servizio avvia un cluster di calcolo. Un cluster di calcolo \u00e8 un insieme di server che eseguono calcoli. Cio\u00e8, questo cluster pu\u00f2 contenere 1 server, 2 server, 4, 8, 16, 32 \u2014 quanti ne vuoi. Invi un'query e questo cluster inizia a essere avviato istantaneamente. Ci\u00f2 richiede realmente pochi secondi.<\/p>\n<p><img decoding=\"async\" alt=\"Verso database senza server \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 iniziano a essere copiate nel cluster da S3. Supponiamo, ad esempio, che per eseguire una query SQL siano necessarie due partizioni da una tabella e una da un'altra. In tal caso, verranno copiate nel cluster solo le tre partizioni richieste, e non tutte le tabelle in blocco. Per questo motivo, e proprio perch\u00e9 tutto si trova all'interno di un unico data center collegato con canali molto veloci, l'intero processo di trasferimento avviene in modo molto rapido: in pochi secondi, raramente in minuti, se non si tratta di query eccezionalmente complesse. Le micro-partizioni vengono quindi copiate nel cluster di calcolo e, al termine, la query SQL viene eseguita su questo cluster di calcolo. Il risultato di questa query pu\u00f2 consistere in una singola riga, diverse righe o una tabella \u2014 che vengono restituite all'utente per essere scaricate, visualizzate nel proprio strumento BI o utilizzate in altro modo.<\/p>\n<p>Ogni query SQL pu\u00f2 non solo calcolare aggregati dai dati precedentemente caricati, ma anche caricare\/formare nuovi dati nel database. Ad esempio, pu\u00f2 trattarsi di una query che esegue l'inserimento di nuovi record in un'altra tabella, il che porta alla creazione di una nuova partizione nel cluster di calcolo, che viene automaticamente salvata nell'archivio S3 unico.<\/p>\n<p>Lo scenario descritto sopra, dall'arrivo dell'utente fino all'avvio del cluster, al caricamento dei dati, all'esecuzione delle query e all'ottenimento dei risultati, viene fatturato a una tariffa in base ai minuti di utilizzo del cluster di calcolo virtuale attivato, il warehouse virtuale. La tariffa varia a seconda della zona AWS e delle 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, 32 macchine, a seconda della complessit\u00e0 delle query. Ma paghi solo per i minuti in cui il cluster \u00e8 realmente attivo, perch\u00e9 quando non ci sono query, puoi semplicemente rilassarti e, dopo 5-10 minuti di attesa (un parametro configurabile), si spegner\u00e0 da solo, liberer\u00e0 risorse e diventer\u00e0 gratuito.<\/p>\n<p>\u00c8 assolutamente realistico uno scenario in cui inviate una richiesta, il cluster si attiva, per cos\u00ec dire, dopo un minuto, impiega un altro minuto per calcolare, poi cinque minuti per spegnersi, e alla fine pagate per sette minuti di lavoro di questo cluster, e non per mesi o anni.<\/p>\n<p>Il primo scenario descriveva l'uso di Snowflake in modalit\u00e0 monoutente. Ora immaginiamo che ci siano molti utenti, che \u00e8 gi\u00e0 pi\u00f9 vicino a uno scenario reale.<\/p>\n<p>Supponiamo di avere molti analisti e report di Tableau che bombardano continuamente il nostro database con un grande numero di semplici query SQL analitiche.<\/p>\n<p>Oltre a ci\u00f2, supponiamo che abbiamo data scientist ingegnosi che cercano di fare cose stravaganti con i dati, operando su decine di terabyte, analizzando miliardi e trilioni di righe di dati. <\/p>\n<p>Per i due tipi di carico descritti sopra, Snowflake consente di attivare diversi cluster di calcolo indipendenti di varie potenze. Questi cluster di calcolo operano in modo indipendente, ma con dati coerenti condivisi.<\/p>\n<p>Per un gran numero di richieste leggere, \u00e8 possibile attivare 2-3 piccoli cluster, ciascuno di dimensioni, per cos\u00ec dire, 2 macchine. Questo comportamento \u00e8 realizzabile anche tramite impostazioni automatiche. Cio\u00e8, dici: \"Snowflake, attiva un piccolo cluster. Se il carico su di esso supera un certo parametro, attiva un secondo e un terzo simile. Quando il carico inizia a diminuire, spegni i cluster superflui.\" In questo modo, indipendentemente da quanti analisti arrivano e iniziano a visualizzare i report, ci sono sempre risorse sufficienti.<\/p>\n<p>Tuttavia, se gli analisti dormono e non si visualizzano report, i cluster possono spegnersi completamente, e smettete di pagare per essi.<\/p>\n<p>Inoltre, per le richieste pesanti (da parte dei data scientist), potete attivare un cluster molto grande di circa 32 macchine. Anche questo cluster sar\u00e0 pagato solo per i minuti e le ore in cui il vostro gigante sta eseguendo una query.<\/p>\n<p>La possibilit\u00e0 descritta sopra consente di suddividere i carichi non solo in 2, ma anche in pi\u00f9 tipi di carico (ETL, monitoraggio, materializzazione dei report,\u2026).<\/p>\n<p>Faremo un riepilogo su Snowflake. La base combina un'idea elegante e una realizzazione funzionale. In ManyChat utilizziamo Snowflake per analizzare tutti i dati disponibili. I nostri cluster non sono tre, come nell'esempio, ma da 5 a 9, di varie dimensioni. Abbiamo cluster convenzionali di 16 macchine, cluster di 2 macchine, e anche piccolissimi cluster di 1 macchina per alcune attivit\u00e0. Questi distribuiscono efficacemente il carico e ci permettono di risparmiare significativamente.<\/p>\n<p>La base scala efficacemente il carico di lettura e scrittura. Questa \u00e8 una differenza enorme e un grande progresso rispetto alla 'Aurora', che gestiva solo il carico di lettura. Snowflake consente di scalare anche il carico di scrittura con questi cluster computazionali. Come ho gi\u00e0 accennato, in ManyChat utilizziamo diversi cluster, i cluster pi\u00f9 piccoli e super piccoli sono principalmente impiegati per l'ETL, per il caricamento dei dati. Gli analisti operano su cluster medi, che non sono affatto influenzati dal carico dell'ETL, quindi funzionano molto rapidamente. <\/p>\n<p>Di conseguenza, la base \u00e8 ben adatta per le attivit\u00e0 OLAP. Tuttavia, sfortunatamente, non \u00e8 ancora adatta per i carichi OLTP. In primo luogo, questa base \u00e8 a colonne, con tutte le conseguenze del caso. In secondo luogo, l'approccio stesso, in cui per ogni richiesta si solleva un cluster computazionale e lo si alimenta di dati, purtroppo non \u00e8 ancora sufficientemente veloce per i carichi OLTP. Secondi di attesa per attivit\u00e0 OLAP sono accettabili, mentre per le attivit\u00e0 OLTP sono inaccettabili; sarebbe meglio 100 ms, e ancora meglio 10 ms.<\/p>\n<h2>Risultato<\/h2>\n<p>\nLe basi database senza server sono possibili grazie alla separazione della base in parti Stateless e Stateful. Avrete notato che in tutti gli esempi forniti, la parte Stateful \u00e8, per cos\u00ec dire, lo storage delle micro-partizioni in S3, mentre la parte Stateless \u00e8 l'ottimizzatore, il lavoro con i meta-dati, e la gestione delle questioni di sicurezza, che possono essere sollevate come servizi leggeri Stateless indipendenti.<\/p>\n<p>L'esecuzione delle query SQL pu\u00f2 essere considerata anch'essa come servizi con uno stato leggero, che possono apparire in modalit\u00e0 senza server, come i cluster computazionali di Snowflake, scaricare solo i dati necessari, eseguire la query e \"spegnersi\".<\/p>\n<p>Le basi serverless di livello produttivo sono gi\u00e0 disponibili per l'uso, e funzionano. Queste basi serverless sono gi\u00e0 pronte ad affrontare compiti OLAP. Sfortunatamente, per i compiti OLTP sono utilizzate... con delle sfide, poich\u00e9 ci sono delle limitazioni. Da un lato, questo \u00e8 un problema. Ma, dall'altro lato, \u00e8 un'opportunit\u00e0. Forse qualche lettore trover\u00e0 un modo per rendere completamente serverless una base OLTP, senza limitazioni di Aurora.<\/p>\n<p>Spero che vi sia piaciuto. Verso 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 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\/it\/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=\"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.\" \/>\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\udd47In cammino verso basi di dati senza server \u2014 come e perch\u00e9 | ProHoster","description":"Ciao a tutti! Mi chiamo Nikolai Golov.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}