Как я могу использовать возможности CLUSTER ENVIRONMENT для моего пула потоков, который имеет дело с заданиями, связанными с вводом / выводом?

1

Я разработал сервер на основе JAVA, имеющий пул потоков, который динамически растет в зависимости от скорости запроса клиента. Эта стратегия известна как FBOS (стратегия оптимизации по частоте) FBOS для системы пулов потоков.

Например, если скорость запроса составляет 5 запросов в секунду, тогда мой пул потоков будет иметь 5 потоков для обслуживания клиентских запросов. Клиентские запросы - это привязанные к I/O задания на 1 секунду. Каждый запрос представляет собой исполняемый Java-объект, который имеет метод sleep() для имитации операции ввода-вывода.

Если скорость запроса клиента составляет 10 запросов в секунду, тогда у моего пула потоков будет 10 потоков внутри него для обработки клиентов. Каждый поток имеет внутренний объект таймера, который активируется, когда его соответствующий поток неактивен, и когда его время простоя составляет 5 секунд, таймер удаляет соответствующий поток из пула потоков, чтобы динамически сжимать пул потоков.

Моя стратегия хорошо работает для коротких интенсивностей ввода-вывода. Мой сервер работает хорошо для небольшой скорости запроса, но для большой скорости запроса мой пул потоков имеет большое количество потоков внутри него. Например, если скорость запроса составляет 100 запросов в секунду, тогда мой пул потоков будет содержать 100 потоков внутри него.

Теперь у меня есть 3 вопроса в моем сознании

(1) Могу ли я столкнуться с утечками памяти, используя эту стратегию, для большой ставки запроса?

(2) Может ОС или JVM сталкиваются с чрезмерной нагрузкой на управление потоком на большой скорости запроса, что замедлит работу системы

(3) Последний и очень важный вопрос заключается в том, что мне очень любопытно реализовать пул потоков в кластерной среде (я DUMMY в кластеризации).

Я просто хочу получить от вас всех советов, как среда кластеризации может принести мне больше пользы в сценарии пула потоков на основе частоты для заданий только для ввода-вывода. То есть среда кластеризации дает мне возможность использовать память других систем (узлов)?

  • 1
    Если он действительно связан с IO, то не будут ли обрабатываться два одновременных запроса с половинной скоростью? Если каждый запрос просто блокируется во время ожидания ответа удаленной системы, это не связано с IO.
  • 0
    Предположим, что каждый запрос является http-запросом, требующим отдельной страницы, и странице требуется 1 секунда для выборки и отправки, затем сервер FBOS отвечает за создание столько потоков на стороне сервера, сколько и скорость запроса, и каждому потоку потребуется 1 секунда для выборки страницы и отправить его клиенту Что вы имели в виду под «Не действительно I / O Bound». На самом деле меня больше интересует мой третий вопрос
Теги:
multithreading
hazelcast
threadpool

1 ответ

0

Простейшим решением для использования является пул кэшированных потоков, см. " Executors Я предлагаю вам попробовать это первым. Это создаст необходимое количество потоков. Для запроса с привязкой к IO одна машина может легко расширять до 1000 потоков, не требуя дополнительного сервера.

Могу ли я сталкиваться с утечками памяти, используя эту стратегию, для большой ставки запроса?

Нет, 100 в секунду не особенно высок. Если вы говорите более 10 000 в секунду, у вас может возникнуть проблема (или нужен другой сервер)

Могут ли ОС или JVM чрезмерно работать с потоком управления потоком с большой скоростью запроса, что замедлит работу системы

Да, мое эмпирическое правило состоит в том, что 10 000 потоков тратят около 1 процессор на верхние.

Последний и очень важный вопрос заключается в том, что мне очень любопытно реализовать мой пул потоков в кластерной среде (я DUMMY в кластеризации).

Учитывая, что вы хотите использовать до 1% одной машины, я бы не стал беспокоиться об использовании нескольких машин для ввода IO. Скорее всего, вы хотите обработать результаты, но без дополнительной информации вы не могли бы сказать, помогут ли другие машины или нет.

может ли кластерная среда дать мне возможность использовать память других систем (узлов)?

Он может помочь, если вам это нужно, или он может добавить сложность, которая вам не нужна, если вам это не нужно.

Я предлагаю вам начать с реальной проблемы и искать решение для ее решения, а не начинать с крутого решения и пытаться найти проблему для его решения.

  • 0
    Питер большое спасибо за
  • 0
    очень полезный ответ: Питер, я хочу спросить еще одну вещь, я хочу распределить свой пул потоков на 2 части, один пул потоков имеет дело с запросами, связанными с вводом-выводом, а другой пул потоков имеет дело с запросами, связанными с ЦП, и я отправляю каждый запрос его соответствующему Пул потоков. Я хочу, чтобы оба этих пула потоков были на разных машинах в среде DSM. Прав ли я, если я построю эту систему? т.е. два пула потоков в DSM для 2 разных типов запросов?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню