{"id":82734,"date":"2020-05-24T13:42:22","date_gmt":"2020-05-24T11:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch"},"modified":"2020-05-24T13:42:22","modified_gmt":"2020-05-24T11:42:22","slug":"optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Ottimizzazione del carico su un progetto Highload con ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr! Mi chiamo Maxim Vasilyev, lavoro come analista e project manager in FINCH. Oggi vorrei raccontarvi come, grazie ad ElasticSearch, siamo riusciti a gestire 15 milioni di richieste in 6 minuti e ottimizzare i carichi quotidiani sul sito di un nostro cliente. Purtroppo, dobbiamo evitare di menzionare nomi specifici, poich\u00e9 abbiamo un NDA, ma speriamo che il contenuto dell'articolo non ne risenta. Iniziamo.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Come \u00e8 organizzato il progetto<\/h2>\n<p>\nSul nostro backend creiamo servizi che garantiscono il funzionamento dei siti web e dell'app mobile del nostro cliente. La struttura generale \u00e8 visibile nello schema:<\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione del carico su un progetto Highload con ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDurante il nostro lavoro gestiamo un gran numero di transazioni: acquisti, pagamenti, operazioni sui saldi degli utenti, per le quali conserviamo molti log, oltre a importare ed esportare questi dati verso sistemi esterni. <\/p>\n<p>Ci sono anche processi inversi, in cui riceviamo dati dal cliente e li trasferiamo agli utenti. Inoltre, esistono processi legati ai pagamenti e ai programmi di fidelizzazione.<\/p>\n<h2>Una breve introduzione<\/h2>\n<p>\nInizialmente, abbiamo utilizzato PostgreSQL come unico sistema di archiviazione dei dati. I suoi vantaggi standard come DBMS, inclusi le transazioni, un linguaggio di query avanzato e una vasta gamma di strumenti per l'integrazione, combinati con buone prestazioni, hanno soddisfatto le nostre esigenze per un periodo considerevole. <\/p>\n<p>Abbiamo memorizzato in Postgres tutti i dati: dalle transazioni alle notizie. Tuttavia, il numero di utenti cresceva, cos\u00ec come il numero delle richieste.<\/p>\n<p><i>Per dare un'idea, nel 2017 il numero annuale di sessioni sul sito desktop era di 131 milioni. Nel 2018 sono stati 125 milioni e nel 2019 di nuovo 130 milioni. Aggiungi altri 100-200 milioni dalla versione mobile del sito e dall'app mobile, e otterrai un'enorme quantit\u00e0 di richieste. <\/i><\/p>\n<p>Con la crescita del progetto, Postgres ha smesso di reggere il carico; non riuscivamo a stare al passo con l'aumento delle richieste, e c'era un gran numero di richieste varie per le quali non eravamo in grado di creare un numero sufficiente di indici. <\/p>\n<p>Abbiamo compreso la necessit\u00e0 di archivi dati alternativi che soddisfacessero le nostre esigenze e alleggerissero il carico su PostgreSQL. Tra le opzioni considerate c'erano Elasticsearch e MongoDB. Quest'ultmo presentava i seguenti svantaggi:<\/p>\n<ol>\n<li>Velocit\u00e0 di indicizzazione lenta con l'aumento del volume dei dati negli indici. Con Elastic, la velocit\u00e0 non dipende dal volume dei dati.<\/li>\n<li>Nessuna ricerca a testo libero<\/li>\n<\/ol>\n<p>\nCos\u00ec abbiamo scelto Elastic e ci siamo preparati per la migrazione. <\/p>\n<h2>Migrazione a Elastic<\/h2>\n<p>\n1. Abbiamo iniziato il passaggio con il servizio di ricerca punti vendita. Il nostro cliente ha complessivamente circa 70.000 punti vendita, e sono necessari diversi tipi di ricerca sul sito e nell'app:<\/p>\n<ul>\n<li>Ricerca di testo per nome della localit\u00e0<\/li>\n<li>Georicerche in un raggio specifico da un determinato punto. Ad esempio, se l'utente desidera vedere quali punti vendita sono pi\u00f9 vicini a casa sua.<\/li>\n<li>Ricerca all'interno di un quadrato specifico \u2013 l'utente disegna un quadrato sulla mappa, e gli vengono mostrati tutti i punti in quella area. <\/li>\n<li>Ricerca con filtri aggiuntivi. I punti vendita si differenziano l'uno dall'altro per assortimento. <\/li>\n<\/ul>\n<p>\nParlando dell'organizzazione, in Postgres abbiamo la fonte dei dati sia per la mappa che per le notizie, mentre in Elastic vengono effettuati snapshot dei dati originali. Il fatto \u00e8 che inizialmente Postgres non riusciva a cercare in base a tutti i criteri. Non solo c'erano molti indici, ma potevano anche sovrapporsi, quindi il planner di Postgres si confondeva e non sapeva quale indice utilizzare. <\/p>\n<p>2. Successivamente \u00e8 stato il turno della sezione notizie. Ogni giorno sul sito vengono pubblicate nuove informazioni e, affinch\u00e9 l'utente non si perda nel flusso di dati, \u00e8 necessario ordinare le informazioni prima della visualizzazione. Ecco perch\u00e9 \u00e8 necessario un sistema di ricerca: sul sito \u00e8 possibile cercare per corrispondenza testuale e, allo stesso tempo, attivare filtri aggiuntivi, poich\u00e9 anch'essi sono implementati tramite Elastic. <\/p>\n<p>3. Poi abbiamo trasferito l'elaborazione delle transazioni. Gli utenti possono acquistare un prodotto specifico sul sito e partecipare all'estrazione di premi. Dopo tali acquisti, gestiamo un grande volume di dati, specialmente durante i fine settimana e le festivit\u00e0. A titolo di confronto, nei giorni normali il numero degli acquisti \u00e8 di circa 1,5-2 milioni, mentre durante le festivit\u00e0 pu\u00f2 arrivare a 53 milioni.<\/p>\n<p>In questo modo, i dati devono essere elaborati rapidamente \u2014 gli utenti non amano aspettare giorni per un risultato. Con Postgres, tali tempi non sono raggiungibili \u2014 abbiamo spesso ricevuto blocchi, e mentre elaboravamo tutte le richieste, gli utenti non potevano verificare se avevano ricevuto premi o meno. Questo non \u00e8 molto piacevole per il business, quindi abbiamo trasferito l'elaborazione in Elasticsearch.<\/p>\n<h2>Frequenza<\/h2>\n<p>\nAttualmente, gli aggiornamenti sono impostati in modo eventi, secondo le seguenti condizioni:<\/p>\n<ol>\n<li>Punti vendita. Non appena riceviamo dati da una fonte esterna, avviamo immediatamente l'aggiornamento. <\/li>\n<li>Notizie. Non appena viene modificata una notizia sul sito, viene automaticamente inviata a Elastic.<\/li>\n<\/ol>\n<p>\nQui vale la pena ribadire i vantaggi di Elastic. In Postgres, durante l'invio della richiesta, si deve attendere che elabori correttamente tutti i record. In Elastic, \u00e8 possibile inviare 10.000 record e iniziare subito a lavorare, senza dover aspettare che i record siano distribuiti su tutti i Shard. Naturalmente, un certo Shard o Replica potrebbero non vedere i dati immediatamente, ma molto presto tutto sar\u00e0 disponibile.<\/p>\n<h2>Metodi di integrazione<\/h2>\n<p>\nCi sono 2 metodi di integrazione con Elastic:<\/p>\n<ol>\n<li>Attraverso il client nativo TCP. Il driver nativo sta lentamente scomparendo: non viene pi\u00f9 supportato e ha una sintassi molto scomoda. Pertanto, lo utilizziamo praticamente poco e cerchiamo di abbandonarlo del tutto.<\/li>\n<li>Attraverso l'interfaccia HTTP, dove \u00e8 possibile utilizzare sia richieste JSON che la sintassi Lucene. Quest'ultima \u00e8 un motore di testo utilizzato da Elastic. In questa modalit\u00e0, otteniamo la possibilit\u00e0 di Batch tramite richieste JSON su HTTP. Questo \u00e8 il metodo che cerchiamo di utilizzare.<\/li>\n<\/ol>\n<p>\nGrazie all'interfaccia HTTP, possiamo utilizzare librerie che offrono un'implementazione asincrona del client HTTP. Possiamo sfruttare il vantaggio del Batch e dell'API asincrona, il che ci fornisce elevate prestazioni, molto utili durante i giorni di grandi promozioni (di questo parleremo pi\u00f9 avanti).<\/p>\n<p>Alcuni numeri per il confronto: <\/p>\n<ul>\n<li>Salvataggio degli utenti premiati in Postgres con 20 thread senza raggruppamenti: 460713 registrazioni in 42 secondi.<\/li>\n<li>Elastic + client reattivo su 10 thread + batch di 1000 elementi: 596749 registrazioni in 11 secondi.<\/li>\n<li>Elastic + client reattivo su 10 thread + batch di 1000 elementi: <b>23801684 registrazioni in 4 minuti.<\/b><\/li>\n<\/ul>\n<p>\nRecentemente abbiamo sviluppato un gestore di richieste HTTP che costruisce JSON, sia in modalit\u00e0 Batch che non, e lo invia tramite qualsiasi client HTTP, indipendentemente dalla libreria. \u00c8 possibile scegliere anche di inviare le richieste in modo sincrono o asincrono.<\/p>\n<p>In alcune integrazioni utilizziamo ancora il client transport ufficiale, ma si tratta solo di un tema di prossima revisione. Tuttavia, per l'elaborazione utilizziamo un client proprietario basato su Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione del carico su un progetto Highload con ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Grande promozione<\/h2>\n<p>\nUna volta all'anno si tiene una grande promozione per gli utenti: \u00e8 l'Highload, poich\u00e9 in quel periodo lavoriamo con decine di milioni di utenti contemporaneamente.<\/p>\n<p>Di solito i picchi di carico si verificano durante le festivit\u00e0, ma questa promozione \u00e8 a un livello completamente diverso. Due anni fa, nel giorno della promozione, abbiamo venduto 27.580.890 articoli. I dati sono stati elaborati per oltre mezz'ora, il che ha causato disagi agli utenti. Gli utenti hanno ricevuto premi per la partecipazione, ma \u00e8 diventato chiaro che il processo doveva essere accelerato. <\/p>\n<p>All'inizio del 2019, abbiamo deciso che avevamo bisogno di ElasticSearch. Per un intero anno, abbiamo organizzato l'elaborazione dei dati ricevuti in Elastic e la loro fornitura all'API dell'app mobile e del sito web. Di conseguenza, l'anno successivo, durante una promozione, abbiamo elaborato <b>15.131.783 record in 6 minuti. <\/b><\/p>\n<p>Poich\u00e9 abbiamo molti interessati a comprare beni e partecipare a estrazioni di premi durante le promozioni, questa \u00e8 una misura temporanea. Attualmente inviamo informazioni aggiornate a Elastic, ma in futuro prevediamo di trasferire le informazioni archiviate dei mesi scorsi in Postgres come deposito permanente. Ci\u00f2 per non saturare l'indice Elastic, che ha anch'esso le sue limitazioni.<\/p>\n<h2>Conclusioni\/risultati<\/h2>\n<p>\nAttualmente abbiamo trasferito su Elastic tutti i servizi che volevamo e per ora abbiamo fatto una pausa. Adesso stiamo costruendo un indice in Elastic sopra il nostro principale deposito persistente in Postgres, che gestisce il carico degli utenti.<\/p>\n<p>In futuro prevediamo di trasferire i servizi se capiamo che le richieste di dati diventano troppo variegate e vengono cercate su un numero illimitato di colonne. Questo \u00e8 gi\u00e0 un compito non adatto a Postgres.<\/p>\n<p>Se avremo bisogno di una ricerca full-text nelle funzionalit\u00e0 o se ci saranno molti criteri di ricerca diversi, sappiamo gi\u00e0 che sar\u00e0 necessario tradurlo in Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nGrazie per aver letto. Se nella tua azienda utilizzate anche ElasticSearch e avete casi d'uso specifici, fatecelo sapere. Saremmo interessati a sapere come lavorano gli altri \ud83d\ude42<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/503214\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 15 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 6 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u043c\u0451\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 NDA, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82735,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82734","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=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 15 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 6 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u043c\u0451\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 NDA, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e\" \/>\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\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Highload-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 15 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 6 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u043c\u0451\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 NDA, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\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-05-24T11:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-24T11:42:22+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\udd47Ottimizzazione del carico in un progetto Highload con ElasticSearch | ProHoster","description":"Ciao, Habr! Mi chiamo Maxim Vasiliev e lavoro come analista e project manager in FINCH. Oggi vorrei raccontarvi come, grazie a ElasticSearch, siamo riusciti a elaborare 15 milioni di richieste in 6 minuti e ottimizzare i carichi giornalieri sul sito di uno dei nostri clienti. Sfortunatamente, dovremo fare a meno dei nomi poich\u00e9 abbiamo un NDA, speriamo che","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","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\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Highload-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u043e\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 FINCH. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ElasticSearch, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 15 \u043c\u043b\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 6 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u043c\u0451\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 NDA, \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","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-05-24T11:42:22+00:00","article:modified_time":"2020-05-24T11:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82734","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 15:32:25","updated":"2022-09-28 21:13:07"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/82734","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=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}