Потребление и загрузка ресурсов Java / Scala - PullRequest
4 голосов
/ 04 декабря 2011

Я занимаюсь разработкой веб-приложения в Scala. Это простое приложение, которое будет принимать данные о порте от клиентов (JSON или ProtoBufs) и выполнять некоторые вычисления с использованием сервера базы данных, а затем отвечать клиенту с помощью объекта JSON / Protobuf. * ​​1001 *

Это не очень тяжелое приложение. 1000 строк кода макс. Это создаст поток при каждом запросе клиента. Время между получением запроса и ответом сейчас составляет от 20 до 40 мс.

Мне нужен совет о том, какое оборудование / настройку следует использовать для обслуживания более 3000 таких запросов в секунду. Мне нужно закупить оборудование для установки в моем дата-центре.

Если у вас есть опыт развертывания Java-приложений в масштабе, пожалуйста, советуйте. Должен ли я использовать одну большую коробку с 2 - 4 Xeon 5500 с 32 ГБ ОЗУ или несколькими небольшими компьютерами.

ОБНОВЛЕНИЕ - у нас мало клиентов. 3 - 4 из них. Запросы будут от этих 3 из них.

1 Ответ

2 голосов
/ 04 декабря 2011

Если каждый запрос занимает в среднем 30 мс, одно ядро ​​может обрабатывать только 30 запросов в секунду.Предположим, что ваше приложение масштабируется линейно (лучший сценарий, который вы можете ожидать), тогда вам понадобится как минимум 100 ядер, чтобы достичь 3000 запросов / с.Это больше, чем 2-4 Xeon.

Хуже всего, если ваше приложение использует IO или DB (как и большинство других полезных приложений), вы получите сублинейное масштабирование и вам может понадобиться намного больше ...

Итак, первое, что нужно сделать, - это проанализировать и оптимизировать приложение.Вот несколько советов:

  • Создание потока стоит дорого , попробуйте создать ограниченное количество потоков и повторно использовать их в запросах (см. Java ExecutorService например).
  • Если ваше приложение интенсивно использует ввод-вывод: попробуйте максимально сократить количество вызовов ввода-вывода, используя кэш в памяти, и попытайтесь выполнить неблокирующий ввод-вывод.
  • Если ваше приложение зависит от базы данных, рассмотрите возможность кэширования и попробуйте распределенное решение, если это возможно.
...