У нас есть веб-сервис, который принимает запросы с очень высокой частотой.
Приложение развернуто на двух серверах jboss в кластере (для распределения нагрузки)
Мы обрабатываем запросы и определяем некоторые запросы как «хорошие запросы».
Теперь мы хотим обработать определенный процент «хороших запросов» специально (отправить нисходящий поток в другую систему). Это процентное значение настраивается.
Например, если процент составляет 75%, для каждых 4 «хороших запросов», которые мы получаем, 3 из них должны обрабатываться особым образом (отправляются в нисходящем направлении), а 4-й должен игнорироваться.
Я не хочу добавлять процесс определения того, должен ли "хороший запрос" отправляться вниз по течению как часть существующей системы. Так как это замедлит время обработки.
Вот решение, которое я подумал для этой проблемы.
- Создайте очереди JMS на каждом сервере jboss и отправьте «хороший запрос» в очередь.
- Другой модуль / приложение (имя: нисходящий модуль) будет читать очередь JMS. Он будет поддерживать count , чтобы определить, должен ли хороший запрос отправляться в нисходящем направлении или нет.
Количество - это количество запросов, полученных нижестоящим модулем
Существует несколько проблем, которые я предвидел при использовании вышеуказанного подхода, поскольку приложение развернуто на двух серверах.
- Счетчик не будет уникальным для двух серверов, каждый «нисходящий модуль» будет иметь свой счетчик.
- Поскольку счетчик не уникален, возможно, мы не отправляем настроенный процент.
Например, если процент составляет 75% и если мы получаем 6 запросов. Возможно 3 пошли к server1 и 3 пошли к server2. Количество в каждом «последующем модуле» будет 3.
Таким образом, мы бы эффективно не отправили хотя бы 1 «хороший запрос» в нисходящую систему, что нежелательно.
Я думал, что я буду вести таблицу в базе данных, которая будет вставлять "хорошие запросы" и генерировать для этого уникальный номер (Good_request_count), а также использовать Good_request_count в каждом "последующем модуле", чтобы принять решение о том, должен ли он быть лечили специально или нет.
Но я боюсь, что мое решение очень неэффективно, поскольку оно будет включать следующее
- Наличие двух очередей JMS (по одной для каждого jboss)
- На каждом сервере должно быть два «нисходящих модуля», чтобы определить, нужно ли отправлять исправный запрос нисходящему.
- Каждый последующий модуль должен вставить некоторое ключевое значение в «хороший запрос» и прочитать уникальное значение счетчика из базы данных.
Основная проблема заключается в том, что у меня есть два сервера, и я хочу получить уникальный счетчик для обоих.
Может кто-нибудь предложить мне лучшее решение или указать мне неэффективность системы, которую можно улучшить.
Пожалуйста, дайте мне знать, если я не совсем уверен, я могу это объяснить.
Спасибо большое за чтение!