Как обрабатывать 2000+ запросов / сек на tomcat?
Я занимаюсь разработкой SMS-приложения на Java. Мои клиенты отправляют запросы через SMS, которые будут пересылаться на мой сервер в виде http-запросов через SMS-шлюз. Теперь мое приложение обрабатывает запросы и снова отправляет ответы клиентам через SMS-шлюз. Максимум 300 символов отправляются в ответ. Я ожидаю очень высокий трафик (2000 запросов / сек). Я хотел разместить свое приложение в какой-то хостинговой компании (учитывая mochahost). Какие факторы я должен учитывать перед хостингом (интервалы оперативной памяти, процессора и т. Д.), А также какие основные узкие места должны быть? Может ли выделенный сервер Tomcat обрабатывать такой высокий трафик, если настроен правильно? Каковы ваши предложения?
Нет взаимодействия с базой данных (я использую только кучу памяти Java). Я запустил тест с JMeter(100 запросов / сек). Мое использование памяти кучи было 35 МБ, а среднее время ответа было 532 мс. И я также не использую переменные сеанса.
3 ответа
Трудно ответить на ваш вопрос, не зная, что вы делаете в своем сервлете. Но короткий ответ заключается в том, что это действительно не имеет никакого отношения к коту.
В настоящее время мы используем Dell R410s (двухъядерный процессор, 32G RAM) для наших серверов Tomcat. Для службы REST, которая взаимодействует с мембранным кластером на внутреннем сервере, мы можем легко обработать ~ 15 тыс. Запросов в секунду на одном сервере (это использует реализацию JAX-RS в Джерси). В настоящее время у нас есть 4 из них за балансировщиком нагрузки F5. Каждый из этих запросов обслуживается в среднем за 10 мс.
То, к чему это действительно сводится, является параллелизмом; Сколько времени занимает ваш сервлет, чтобы сделать то, что нужно сделать с запросом. У вас есть поток для каждого одновременного запроса, поэтому, если вы пытаетесь обработать 2000 запросов в секунду, а для обработки одного запроса требуется 500 мс... вам понадобится немного аппаратного обеспечения. Проблема не в tomcat, а в одном из доступных ресурсов для вашего сервлета.
Один сервер Tomcat с настройками по умолчанию на скромном оборудовании должен легко обрабатывать 2000 запросов в секунду, при условии, что для каждого запроса не требуется слишком много работы. Если обработка одного запроса занимает более 500 мс, вам, вероятно, потребуется увеличить количество потоков в пуле потоков, и вы можете начать раздвигать пределы. С другой стороны, если вы можете перенести часть этой работы в какой-либо другой поток (ы), это ускорит время отклика и вы можете оставить 200 потоков по умолчанию. Тогда вопрос только в том, могут ли ваши рабочие потоки отвечать за входящие запросы. Это будет зависеть от того, является ли ваша загрузка постоянной или импульсной, и какую задержку вы можете принять при обработке. Это даже не касается HA, DR, и каково ваше приемлемое время простоя. Это все большое уравновешивание, и слишком много переменных, чтобы просто дать точный ответ.
Похоже, что вам, возможно, придется реализовать кластер / балансировку нагрузки. Взгляните на это для примера.