1

Мне нужно сохранить переменную условия, к которой необходимо получить доступ и обновить несколько модулей.Сохранение переменной в очереди сообщений

В системе имеется веб-интерфейс (контейнер сервлетов), который принимает HTTP-вызовы и переводит их на запросы сообщений, отправленных в очередь сообщений.

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

Для получения новой информации для обработки новых модулей может потребоваться внешняя веб-служба. Существует 4 альтернативных веб-сервиса, и решение, которое служба вызова должна основываться на среднем времени отклика веб-службы в течение последних 10 минут.

Мой вопрос: Как хранить информацию о времени отклика веб-службы?

Моей идеей было НЕ использовать общую БД для этого и попытаться сохранить общую переменную (в выделенном разделе в очереди), которые могут быть прочитаны и обновлены путем обработки модулей всякий раз, когда им необходимо принять решение какую веб-службу вызывать. Обновление действительно просто, поскольку мы говорим о среднем времени отклика (должно быть достаточно предыдущего среднего, первого и последнего обновления TS и текущего времени отклика).

Параллелизм не является проблемой, потому что есть только 20-30 модулей обработки, а средняя скорость запроса - 1 раз в несколько секунд. Даже если есть некоторые столкновения, у нас есть определенная толерантность к устаревшим значениям.

ответ

2

У меня были бы сообщения о времени ответа, отправленные на тему, и каждый узел, которому нужна эта информация, возьмет копию. Когда узел должен знать, какую службу использовать, он смотрит на свою локальную копию. Таким образом, поиск выполняется очень быстро, и узлы могут работать независимо.

BTW Возможно, вам придется периодически проверять латентность более медленных систем. то есть, как только система окажется медленной, она больше не будет использоваться, и вы не увидите, что она не замедляется. Вы можете периодически проверять все серверы, чтобы узнать, изменилась ли их производительность.

+0

так, я должен передавать время отклика веб-службы на все модули обработки? Звучит как хорошая идея. – aviad

+0

@aviad Это то, что я сделал бы. Стоимость хранения одной и той же информации, которую я предполагаю, является небольшой, поэтому наличие большого количества независимых копий будет оптимальным (и простым) –

Смежные вопросы