{"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\/sv\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Optimering av belastning p\u00e5 h\u00f6glasters projekt med hj\u00e4lp av ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr! Jag heter Maxim Vasiliev, och jag arbetar som analytiker och projektledare p\u00e5 FINCH. Idag skulle jag vilja ber\u00e4tta hur vi med hj\u00e4lp av ElasticSearch lyckades bearbeta 15 miljoner f\u00f6rfr\u00e5gningar p\u00e5 6 minuter och optimera de dagliga belastningarna p\u00e5 en av v\u00e5ra kunders webbplatser. Tyv\u00e4rr f\u00e5r vi klara oss utan namn, eftersom vi har ett NDA, men vi hoppas att inneh\u00e5llet i artikeln inte p\u00e5verkas av detta. L\u00e5t oss b\u00f6rja.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Hur projektet \u00e4r uppbyggt<\/h2>\n<p>\nI v\u00e5r backend skapar vi tj\u00e4nster som s\u00e4kerst\u00e4ller funktionaliteten p\u00e5 v\u00e5ra kunders webbplatser och mobilapplikationer. Den allm\u00e4nna strukturen kan ses i schemat:<\/p>\n<p><img decoding=\"async\" alt=\"Optimering av belastning p\u00e5 h\u00f6glasters projekt med hj\u00e4lp av ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnder arbetets g\u00e5ng hanterar vi ett stort antal transaktioner: k\u00f6p, utbetalningar, anv\u00e4ndarbalanser, f\u00f6r vilka vi sparar mycket loggar, samt importerar och exporterar dessa data till externa system. <\/p>\n<p>Det finns ocks\u00e5 omv\u00e4nda processer, n\u00e4r vi f\u00e5r data fr\u00e5n kunden och \u00f6verf\u00f6r dem till anv\u00e4ndarna. Dessutom finns det processer f\u00f6r att hantera betalningar och bonusprogram.<\/p>\n<h2>Kort bakgrund<\/h2>\n<p>\nUrsprungligen anv\u00e4nde vi PostgreSQL som den enda datalagringen. Dess standardf\u00f6rdelar f\u00f6r databashanteringssystem: support f\u00f6r transaktioner, en avancerad datavalsspr\u00e5k och ett brett utbud av integrationsverktyg, kombinerat med god prestanda, tillfredsst\u00e4llde v\u00e5ra behov under l\u00e5ng tid. <\/p>\n<p>Vi lagrade alla data i Postgres: fr\u00e5n transaktioner till nyheter. Men antalet anv\u00e4ndare v\u00e4xte, och d\u00e4rmed antalet f\u00f6rfr\u00e5gningar.<\/p>\n<p><i>F\u00f6r att ge en uppfattning, det \u00e5rliga antalet sessioner 2017 var endast p\u00e5 den station\u00e4ra webbplatsen \u2014 131 miljoner. Under 2018 \u2014 125 miljoner. 2019 igen 130 miljoner. L\u00e4gg till ytterligare 100-200 miljoner fr\u00e5n den mobila versionen av webbplatsen och mobilapplikationen, s\u00e5 f\u00e5r ni ett enormt antal f\u00f6rfr\u00e5gningar. <\/i><\/p>\n<p>Med projektets tillv\u00e4xt slutade Postgres att klara av belastningen, vi h\u00e4ngde inte med \u2014 en stor m\u00e4ngd olika f\u00f6rfr\u00e5gningar d\u00f6k upp, f\u00f6r vilka vi inte kunde skapa tillr\u00e4ckligt m\u00e5nga index. <\/p>\n<p>Vi ins\u00e5g att vi beh\u00f6vde andra datalagringsl\u00f6sningar som kunde tillgodose v\u00e5ra behov och avlasta PostgreSQL. Vi \u00f6verv\u00e4gde Elasticsearch och MongoDB som m\u00f6jliga alternativ. Den senare f\u00f6rlorade p\u00e5 f\u00f6ljande punkter:<\/p>\n<ol>\n<li>L\u00e5ngsam indexeringshastighet med \u00f6kande datavolymer i indexen. Hos Elastic beror hastigheten inte p\u00e5 datam\u00e4ngden.<\/li>\n<li>Ingen fulltexts\u00f6kning<\/li>\n<\/ol>\n<p>\nS\u00e5 vi valde Elastic och f\u00f6rberedde oss f\u00f6r \u00f6verg\u00e5ngen. <\/p>\n<h2>\u00d6verg\u00e5ng till Elastic<\/h2>\n<p>\n1. Vi b\u00f6rjade \u00f6verg\u00e5ngen med s\u00f6ktj\u00e4nsten f\u00f6r f\u00f6rs\u00e4ljningsst\u00e4llen. V\u00e5r kund har totalt cirka 70 000 f\u00f6rs\u00e4ljningsst\u00e4llen och det kr\u00e4vs flera typer av s\u00f6kningar p\u00e5 webbplatsen och i appen:<\/p>\n<ul>\n<li>Textuell s\u00f6kning efter namn p\u00e5 t\u00e4torten<\/li>\n<li>Geos\u00f6kning inom ett visst radie fr\u00e5n en punkt. Till exempel, om anv\u00e4ndaren vill se vilka f\u00f6rs\u00e4ljningsst\u00e4llen som ligger n\u00e4rmast hen.<\/li>\n<li>S\u00f6kning inom ett angivet omr\u00e5de \u2013 anv\u00e4ndaren ritar upp ett omr\u00e5de p\u00e5 kartan, och alla punkter inom den radien visas. <\/li>\n<li>S\u00f6kning med ytterligare filter. F\u00f6rs\u00e4ljningsst\u00e4llena skiljer sig \u00e5t i sitt sortiment. <\/li>\n<\/ul>\n<p>\nOm vi pratar om organisationen, s\u00e5 har vi en datak\u00e4lla i Postgres b\u00e5de f\u00f6r kartan och nyheterna, medan snapshot:ar g\u00f6rs av originaldata i Elastic. Po\u00e4ngen \u00e4r att Postgres fr\u00e5n b\u00f6rjan inte klarade av att s\u00f6ka enligt alla kriterier. Det fanns m\u00e5nga index som kunde krocka med varandra, vilket gjorde att Postgres planl\u00e4ggare blev f\u00f6rvirrad och inte visste vilket index som skulle anv\u00e4ndas. <\/p>\n<p>2. N\u00e4sta steg var nyhetsavsnittet. P\u00e5 webbplatsen publiceras nya artiklar varje dag, och f\u00f6r att anv\u00e4ndaren inte ska tappa tr\u00e5den i informationsfl\u00f6det beh\u00f6ver data sorteras innan de presenteras. D\u00e4rf\u00f6r beh\u00f6vs s\u00f6kningen: p\u00e5 webbplatsen kan man s\u00f6ka efter textmatchning, och dessutom koppla in ytterligare filter, eftersom dessa ocks\u00e5 \u00e4r implementerade genom Elastic. <\/p>\n<p>3. Sedan flyttade vi \u00f6ver behandlingen av transaktioner. Anv\u00e4ndare kan k\u00f6pa specifika produkter p\u00e5 webbplatsen och delta i t\u00e4vlingar. Efter s\u00e5dana k\u00f6p bearbetar vi en stor m\u00e4ngd data, s\u00e4rskilt under helger och h\u00f6gtider. F\u00f6r j\u00e4mf\u00f6relse, om antalet k\u00f6p under vanliga dagar ligger runt 1,5-2 miljoner, kan siffran under helger n\u00e5 upp till 53 miljoner.<\/p>\n<p>Data m\u00e5ste behandlas p\u00e5 minimal tid \u2014 anv\u00e4ndare tycker inte om att v\u00e4nta flera dagar p\u00e5 resultatet. Genom Postgres g\u00e5r s\u00e5dana tider helt enkelt inte att uppn\u00e5 \u2014 vi fick ofta l\u00e5sningar, och medan vi bearbetade alla f\u00f6rfr\u00e5gningar kunde anv\u00e4ndarna inte kontrollera om de hade vunnit priser eller inte. Det \u00e4r inte s\u00e4rskilt trevligt f\u00f6r f\u00f6retag, d\u00e4rf\u00f6r flyttade vi behandlingen till Elasticsearch.<\/p>\n<h2>Frekvens<\/h2>\n<p>\nNu \u00e4r uppdateringarna inst\u00e4llda att ske automatiskt under f\u00f6ljande villkor:<\/p>\n<ol>\n<li>F\u00f6rs\u00e4ljningsst\u00e4llen. S\u00e5 snart vi f\u00e5r data fr\u00e5n en extern k\u00e4lla b\u00f6rjar vi direkt en uppdatering. <\/li>\n<li>Nyheter. S\u00e5 snart en nyhet redigeras p\u00e5 webbplatsen skickas den automatiskt till Elastic.<\/li>\n<\/ol>\n<p>\nH\u00e4r b\u00f6r vi \u00e5terigen n\u00e4mna f\u00f6rdelarna med Elastic. I Postgres m\u00e5ste man v\u00e4nta p\u00e5 att alla poster hanteras vid varje f\u00f6rfr\u00e5gan. I Elastic kan man skicka 10 000 poster och b\u00f6rja arbeta med en g\u00e5ng, utan att v\u00e4nta p\u00e5 att posterna sprids \u00f6ver alla Shards. Visst kan en viss Shard eller Replica kanske inte se data direkt, men det blir snart tillg\u00e4ngligt.<\/p>\n<h2>Integrationsmetoder<\/h2>\n<p>\nDet finns 2 s\u00e4tt att integrera med Elastic:<\/p>\n<ol>\n<li>Via inbyggd klient \u00f6ver TCP. Den inbyggda drivrutinen f\u00f6rsvinner gradvis: den f\u00e5r inget st\u00f6d l\u00e4ngre och har en mycket obekv\u00e4m syntax. D\u00e4rf\u00f6r anv\u00e4nder vi den knappt och f\u00f6rs\u00f6ker helt \u00f6verge den.<\/li>\n<li>Via HTTP-gr\u00e4nssnittet, d\u00e4r b\u00e5de JSON-f\u00f6rfr\u00e5gningar och Lucene-syntax kan anv\u00e4ndas. Det sistn\u00e4mnda \u00e4r en textmotor som anv\u00e4nds av Elastic. I s\u00e5 fall f\u00e5r vi m\u00f6jlighet till Batch via JSON-f\u00f6rfr\u00e5gningar \u00f6ver HTTP. Det \u00e4r just den h\u00e4r metoden vi f\u00f6rs\u00f6ker anv\u00e4nda.<\/li>\n<\/ol>\n<p>\nTack vare HTTP-gr\u00e4nssnittet kan vi anv\u00e4nda bibliotek som erbjuder asynkron implementering av HTTP-klienten. Vi kan dra nytta av Batch och asynkront API, vilket slutligen ger h\u00f6g prestanda, vilket har varit till stor hj\u00e4lp under dagar med stora kampanjer (mer om detta nedan)<\/p>\n<p>Lite siffror f\u00f6r j\u00e4mf\u00f6relse: <\/p>\n<ul>\n<li>Sparande av anv\u00e4ndare som fick priser i Postgres med 20 str\u00f6mmar utan gruppering: 460713 poster p\u00e5 42 sekunder<\/li>\n<li>Elastic + reaktiv klient med 10 str\u00f6mmar + batch p\u00e5 1000 element: 596749 poster p\u00e5 11 sekunder<\/li>\n<li>Elastic + reaktiv klient med 10 str\u00f6mmar + batch p\u00e5 1000 element: <b>23801684 poster p\u00e5 4 minuter<\/b><\/li>\n<\/ul>\n<p>\nNu har vi skrivit en HTTP-f\u00f6rfr\u00e5gningshanterare som bygger JSON, som Batch\/inte Batch och skickar via vilken HTTP-klient som helst oavsett bibliotek. Det g\u00e5r ocks\u00e5 att v\u00e4lja att skicka f\u00f6rfr\u00e5gningar synkront eller asynkront.<\/p>\n<p>I vissa integrationer anv\u00e4nder vi fortfarande den officiella transportklienten, men det \u00e4r bara en fr\u00e5ga om n\u00e4ra refaktorisering. F\u00f6r bearbetning anv\u00e4nds en egen klient baserad p\u00e5 Spring WebClient.<\/p>\n<p><img decoding=\"async\" alt=\"Optimering av belastning p\u00e5 h\u00f6glasters projekt med hj\u00e4lp av ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>St\u00f6rre kampanj<\/h2>\n<p>\nEn g\u00e5ng om \u00e5ret h\u00e5lls en stor kampanj f\u00f6r anv\u00e4ndare p\u00e5 projektet \u2013 det \u00e4r just den stora belastningen, eftersom vi d\u00e5 arbetar med tiotals miljoner anv\u00e4ndare samtidigt.<\/p>\n<p>Vanligtvis sker belastningstoppar under helgdagar, men denna kampanj \u00e4r av en helt annan niv\u00e5. F\u00f6r tv\u00e5 \u00e5r sedan s\u00e5lde vi 27 580 890 enheter av varan p\u00e5 kampanjdagen. Data behandlades i mer \u00e4n en halvtimme, vilket orsakade problem f\u00f6r anv\u00e4ndarna. Anv\u00e4ndarna fick priser f\u00f6r att delta, men det blev tydligt att processen beh\u00f6vde snabba upp. <\/p>\n<p>I b\u00f6rjan av 2019 beslutade vi att vi beh\u00f6vde ElasticSearch. Under ett helt \u00e5r organiserade vi bearbetningen av de mottagna uppgifterna i Elastic och deras utdelning via API:er till mobilapplikationen och webbplatsen. Resultatet blev att vi under n\u00e4sta \u00e5r under kampanjen bearbetade <b>15 131 783 poster p\u00e5 6 minuter. <\/b><\/p>\n<p>Eftersom vi har ett stort antal personer som vill k\u00f6pa varor och delta i lotterier i kampanjerna, \u00e4r detta en tillf\u00e4llig \u00e5tg\u00e4rd. Just nu skickar vi aktuell information till Elastic, men vi planerar att i framtiden flytta arkivinformation fr\u00e5n tidigare m\u00e5nader till Postgres som en permanent lagringsl\u00f6sning. Detta f\u00f6r att undvika att \u00f6verbelasta Elastic-indexet, som ocks\u00e5 har sina begr\u00e4nsningar.<\/p>\n<h2>Slutsats\/Resultat<\/h2>\n<p>\nF\u00f6r n\u00e4rvarande har vi flyttat alla tj\u00e4nster vi ville ha till Elastic och vi har gjort en paus h\u00e4r. Just nu bygger vi en index ovanf\u00f6r huvudlagringsl\u00f6sningen i Postgres, som tar emot anv\u00e4ndarbelastningen.<\/p>\n<p>I framtiden planerar vi att flytta tj\u00e4nster om vi m\u00e4rker att databehovet blir alltf\u00f6r m\u00e5ngfaldigt och s\u00f6ks \u00f6ver ett obegr\u00e4nsat antal kolumner. Det \u00e4r redan en uppgift som inte l\u00e4mpar sig f\u00f6r Postgres.<\/p>\n<p>Om vi beh\u00f6ver en fulltexts\u00f6kning i funktionaliteten eller om vi f\u00e5r m\u00e5nga olika s\u00f6kkriterier vet vi redan att det m\u00e5ste \u00f6verf\u00f6ras till Elastic.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nTack f\u00f6r att ni l\u00e4ste. Om ni ocks\u00e5 anv\u00e4nder ElasticSearch i ert f\u00f6retag och har egna implementeringsfall, ber\u00e4tta g\u00e4rna. Det skulle vara intressant att veta hur andra g\u00f6r \ud83d\ude42<br \/>\n<br \/>K\u00e4lla: <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 5.0.4 - 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.\" \/>\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\/sv\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/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\udd47Optimering av belastningen p\u00e5 ett Highload-projekt med hj\u00e4lp av ElasticSearch | ProHoster","description":"Hej, Habr! Jag heter Maxim Vasiliev, jag arbetar som analytiker och projektledare p\u00e5 FINCH.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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.","og:url":"https:\/\/prohoster.info\/sv\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/82734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}