{"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 Lasten auf einem Highload-Projekt mit Hilfe von ElasticSearch","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, \u0425\u0430\u0431\u0440! Mein Name ist Maxim Vasiliev, ich arbeite als Analyst und Projektmanager bei FINCH. Heute m\u00f6chte ich Ihnen erz\u00e4hlen, wie wir mit Hilfe von ElasticSearch 15 Millionen Anfragen in 6 Minuten bearbeitet haben und die t\u00e4glichen Lasten auf der Website eines unserer Kunden optimieren konnten. Leider m\u00fcssen wir ohne Namen auskommen, da wir eine NDA haben; wir hoffen, dass der Inhalt des Artikels davon nicht leidet. Lass uns anfangen.<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 Anwendung unseres Kunden sicherstellen. Die Gesamtstruktur ist im Diagramm zu sehen:<\/p>\n<p><img decoding=\"async\" alt=\"Optimierung der Lasten auf einem Highload-Projekt mit Hilfe von ElasticSearch\" src=\"\/wp-content\/uploads\/2020\/05\/7bda10a9965163c2b175b501f50bc342.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIm Laufe der Arbeit verarbeiten wir eine gro\u00dfe Anzahl von Transaktionen: K\u00e4ufe, Auszahlungen, Benutzerkontenaktionen, f\u00fcr die wir viele Protokolle speichern, und au\u00dferdem importieren und exportieren wir diese Daten in externe Systeme. <\/p>\n<p>Es gibt auch R\u00fcckprozesse, bei denen wir Daten vom Kunden erhalten und diese an die Benutzer weitergeben. Au\u00dferdem gibt es auch Prozesse f\u00fcr die Abwicklung von Zahlungen und Bonussystemen.<\/p>\n<h2>Eine kurze Hintergrundgeschichte<\/h2>\n<p>\nUrspr\u00fcnglich haben wir PostgreSQL als einziges Datenspeicher verwendet. Seine Standardvorteile f\u00fcr Datenbanken: Transaktionen, ausgefeilte Abfragesprache, umfangreiche Integrationswerkzeuge; in Kombination mit guter Leistung haben sie unsere Bed\u00fcrfnisse lange Zeit erf\u00fcllt. <\/p>\n<p>Wir haben in Postgres absolut alle Daten gespeichert: von Transaktionen bis Nachrichten. Doch die Anzahl der Benutzer stieg, und damit auch die Anzahl der Anfragen.<\/p>\n<p><i>Zur Veranschaulichung: Die j\u00e4hrliche Anzahl der Sitzungen im Jahr 2017 nur auf der Desktop-Website betr\u00e4gt 131 Millionen. 2018 waren es 125 Millionen. 2019 wieder 130 Millionen. Wenn man noch 100-200 Millionen von der mobilen Version der Website und der mobilen Anwendung hinzuf\u00fcgt, ergibt das eine kolossale Anzahl von Anfragen. <\/i><\/p>\n<p>Mit dem Wachstum des Projekts konnte Postgres die Last nicht mehr bew\u00e4ltigen, wir kamen nicht hinterher \u2013 es gab eine gro\u00dfe Anzahl von unterschiedlichen Anfragen, f\u00fcr die wir nicht gen\u00fcgend Indizes erstellen konnten. <\/p>\n<p>Wir wussten, dass es notwendig war, andere Datenspeicher in Betracht zu ziehen, die unsere Bed\u00fcrfnisse abdecken und die Last von PostgreSQL nehmen w\u00fcrden. Elasticsearch und MongoDB wurden als m\u00f6gliche Varianten in Betracht gezogen. Letzteres weist in den folgenden Punkten Nachteile auf:<\/p>\n<ol>\n<li>Langsame Indizierungsgeschwindigkeit mit zunehmendem Datenvolumen in den Indizes. Bei Elastic h\u00e4ngt die Geschwindigkeit nicht vom Datenvolumen ab.<\/li>\n<li>Keine Volltextsuche<\/li>\n<\/ol>\n<p>\nSo haben wir uns f\u00fcr Elastic entschieden und uns auf den Umstieg vorbereitet. <\/p>\n<h2>Umstieg auf Elastic<\/h2>\n<p>\n1. Wir haben den Umstieg 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>Geo-Suche in einem bestimmten Umkreis von einem Punkt. Zum Beispiel, wenn der Nutzer sehen m\u00f6chte, welche Verkaufsstellen am n\u00e4chsten zu seinem Wohnort sind.<\/li>\n<li>Suche in einem bestimmten Quadrat \u2013 der Nutzer umrisse ein Quadrat auf der Karte, und ihm werden alle Punkte in diesem Umkreis angezeigt. <\/li>\n<li>Suche nach zus\u00e4tzlichen Filtern. Verkaufsstellen unterscheiden sich hinsichtlich des Sortiments <\/li>\n<\/ul>\n<p>\nWenn wir \u00fcber die Organisation sprechen, haben wir in Postgres die Datenquelle sowohl f\u00fcr die Karte als auch f\u00fcr Nachrichten, w\u00e4hrend in Elastic Snapshots der Originaldaten erstellt werden. Das Problem war, dass Postgres urspr\u00fcnglich mit der Suche nach allen Kriterien \u00fcberfordert war. Es gab viele Indizes, die sich auch \u00fcberlappten, weshalb der Planer in Postgres verwirrt war und nicht wusste, welchen Index er verwenden sollte. <\/p>\n<p>2. Als N\u00e4chstes kam die Nachrichtenrubrik. Auf der Website erscheinen t\u00e4glich Publikationen, damit der Nutzer im Informationsfluss nicht verloren geht, m\u00fcssen die Daten vor der Ausgabe sortiert werden. Dazu ist die Suche notwendig: Auf der Website kann man nach Text\u00fcbereinstimmung suchen und gleichzeitig zus\u00e4tzliche Filter aktivieren, da auch diese \u00fcber Elastic eingerichtet sind. <\/p>\n<p>3. Dann haben wir die Verarbeitung von Transaktionen verlagert. Nutzer k\u00f6nnen bestimmte Produkte auf der Website kaufen und an Gewinnspielen teilnehmen. Nach solchen K\u00e4ufen verarbeiten wir eine gro\u00dfe Menge an Daten, insbesondere an Wochenenden und Feiertagen. Zum Vergleich: An gew\u00f6hnlichen Tagen liegt die Anzahl der K\u00e4ufe bei 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 Nutzer warten nicht gerne mehrere Tage auf Ergebnisse. Mit Postgres sind solche Fristen nicht zu erreichen \u2013 wir erhielten oft Sperrungen, und w\u00e4hrend wir alle Anfragen bearbeiteten, konnten die Nutzer nicht \u00fcberpr\u00fcfen, ob sie Preise gewonnen hatten oder nicht. Das ist f\u00fcr das Gesch\u00e4ft nicht sonderlich angenehm, weshalb wir die Verarbeitung nach Elasticsearch verlagert haben.<\/p>\n<h2>Pulsation<\/h2>\n<p>\nAktuell sind die Updatesereignisse nach folgenden Bedingungen eingestellt:<\/p>\n<ol>\n<li>Verkaufsstellen. Sobald wir Daten aus einer externen Quelle erhalten, starten wir sofort das Update. <\/li>\n<li>Nachrichten. Sobald auf der Website eine Nachricht bearbeitet wird, wird sie automatisch an Elastic gesendet.<\/li>\n<\/ol>\n<p>\nHier sollte man nochmals die Vorteile von Elastic erw\u00e4hnen. In Postgres muss man w\u00e4hrend der Abfrage warten, bis alle Datens\u00e4tze korrekt verarbeitet sind. In Elastic kann man 10.000 Datens\u00e4tze senden und sofort mit der Arbeit beginnen, ohne warten zu m\u00fcssen, bis sich die Datens\u00e4tze auf alle Shards verteilt haben. Nat\u00fcrlich kann ein Shard oder eine Replica die Daten nicht sofort sehen, aber bald werden sie f\u00fcr alle verf\u00fcgbar sein.<\/p>\n<h2>Integrationsmethoden<\/h2>\n<p>\nEs gibt zwei Integrationsm\u00f6glichkeiten mit Elastic:<\/p>\n<ol>\n<li>\u00dcber den nativen Client \u00fcber TCP. Der native Treiber stirbt allm\u00e4hlich aus: Er wird nicht mehr unterst\u00fctzt, und seine Syntax ist sehr unhandlich. Daher verwenden wir ihn praktisch nicht und versuchen, ganz darauf zu verzichten.<\/li>\n<li>\u00dcber die HTTP-Schnittstelle, in der man sowohl JSON-Anfragen als auch die Syntax von Lucene verwenden kann. Letzteres ist die Text-Engine, die Elastic nutzt. In diesem Fall erhalten wir die M\u00f6glichkeit des Batch-Uploads \u00fcber JSON-Anfragen \u00fcber HTTP. Genau diese Option versuchen wir zu verwenden.<\/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-Uploads und der asynchronen API nutzen, was letztendlich eine hohe Leistung erm\u00f6glicht, die uns an Tagen gro\u00dfer Aktionen sehr geholfen hat (mehr dazu sp\u00e4ter).<\/p>\n<p>Einige Zahlen zum Vergleich: <\/p>\n<ul>\n<li>Speicherung von Benutzern, die Preise in Postgres in 20 Streams ohne Gruppierung erhalten haben: 460.713 Datens\u00e4tze in 42 Sekunden<\/li>\n<li>Elastic + reaktiver Client mit 10 Streams + Batch auf 1000 Elemente: 596.749 Datens\u00e4tze in 11 Sekunden<\/li>\n<li>Elastic + reaktiver Client mit 10 Streams + Batch auf 1000 Elemente: <b>23.801.684 Datens\u00e4tze in 4 Minuten<\/b><\/li>\n<\/ul>\n<p>\nJetzt haben wir einen Anfrage-Manager \u00fcber HTTP geschrieben, der JSON erstellt, sowohl Batch\/Non-Batch und diese \u00fcber jeden HTTP-Client sendet, unabh\u00e4ngig von der Bibliothek. Man kann auch w\u00e4hlen, ob man synchron oder asynchron Anfragen senden m\u00f6chte.<\/p>\n<p>In einigen Integrationen verwenden wir immer noch den offiziellen Transport-Client, aber das ist nur eine Frage des n\u00e4chsten Refactorings. F\u00fcr die Verarbeitung wird jedoch ein eigener Client verwendet, der auf dem Spring WebClient basiert.<\/p>\n<p><img decoding=\"async\" alt=\"Optimierung der Lasten auf einem Highload-Projekt mit Hilfe von 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 auf dem Projekt eine gro\u00dfe Aktion f\u00fcr die Benutzer statt \u2014 das ist das Highload, denn zu dieser Zeit arbeiten wir mit Zehntausenden von Millionen von Benutzern gleichzeitig.<\/p>\n<p>In der Regel treten Spitzenlasten an Feiertagen auf, aber diese Aktion ist ganz auf einem anderen Niveau. Im Jahr vor zwei Jahren haben wir am Tag der Aktion 27.580.890 Produkte verkauft. Die Daten wurden mehr als eine halbe Stunde lang verarbeitet, was bei den Benutzern Unannehmlichkeiten verursachte. Die Benutzer erhielten Preise f\u00fcr ihre Teilnahme, aber es wurde klar, dass der Prozess beschleunigt werden muss. <\/p>\n<p>Anfang 2019 haben wir beschlossen, dass wir ElasticSearch ben\u00f6tigen. Ein ganzes Jahr haben wir die Verarbeitung der erhaltenen Daten in Elastic und deren Bereitstellung \u00fcber die API der mobilen Anwendung und der Website organisiert. Im Ergebnis haben wir im n\u00e4chsten Jahr w\u00e4hrend der Aktion <b>15.131.783 Datens\u00e4tze in 6 Minuten verarbeitet. <\/b><\/p>\n<p>Da wir sehr viele Personen haben, die Produkte kaufen und an der Verlosung teilnehmen m\u00f6chten, ist dies eine vor\u00fcbergehende Ma\u00dfnahme. Derzeit senden wir aktuelle Informationen an Elastic, planen jedoch, Archivdaten aus den vergangenen Monaten in Postgres zu \u00fcbertragen, um ein permanentes Speicher zu schaffen. So vermeiden wir eine \u00dcberlastung des Elastic-Indexes, der ebenfalls seine Grenzen hat.<\/p>\n<h2>Fazit\/Ergebnisse<\/h2>\n<p>\nIm Moment haben wir alle Dienste, die wir wollten, auf Elastic \u00fcbertragen und jetzt eine Pause eingelegt. Derzeit bauen wir \u00fcber dem Hauptspeicher in Postgres einen Index in Elastic auf, der die Benutzerlast aufnimmt.<\/p>\n<p>In Zukunft planen wir, die Dienste zu \u00fcbertragen, wenn wir erkennen, dass die Datenanfragen zu vielf\u00e4ltig werden und \u00fcber eine unbegrenzte Anzahl von Spalten ausgesucht werden. Das ist bereits eine Aufgabe, die nicht f\u00fcr Postgres geeignet ist.<\/p>\n<p>Wenn wir einen Volltextsuche in der Funktionalit\u00e4t ben\u00f6tigen oder wenn wir viele verschiedene Suchkriterien haben, wissen wir bereits, dass wir das in Elastic \u00fcbertragen m\u00fcssen.<\/p>\n<h2>\u2318\u2318\u2318<\/h2>\n<p>\nDanke, dass Sie gelesen haben. Wenn in Ihrem Unternehmen ebenfalls ElasticSearch verwendet wird und Sie eigene Implementierungscases haben, erz\u00e4hlen Sie uns dar\u00fcber. Es w\u00e4re interessant zu erfahren, wie es bei anderen ist \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 5.0.1.1 - 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\/de\/blog\/administrirovanie\/optimizacziya-nagruzki-na-highload-proekte-s-pomoshhyu-elasticsearch\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\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 mithilfe von ElasticSearch | ProHoster","description":"Hallo, Habr! Mein Name ist Maxim Wassiljew, ich arbeite als Analyst und Projektmanager bei FINCH.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}