Подтвердить что ты не робот

Как обрабатывать 2000+ запросов/сек на tomcat?

Я разрабатываю приложение SMS на Java. Мои клиенты отправляют запросы через SMS, которые будут отправлены на мой сервер в виде HTTP-запросов через SMS-шлюз. Теперь мое приложение обрабатывает запросы и снова отправляет ответы клиентам через SMS-шлюз. В качестве ответа отправляется не более 300 символов. Я ожидаю очень высокий трафик (2000 запросов/сек). Я хотел разместить свое приложение с какой-либо веб-хостинговой компанией (считая мокэхост). Какие факторы следует учитывать перед хостингом (промежутки оперативной памяти, ЦП и т.д.), А также какие основные узкие места? Может ли выделенный сервер tomcat обрабатывать такой высокий трафик, если он настроен правильно? Каковы ваши предложения?

Нет взаимодействия с базой данных (я использую только кучу памяти Java). Я проверил тест с JMeter (100 запросов/сек). Мое использование памяти кучи составляло 35 МБ, а среднее время отклика - 532 мс. И также я не использую никаких переменных сеанса.

4b9b3361

Ответ 1

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

В настоящее время мы используем Dell R410s (двухъядерный ядро, 32 ГБ) для наших серверов Tomcat. Для службы REST, которая разговаривает с кластером membase на задней панели, мы можем легко обрабатывать ~ 15k req/second на одном сервере (это использует реализацию JAX-RS в Джерси). В настоящее время у нас есть 4 из них за балансировщиком F5. Каждый из этих запросов обслуживается в среднем около 10 мс.

На самом деле это concurrency; Сколько времени займет ваш сервлет, чтобы сделать то, что ему нужно сделать с запросом. У вас есть поток для каждого параллельного запроса, поэтому, если вы пытаетесь использовать 2000 req/sec, а для одного запроса требуется 500 мс для обработки... вам понадобится немного оборудования. Проблема заключается не в tomcat, а в одном из доступных ресурсов для вашего сервлета.

Ответ 2

Один сервер Tomcat с настройками по умолчанию на скромном оборудовании должен легко обрабатывать 2k запросов в секунду, предполагая, что для каждого запроса не требуется слишком много работы. Если обработка одного запроса занимает более 500 мс, вам, вероятно, потребуется увеличить количество потоков в пуле потоков, и вы можете начать настаивать на ограничениях. В качестве альтернативы, если вы можете отключить часть этой работы для некоторых других потоков, она ускорит время отклика, и вы сможете сохранить потоки по умолчанию 200. Тогда просто вопрос о том, могут ли ваши рабочие потоки поддерживать входящие запросы. Это будет зависеть от того, является ли ваша нагрузка постоянной или взрывоопасной и сколько задержки вы можете принять при обработке. Это даже не касается HA, DR и того, что ваше приемлемое время простоя. Все это большой баланс, и есть слишком много переменных, чтобы просто дать высушенный ответ.

Ответ 3

Похоже, вам, возможно, придется реализовать подход балансировки кластера/нагрузки. Посмотрите этот для примера.