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