Поточно-ориентированный циклический буфер в Java

Рассмотрим несколько экземпляров веб-сервера, работающих параллельно. Каждый сервер содержит ссылку на одного общего «Хранителя состояния», роль которого заключается в хранении последних Nзапросов со всех серверов.

Например ( N=3):

Server a: "Request id = ABCD"        Status keeper=["ABCD"]
Server b: "Request id = XYZZ"        Status keeper=["ABCD", "XYZZ"] 
Server c: "Request id = 1234"        Status keeper=["ABCD", "XYZZ", "1234"]
Server b: "Request id = FOO"         Status keeper=["XYZZ", "1234", "FOO"]
Server a: "Request id = BAR"         Status keeper=["1234", "FOO", "BAR"]

В любой момент времени «Хранитель состояния» может быть вызван из приложения мониторинга, которое считывает эти последние Nзапросов. для отчета SLA.

Как лучше всего реализовать этот сценарий производитель-потребитель на Java, предоставив веб-серверам более высокий приоритет, чем отчет SLA?

CircularFifoBufferкажется подходящей структурой данных для хранения запросов, но я не уверен, какой оптимальный способ реализовать эффективный параллелизм.

27
задан Adam Matan 18 June 2012 в 08:24
поделиться