Locust.io: Steuern des Parameters "Anfrage pro Sekunde"
Ich habe versucht, meinen API-Server mithilfe von Locust.io auf rechneroptimierten EC2-Instanzen zu laden. Es bietet eine einfach zu konfigurierende Option zum Einstellen desaufeinanderfolgende Anforderungswartezeit undnzahl gleichzeitiger Benutz. In der Theorie, rps = Wartezei X # _ Benutzer. Beim Testen wird diese Regel jedoch für sehr niedrige Schwellenwerte von @ aufgehobe # _ Benutzer (in meinem Experiment ungefähr 1200 Benutzer). Die Variablen hatch_rate, # _ of_slaves, auch in einemverteilte Testeinstellung hatte wenig bis gar keine Auswirkung auf das rps.
Experiment info
Der Test wurde auf einem C3.4x AWS EC2-Rechenknoten (AMI-Image) mit 16 vCPUs, einer allgemeinen SSD und 30 GB RAM durchgeführt. Während des Tests lag die maximale CPU-Auslastung bei 60% (abhängig von der Schraffurrate - die die gleichzeitig ausgeführten Prozesse steuert) und blieb durchschnittlich unter 30%.
Locust.io
setup: Verwendet pyzmq und wird mit jedem vCPU-Core als Slave eingerichtet. Einrichtung einer einzelnen POST-Anforderung mit einem Anforderungshauptteil von ~ 20 Byte und einem Antworthauptteil von ~ 25 Byte. Anforderungsfehlerrate: <1% mit einer durchschnittlichen Antwortzeit von 6 ms.
variables: Zeit zwischen aufeinanderfolgenden Anforderungen auf 450 ms (min: 100 ms und max: 1000 ms), Schraffurrate auf komfortable 30 pro Sekunde und RPS gemessen durch Variieren von # _ Benutzer.
Der RPS folgt der für bis zu 1000 Benutzer vorhergesagten Gleichung. Zunehmendes # _ Benutzer hat danach abnehmende Renditen mit einer Obergrenze von ungefähr 1200 Benutzern. # _ Benutzer hier ist nicht die unabhängige Variable, die das @ ändeWartezei wirkt sich auch auf den RPS aus. Das Ändern der Versuchsanordnung in eine 32-Kerne-Instanz (c3.8x-Instanz) oder in eine 56-Kerne-Instanz (in einer verteilten Anordnung) wirkt sich jedoch überhaupt nicht auf den RPS aus.
So wirklich, wie kann man den RPS steuern? Gibt es etwas offensichtliches, was ich hier vermisse?