Шаблон для разработки масштабируемого веб-сервиса - PullRequest
3 голосов
/ 27 января 2010

Я пишу веб-сервис на Java, который должен обрабатывать большое количество запросов в секунду. Общий поток будет:

  • Веб-сервис получает запрос от клиента
  • Возвращает ответ «продолжай опрашивать меня» клиенту
  • Вызывает другой веб-сервис (или услуги), и ждет их ответить (с таймаутом)
  • Клиент опрашивает наш веб-сервис, пока он получает ответ (с Тайм-аут)

Исследуя Интернет, я нашел два основных подхода к написанию веб-сервисов:

  • Создать поток для каждого запроса
  • Использовать шаблон Reactor (поток центрального диспетчера реагирует на события ввода-вывода)

Есть ли у вас рекомендации, какой подход в целом лучше, и каковы плюсы / минусы каждого подхода? Буду также признателен за ссылки на примеры.

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Не думайте, что многопоточность. Думайте асинхронно. Я случайно только что закодировал асинхронный обработчик, который выполнял 2000 RPS с

Async, Async, Async.

Повторяй и повторяй.

0 голосов
/ 27 января 2010

Асинхронизм - действительно правильный подход, но не управляйте этим самостоятельно, используйте что-то, поддерживающее вызов асинхронного веб-сервиса, например JAX-WS 2.0 (который использует интерфейс Future и / или инфраструктуру Executor из java.util.concurrent ). См. Асинхронный вызов веб-службы с JAX-WS 2.0 .

0 голосов
/ 27 января 2010

В дополнение к ответу «Нет возврата - нет возврата» я бы сказал: «Думайте асинхронно», так как вы должны позволить своему контейнеру управлять проблемами многопоточности / масштабируемости и высокой доступности развернутых веб-служб. это позволяет вам настраивать такие вещи, как кластеризация и т. д., используя контейнер приложения.

РЕДАКТИРОВАТЬ: Итак, в заключение, шаблон как таковой отсутствует, возможно, вам следует изучить возможности масштабируемости / доступности вашего контейнера приложений ...

...