Nehmen wir an, ich habe P-Prozesse, die einige Geschäftslogik auf N physischen Maschinen ausführen. Diese Prozesse rufen zum Beispiel einen Web-Service S auf. Ich möchte sicherstellen, dass nicht mehr als X Anrufe pro Sekunde von allen P-Prozessen zusammen an den Dienst S gesendet werden.Wie wird der Distributed Rate Limiter implementiert?
Wie kann eine solche Lösung implementiert werden?
Google Guava Rate Limiter funktioniert gut für Prozesse, die auf Einzel-Box, aber nicht in verteilten Setup ausgeführt werden.
Gibt es für JAVA Standardlösungen, die sofort einsatzbereit sind? [kann auf Tierpfleger basieren]
Danke!
Kurator (ein häufig verwendeter Java-ZooKeeper-Client) hat dieses genaue Rezept nicht. Allerdings hat Curator ein Distributed Long-Rezept, das als Grundlage dafür verwendet werden könnte: http://curator.apache.org/curator-recipes/distributed-atomic-long.html – Randgalt
Hm, Semaphor ist kein gemeinsames Rezept für dieser Fall? http://curator.apache.org/curator-recipes/shared-semaphore.html –
Problem mit gemeinsamem Semaphor ist, dass es jemanden gibt, der alle Sperren jede Sekunde freigibt. Ich denke, dass verteiltes Atom lange oder ganze Zahl geeignet sein wird, aber Ich habe meine Lösung noch nicht implementiert ... also nicht sicher –