Kontext:
Ich habe einen Cluster von H-Hosts, die eine API bereitstellen, wobei jeder Host die API mithilfe einer (konstanten) Anzahl von (Python-, aber irrelevanten) Prozessen bereitstellt (asynchron, aber ansonsten auch irrelevant).
Ich habe Zugriff auf folgende Informationen (als Grafiken):
- die durchschnittliche (pro Sekunde) Anzahl der Anfragen des gesamten Clusters, R(t)
- Die mittlere Latenz (Zeit, die zum Verarbeiten einer Anfrage benötigt wird) L=
L(t)
, die ebenfalls mit der Zeit variiert.- Der Mittelwert liegt über Sekunden und über alle Prozesse/Hosts hinweg
- Die Anzahl der Hosts
H(t)
, die sich aufgrund der automatischen Skalierung im Laufe der Zeit ändert.
Es kann ein Fehler auftreten, der einen gesamten Prozess und alle darin enthaltenen In-Process-Abfragen beendet, die verbleibenden Prozesse jedoch weiter funktionieren.
- Die Fehlerrate (z. B. in #Abstürzen pro Tag pro Host) ist bekannt und konstant, sagen wir
E
.
Problem: Ich möchte die (erwartete?) Anzahl der fehlgeschlagenen Abfragen infolge eines Absturzes berechnen.
Annahmen:
- Die Abfragen werden gleichmäßig auf Hosts und Prozesse verteilt.
- Ein fehlgeschlagener Prozess wird „sofort“ wiederhergestellt
Einige Gedanken:
- Zu jeder Sekunde beträgt die Anzahl derneuAbfragen sollten sein
R(t) / [P*H(t)]
. - Dabei werden die noch nicht abgeschlossenen „laufenden“ Abfragen nicht berücksichtigt. Ich denke, ich möchte dies irgendwie mit L(t) in Verbindung bringen ...
- Der Kehrwert der Anzahl neuer Abfragen pro Sekunde,
[P*H(t)] / R(t)
, sollte kleiner als seinL(t)
, da es sonst bedeuten würde, dass das Abschließen einer Abfrage länger dauert als das Empfangen einer neuen, was letztendlich zu einer Überlastung der Server führen würde (was nicht passiert!).