{"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\/de\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","title":{"rendered":"Optimierung der Last auf Highload-Projekten mit ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habr! Mein Name ist Maxim Vasiliev, ich arbeite als Analyst und Projektmanager bei FINCH. Heute m\u00f6chte ich erz\u00e4hlen, wie wir es mit Hilfe von ElasticSearch geschafft haben, 15 Millionen Anfragen in 6 Minuten zu verarbeiten und die t\u00e4glichen Lasten auf der Website eines unserer Kunden zu optimieren. Leider m\u00fcssen wir ohne Namen auskommen, da wir eine NDA haben. Wir hoffen, dass der Inhalt des Artikels darunter nicht leidet. Lass uns beginnen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Wie das Projekt aufgebaut ist<\/h2>\n<p>\nIn unserem Backend erstellen wir Dienste, die die Funktionsf\u00e4higkeit der Websites und der mobilen Anwendungen unseres Kunden gew\u00e4hrleisten. Die allgemeine Struktur ist in der folgenden Grafik zu sehen:<\/p>\n<p><img decoding=\"async\" alt=\"Optimierung der Last auf Highload-Projekten mit ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIm Verlauf unserer Arbeit verarbeiten wir eine gro\u00dfe Anzahl von Transaktionen: K\u00e4ufen, Auszahlungen, Operationen mit Benutzerkonten, zu denen wir viele Protokolle speichern, sowie Daten in externe Systeme importieren und exportieren. <\/p>\n<p>Es gibt auch umgekehrte Prozesse, bei denen wir Daten vom Kunden erhalten und an die Benutzer \u00fcbermitteln. Dar\u00fcber hinaus gibt es Prozesse, die sich mit Zahlungen und Bonusprogrammen befassen.<\/p>\n<h2>Kurze Vorgeschichte<\/h2>\n<p>\nUrspr\u00fcnglich nutzten wir PostgreSQL als prim\u00e4res Datenspeicher. Die Standardvorteile von DBMS: Transaktionen, eine ausgefeilte Abfragesprache und ein umfangreiches Integrationswerkzeug; in Verbindung mit einer soliden Leistung erf\u00fcllten sie unsere Anforderungen \u00fcber einen l\u00e4ngeren Zeitraum zufriedenstellend. <\/p>\n<p>Wir speicherten in Postgres alle Daten: von Transaktionen bis hin zu Nachrichten. Doch die Anzahl der Benutzer stieg, und damit auch die Menge der Anfragen.<\/p>\n<p><i>Zum Verst\u00e4ndnis: die j\u00e4hrliche Anzahl der Sitzungen im Jahr 2017 nur auf der Desktop-Website betrug 131 Millionen. Im Jahr 2018 waren es 125 Millionen. 2019 erneut 130 Millionen. F\u00fcgen Sie noch 100-200 Millionen von der mobilen Version der Website und der mobilen App hinzu, und Sie erhalten eine enorme Anzahl von Anfragen. <\/i><\/p>\n<p>Mit dem Wachstum des Projekts konnte Postgres die Last nicht mehr bew\u00e4ltigen, wir kamen nicht hinterher \u2014 es gab eine gro\u00dfe Vielfalt an Anfragen, f\u00fcr die wir nicht gen\u00fcgend Indizes erstellen konnten. <\/p>\n<p>Wir haben erkannt, dass es notwendig ist, andere Datenspeicher zu haben, die unseren Anforderungen entsprechen und die Belastung von PostgreSQL reduzieren. Als m\u00f6gliche Optionen haben wir Elasticsearch und MongoDB in Betracht gezogen. Letzteres fiel in den folgenden Punkten zur\u00fcck:<\/p>\n<ol>\n<li>Langsame Indizierungsgeschwindigkeit mit zunehmendem Volumen der Indizes. Bei Elastic h\u00e4ngt die Geschwindigkeit nicht vom Datenvolumen ab.<\/li>\n<li>Kein Volltextsuche.<\/li>\n<\/ol>\n<p>\nSo haben wir uns f\u00fcr Elastic entschieden und die Vorbereitungen f\u00fcr den Wechsel getroffen. <\/p>\n<h2>Wechsel zu Elastic<\/h2>\n<p>\n1. Wir haben den Wechsel mit dem Suchdienst f\u00fcr Verkaufsstellen begonnen. Unser Kunde hat insgesamt etwa 70.000 Verkaufsstellen, und es werden mehrere Suchtypen auf der Website und in der App ben\u00f6tigt:<\/p>\n<ul>\n<li>Textsuche nach dem Namen des Ortes.<\/li>\n<li>Geosuche in einem bestimmten Radius von einem Punkt. Zum Beispiel, wenn der Benutzer sehen m\u00f6chte, welche Verkaufsstellen am n\u00e4chsten zu seinem Wohnort sind.<\/li>\n<li>Suche in einem bestimmten Quadrat \u2013 der Benutzer umrei\u00dft ein Quadrat auf der Karte, und ihm werden alle Verkaufsstellen in diesem Radius angezeigt. <\/li>\n<li>Suche nach zus\u00e4tzlichen Filtern. Die Verkaufsstellen unterscheiden sich in ihrem Sortiment. <\/li>\n<\/ul>\n<p>\nWenn es um die Organisation geht, haben wir in Postgres Datenquellen sowohl f\u00fcr Karten als auch f\u00fcr Nachrichten, w\u00e4hrend in Elastic Schnappsch\u00fcsse der Originaldaten erstellt werden. Zu Beginn konnte Postgres nicht alle Suchkriterien bew\u00e4ltigen. Abgesehen von der Vielzahl an Indizes konnten sie auch \u00fcberlappen, weshalb der Planner in Postgres verwirrt war und nicht wusste, welchen Index er verwenden sollte. <\/p>\n<p>2. Der n\u00e4chste Schritt war der Nachrichtenbereich. Auf der Webseite erscheinen t\u00e4glich Ver\u00f6ffentlichungen, sodass Benutzer im Informationsfluss nicht verloren gehen. Die Daten m\u00fcssen vor der Ausgabe sortiert werden. Daf\u00fcr ist die Suche erforderlich: Auf der Webseite kann nach Text\u00fcbereinstimmungen gesucht werden, und zus\u00e4tzlich k\u00f6nnen weitere Filter aktiviert werden, da diese ebenfalls \u00fcber Elastic implementiert sind. <\/p>\n<p>3. Dann haben wir die Verarbeitung von Transaktionen verlagert. Benutzer k\u00f6nnen bestimmte Produkte auf der Webseite kaufen und an Verlosungen teilnehmen. Nach solchen K\u00e4ufen verarbeiten wir eine gro\u00dfe Menge an Daten, insbesondere an Wochenenden und Feiertagen. Zum Vergleich: An normalen Tagen betr\u00e4gt die Anzahl der K\u00e4ufe etwa 1,5-2 Millionen, w\u00e4hrend sie an Feiertagen bis zu 53 Millionen erreichen kann.<\/p>\n<p>Dabei m\u00fcssen die Daten in minimaler Zeit verarbeitet werden \u2013 die Nutzer m\u00f6gen es nicht, mehrere Tage auf Ergebnisse zu warten. Das l\u00e4sst sich mit Postgres nicht erreichen \u2013 wir haben oft Blockierungen erlebt, und w\u00e4hrend wir alle Anfragen bearbeitet haben, konnten die Nutzer nicht \u00fcberpr\u00fcfen, ob sie Preise erhalten haben oder nicht. Das ist f\u00fcr das Gesch\u00e4ft nicht sehr angenehm, weshalb wir die Verarbeitung nach Elasticsearch verlagert haben.<\/p>\n<h2>H\u00e4ufigkeit<\/h2>\n<p>\nDerzeit sind die Updates ereignisgesteuert und basieren auf folgenden Bedingungen:<\/p>\n<ol>\n<li>Verkaufspunkte. Sobald wir Daten aus einer externen Quelle erhalten, starten wir umgehend das Update. <\/li>\n<li>Nachrichten. Sobald eine Nachricht auf der Website bearbeitet wird, wird sie automatisch an Elastic gesendet.<\/li>\n<\/ol>\n<p>\nHier sollte nochmals auf die Vorteile von Elastic hingewiesen werden. Bei Postgres muss man beim Senden einer Anfrage warten, bis alle Datens\u00e4tze ordnungsgem\u00e4\u00df verarbeitet sind. Bei Elastic kann man 10.000 Datens\u00e4tze senden und sofort mit der Arbeit beginnen, ohne auf die Verteilung der Daten auf alle Shards zu warten. Sicherlich k\u00f6nnte ein Shard oder eine Replica die Daten nicht sofort sehen, aber sehr bald ist alles verf\u00fcgbar.<\/p>\n<h2>Integrationsmethoden<\/h2>\n<p>\nEs gibt 2 Integrationsmethoden mit Elastic:<\/p>\n<ol>\n<li>\u00dcber den nativen TCP-Client. Der native Treiber stirbt allm\u00e4hlich aus: er wird nicht mehr unterst\u00fctzt und hat eine sehr unhandliche Syntax. Daher verwenden wir ihn praktisch nicht und versuchen, vollst\u00e4ndig darauf zu verzichten.<\/li>\n<li>\u00dcber die HTTP-Schnittstelle, die sowohl JSON-Anfragen als auch die Lucene-Syntax verwenden kann. Letzteres ist ein Text-Engine, das von Elastic verwendet wird. In dieser Variante haben wir die M\u00f6glichkeit, Batch-Anfragen \u00fcber JSON \u00fcber HTTP zu stellen. Genau diese Variante versuchen wir zu nutzen.<\/li>\n<\/ol>\n<p>\nDank der HTTP-Schnittstelle k\u00f6nnen wir Bibliotheken verwenden, die eine asynchrone Implementierung des HTTP-Clients bieten. Wir k\u00f6nnen die Vorteile von Batch und der asynchronen API nutzen, was letztendlich eine hohe Leistung erm\u00f6glicht, die uns an Tagen gro\u00dfer Aktionen sehr geholfen hat (dar\u00fcber sp\u00e4ter mehr).<\/p>\n<p>Ein paar Zahlen zum Vergleich: <\/p>\n<ul>\n<li>Speicherung von Nutzern, die Preise in Postgres erhalten haben, mit 20 Threads ohne Gruppierung: 460713 Datens\u00e4tze in 42 Sekunden.<\/li>\n<li>Elastic + reaktiver Client mit 10 Threads + Batch mit 1000 Elementen: 596749 Datens\u00e4tze in 11 Sekunden.<\/li>\n<li>Elastic + reaktiver Client mit 10 Threads + Batch mit 1000 Elementen: <b>23801684 Datens\u00e4tze in 4 Minuten.<\/b><\/li>\n<\/ul>\n<p>\nJetzt haben wir einen HTTP-Anforderungsmanager geschrieben, der JSON generiert, sowohl im Batch- als auch im Non-Batch-Modus, und \u00fcber jeden HTTP-Client, unabh\u00e4ngig von der Bibliothek, sendet. Es kann auch ausgew\u00e4hlt werden, ob die Anfragen synchron oder asynchron gesendet werden.<\/p>\n<p>In einigen Integrationen verwenden wir immer noch den offiziellen Transport-Client, aber das ist nur eine Frage der n\u00e4chsten Refactoring-Phase. F\u00fcr die Verarbeitung wird jedoch ein eigener Client verwendet, der auf Spring WebClient basiert.<\/p>\n<p><img decoding=\"async\" alt=\"Optimierung der Last auf Highload-Projekten mit ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/112bf3261c93ce585d8559b420e79f64.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Gro\u00dfe Aktion<\/h2>\n<p>\nEinmal im Jahr findet im Projekt eine gro\u00dfe Aktion f\u00fcr die Benutzer statt \u2014 das ist das Highload-Event, da wir zu dieser Zeit mit zig Millionen Benutzern gleichzeitig arbeiten.<\/p>\n<p>Normalerweise treten Lastspitzen an Feiertagen auf, aber diese Aktion ist v\u00f6llig anders. Vor zwei Jahren haben wir am Tag der Aktion 27.580.890 Produkte verkauft. Die Datenverarbeitung dauerte \u00fcber eine halbe Stunde, was bei den Benutzern zu Unannehmlichkeiten f\u00fchrte. Die Benutzer erhielten Preise f\u00fcr ihre Teilnahme, aber es wurde klar, dass der Prozess schneller gestaltet werden muss. <\/p>\n<p>Anfang 2019 entschieden wir, dass wir ElasticSearch ben\u00f6tigen. Ein ganzes Jahr lang organisierten wir die Verarbeitung der erhaltenen Daten in Elastic und deren Bereitstellung \u00fcber die API f\u00fcr die mobile Anwendung und die Website. Letztendlich haben wir im folgenden Jahr w\u00e4hrend einer Aktion <b>15 131 783 Datens\u00e4tze in 6 Minuten verarbeitet. <\/b><\/p>\n<p>Da viele an unserem Produkt und an der Teilnahme an Gewinnspielen interessiert sind, ist dies eine vor\u00fcbergehende Ma\u00dfnahme. Derzeit senden wir aktuelle Informationen an Elastic, planen jedoch, die archivierten Informationen der vergangenen Monate in Postgres zu \u00fcbertragen, um einen permanenten Speicher zu schaffen. So vermeiden wir es, den Elastic-Index zu verunreinigen, der ebenfalls seine eigenen Einschr\u00e4nkungen hat.<\/p>\n<h2>Fazit\/Schlussfolgerungen<\/h2>\n<p>\nBis jetzt haben wir alle gew\u00fcnschten Services in Elastic \u00fcbertragen und haben vorerst eine Pause eingelegt. Derzeit bauen wir einen Index in Elastic, der auf dem Hauptspeicher in Postgres basiert und die Benutzerlast \u00fcbernimmt.<\/p>\n<p>Zuk\u00fcnftig planen wir, Services zu migrieren, wenn wir erkennen, dass die Datenanfragen zu vielf\u00e4ltig werden und \u00fcber eine unbegrenzte Anzahl von Spalten gesucht wird. Das ist dann eine Aufgabe, die nicht mehr f\u00fcr Postgres geeignet ist.<\/p>\n<p>Wenn wir eine Volltextsuche in der Funktionalit\u00e4t ben\u00f6tigen oder wenn wir viele verschiedene Suchkriterien haben, wissen wir bereits, dass dies in Elastic \u00fcbersetzt werden muss.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nDanke, dass Sie gelesen haben. Wenn in Ihrem Unternehmen auch ElasticSearch verwendet wird und Sie eigene Implementierungsf\u00e4lle haben, erz\u00e4hlen Sie uns davon. Es w\u00e4re interessant zu erfahren, wie es bei anderen aussieht \ud83d\ude42<br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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\/de\/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\udd47Optimierung der Last auf einem Highload-Projekt mit ElasticSearch | ProHoster","description":"Hallo, Habr! Mein Name ist Maxim Vasiliev, ich arbeite als Analyst und Projektmanager bei FINCH. Heute m\u00f6chte ich erz\u00e4hlen, wie wir mit Hilfe von ElasticSearch 15 Millionen Anfragen in 6 Minuten bearbeitet und die t\u00e4glichen Lasten auf der Website eines unserer Kunden optimiert haben. Leider m\u00fcssen wir ohne Namen auskommen, da wir eine NDA haben, wir hoffen, dass...","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/82734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=82734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/82734\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/82735"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=82734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=82734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=82734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}