In Elastic Cloud Serverless passen wir die Anzahl der Replikate für Ihre Indizes automatisch basierend auf der Suchlast an, um eine optimale Abfrageleistung ohne manuelle Konfiguration zu gewährleisten. In diesem Blogbeitrag erklären wir, wie Replikate skaliert werden, wann das System sie hinzufügt oder entfernt, und was das für Ihre Indizes bedeutet.
Es ist zu voll auf der Party
Sie veranstalten eine Pizza-Party. Sie haben ein paar Freunde, die Ihnen beim Servieren helfen, jeder an verschiedenen Stellen im Raum stationiert. Sie geben jedem Freund eine Pizza und verteilen die Stücke an die hungrigen Gäste, sobald diese eintreffen.
Zunächst läuft alles reibungslos. Nach und nach treffen ein paar Gäste ein, Ihre Freunde servieren Snacks, alle sind zufrieden. Aber dann spricht sich herum, wie gut Ihre Sauerteigpizzen sind. Es klingelt ständig an der Tür. Die Gäste strömen herein. Bald formiert sich eine Menschenmenge um einen Ihrer Freunde, der eine Salamipizza in der Hand hält, die anscheinend jeder will.
Ihr Freund mit der Salamipizza ist überfordert. Die Gäste warten, werden ungeduldig und es hat sich eine lange Warteschlange gebildet. Währenddessen steht Ihr Freund mit einer Margherita-Pizza herum, und kaum jemand fragt nach einem Stück.
Und was nun?
Sie bestellen ein paar mehr Salamipizzen und geben sie an andere Freunde weiter. Jetzt haben drei Freunde Salamipizzen parat, nicht nur einer. Die Menge verteilt sich und plötzlich können dreimal so viele Gäste gleichzeitig bedient werden.
Ein paar Dinge werden deutlich, wenn Sie mehr Partys veranstalten:
- Nicht alle Pizzen sind gleich beliebt. Einige sind sehr gefragt, andere finden weniger Abnehmer. Sie benötigen keine zusätzlichen „Kopien“ unbeliebter Pizzen. Sie benötigen noch weitere der stark gefragten.
- Bestellen Sie mehr Pizzen, bevor die Warteschlange zu lang wird. Wenn Sie warten, bis Ihr Freund völlig überfordert ist und die Gäste verärgert abreisen, haben Sie zu lange gewartet. Es ist besser, eine zusätzliche Pizza zu holen, wenn Sie sehen, wie sich eine Menschenmenge bildet.
- Werfen Sie die Pizzen nicht zu schnell weg. Nur weil der Andrang am Salamistand für fünf Minuten zurückgegangen ist, heißt das nicht, dass der Ansturm vorbei ist. Vielleicht füllen die Leute nur ihre Getränke nach oder unterhalten sich miteinander (gibt es sowas heutzutage überhaupt noch?). Halten Sie die zusätzlichen Pizzen bereit. Wenn die Flaute eine Weile anhält, können Sie sie wegräumen.
- Sie können nur so viele Pizzen verteilen, wie Sie Freunde haben, die mithelfen. Wenn Ihnen nur vier Freunde helfen, ändern zehn Pizzen nichts am Ergebnis. Es können nur vier Menschen gleichzeitig bedient werden. Passen Sie die Anzahl der Pizzen an Ihre verfügbaren Helfer an.
- Wenn ein Freund geht, räumen Sie seine Pizza weg. Wenn einer Ihrer Freunde gehen muss, räumen Sie sofort seine Pizza weg. Sie können keine Pizzen unbeaufsichtigt stehen lassen. Geben Sie sie jemand anderem oder räumen Sie sie weg.
Von Pizzen bis zu Repliken
Ordnen wir dies wieder Elasticsearch zu.
In unserer Analogie sind Pizzen die Replikate (Kopien Ihrer Index-Shards), Ihre Freunde, die sie servieren, sind die Suchknoten, die hungrigen Gäste sind die Suchabfragen, und die beliebte Pizza, um die sich alle reißen, ist ein heißer Index mit hoher Suchlast.
Wenn der Suchverkehr auf einem bestimmten Index zunimmt, erstellen wir zusätzliche Replikate und verteilen diese auf Ihre Suchknoten. Jedes Replikat kann jede Abfrage für diesen Index beantworten, genau wie jeder Freund, der eine Salamipizza in der Hand hält, Pizzastücke verteilen kann. Mehr Replikate bedeuten einen höheren Durchsatz: Drei Replikate können dreimal so viele Abfragen pro Sekunde wie ein einzelnes Replikat verarbeiten.
Den Hunger messen
Bevor wir entscheiden, wie viele Pizzen wir bestellen, müssen wir wissen, wie hungrig das Publikum ist.
Elasticsearch verfolgt die Suchlast für jeden Shard. Es ist eine Metrik, die erfasst, wie viel Suchaktivität ein Shard verarbeitet. Wir aggregieren dies über alle Shards eines Indexes, um die gesamte Suchnachfrage zu verstehen.
Am wichtigsten ist die relative Suchlast: Welcher Anteil des gesamten Suchverkehrs Ihres Projekts trifft jeden Index? Wenn ein Index 60 % aller Suchanfragen erhält, während ein anderer 5 % bekommt, wissen wir, wo wir Kapazität hinzufügen müssen.
Die Berechnung hinter den Pizzen
Wir berechnen die optimale Anzahl der Replikate nach folgender Formel:
Wo:
- L = die relative Suchlast des Index (zwischen 0 und 1).
- N = die Anzahl der gewünschten Suchknoten in Ihrem Projekt.
- S = die Anzahl der Shards im Index.
- X = eine Schwelle, um Hotspots zu vermeiden (Standard: 0,5).
Ein Beispiel: vier Suchknoten, ein Index mit zwei primären Shards, die 80 % des Suchverkehrs erhalten:
Dieser Hot-Index erhält vier Replikate, die auf die Suchknoten verteilt werden.
Der Schwellenwert X (standardmäßig 0,5) ist wichtig. Wir warten nicht, bis ein Replikat völlig überlastet ist, sondern skalieren, wenn es die halbe Kapazität erreicht hat. Teilen Sie die zusätzliche Pizza aus, wenn Sie sehen, dass sich eine Menschenmenge bildet, nicht wenn die Gäste bereits gehen.
Schnell hochskalieren, langsam herunterskalieren
Wenn die Suchlast steigt, fügen wir sofort Repliken hinzu. Es gibt keinen Grund, die Nutzer warten zu lassen.
Wenn die Suchlast abfällt, warten wir eine Weile, bevor wir etwas unternehmen. Wir müssen eine konstant niedrige Nachfrage über einen Zeitraum von etwa 30 Minuten beobachten, bevor wir die Anzahl der Replikate reduzieren. (Dies dient dazu, mit Spitzenverkehr umzugehen, wobei ein ruhiger Moment nicht bedeutet, dass die Party vorbei ist.)
Das ist wichtig, weil das Hinzufügen eines Replikats Kosten verursacht. Das neue Replikat kopiert Daten und wärmt seine Caches auf, bevor es Abfragen effizient verarbeitet. Replikate zu voreilig zu entfernen bedeutet, dass Sie diese Anlaufkosten ständig erneut zahlen, weil der Traffic naturgemäß schwankt.
Berücksichtigung der Topologiegrenzen
Replikate können niemals die Anzahl der Suchknoten überschreiten. Mehr Replikate als Knoten zu haben, bringt keinen Vorteil (Sie können nur so viele Pizzen servieren, wie Sie Freunde haben, die beim Servieren der Pizzastücke helfen).
Wenn Knoten aus Ihrem Projekt entfernt werden, reduzieren wir die Anzahl der Replikate sofort entsprechend. Es wird nicht erst aufs Abkühlen gewartet, da es keine nicht zugewiesenen Replikate geben kann. Sobald ein Freund geht, räumen wir seine Pizza weg.
Das größere Serverless-Bild
Replikate für den Suchlastausgleich arbeiten mit anderen Systemen zur automatischen Skalierung zusammen:
- Automatische Suchskalierung passt die Anzahl der Suchknoten an (Anzahl der helfenden Freunde).
- Replikate für die Suchlastverteilung verteilen den Traffic durch Anpassung der Replikatzahlen pro Index (wie viele Pizzen jeder Sorte benötigt werden).
- Datenstrom-Autosharding optimiert die Shard-Anzahl für Schreibvorgänge (wie man jede Pizza aufteilt, beschrieben im vorherigen Beitrag).
Ein wichtiges Gestaltungsprinzip: Replikate für den Lastausgleich lösen nicht direkt die automatische Skalierung der Suche aus. Durch die Verteilung von Suchanfragen auf mehrere Replikate können Sie stattdessen die Ressourcenauslastung Ihrer Suchknoten erhöhen. Diese höhere Auslastung löst dann unsere vorhandene automatische Skalierungslogik aus, um bei Bedarf für zusätzliche Kapazitäten zu sorgen. Replikate für den Lastausgleich ermöglichen die automatische Skalierung und stellen sicher, dass Ihre Suchknoten tatsächlich genutzt werden, anstatt dass der gesamte Datenverkehr auf einem einzigen Replikat blockiert wird, während andere Knoten untätig bleiben.
Was das für Sie bedeutet
Sie müssen nicht vorhersagen, welche Indizes beliebt sein werden. Sie müssen die Replikate nicht manuell anpassen, wenn sich die Verkehrsmuster ändern. Sie müssen nicht um 3 Uhr morgens aufwachen, weil ein Ansturm Ihren am stärksten belasteten Index überfordert hat.
Das System überwacht, wo sich Warteschlangen bilden, und bestellt für diese Stellen mehr Pizzen. Kalte Indizes verschwenden keine Ressourcen für unnötige Replikate. Heiße Indizes erhalten die benötigte Kapazität. Ihr Budget fließt dort hin, wo es wichtig ist.
Fazit
Im Autosharding-Beitrag haben wir dafür gesorgt, dass Ihre Pizzen richtig aufgeteilt werden. Jetzt sorgen wir mit Replikaten für die Suchlastverteilung dafür, dass Sie genug Pizzen bereit haben, wenn die hungrigen Massen eintreffen.
Probieren Sie Elastic Cloud Serverless aus und lassen Sie uns die Pizza-Logistik übernehmen.




