2014-08-27 18 views
8

Wo war die Frage:Wie kann der Durchsatz mit RabbitMQ begrenzt werden?

Wir verwenden RabbitMQ als Aufgabenwarteschlange. Eine der spezifischen Aufgaben - Senden von Nachrichten an das soziale Netzwerk von Vkontakte. Sie haben eine maximale Anzahl an Anfragen pro Sekunde und diese Grenze hängt von Ihrer Anwendungsgröße ab. Nur 3 Anrufe für App mit weniger als 100k Menschen und so weiter. Also müssen wir die Anfrage künstlich auf den Service beschränken. Jetzt ist diese Logik anwendungsbasiert. Es ist einfach, während Sie nur einen Arbeiter pro solche Warteschlange verwenden können, stellen Sie einfach so etwas wie Schlaf (300ms) ein und seien Sie ruhig. Aber wenn Sie N Arbeiter verwenden sollten, wird diese Synchronisation nicht trivial.

Wie kann der Durchsatz mit RabbitMQ begrenzt werden?

Basierend auf Geschichte oben. Wenn es möglich wäre, die Vorabrufgröße nicht nur auf Nachrichtenbasis, sondern auf Zeit basierend auf dieser Logik festzulegen, kann dies sehr einfach sein. Zum Beispiel, "qos zu 1 Nachricht pro Abruf nicht schneller als 1 mal in Sekunden" oder so weiter.

  1. Gibt es so etwas?
  2. Kann andere Strategie dazu sein?
+0

Verwenden Sie N Verbraucher in derselben Warteschlange? Müssen Sie eine oder mehrere Warteschlangen "planen"? – Gabriele

+0

Ja, N Verbraucher in der gleichen Warteschlange. Es sollte pro Warteschlange geplant werden. – misterion

Antwort

1

Dies ist nicht möglich mit RabbitMQ.

Sie haben Recht, bei verteilten Verbrauchern wird diese Drosselung zu einer schwierigen Übung. Ich würde vorschlagen, einen Blick auf ZooKeeper zu werfen, der es Ihnen ermöglichen würde, alle Verbraucher zu synchronisieren und die Verarbeitung von Nachrichten zu drosseln, indem Sie die Znoden/Watches für eine gedrosselte, aber skalierbare Lösung nutzen.

Verwandte Themen