2016-10-26 1 views
0

У меня есть контроллер REST Spring, единственная цель которого - создавать или обновлять запись каждый раз, когда мобильный клиент запускает или загружает приложение. Этот URL-адрес будет запущен только тогда, когда пользователь запускает приложение, или если он появляется на переднем плане после возобновления (т. Е. Когда пользователь нажимает кнопку дома устройства на что-то еще, и через некоторое время пользователь нажимает значок приложения, чтобы вывести его на передний план из памяти).Лучшее масштабирование приложения Spring с помощью @Async для большого количества запросов на вставку или обновление базы данных

Ожидаемое количество запросов для этого URL-адреса составляет около 600 запросов в минуту.

Чтобы масштабировать это приложение, лучше ли разместить логику создания/обновления базы данных (MySql) контроллера пружины в отдельном потоке или использовать функцию @Async Spring? Чтобы он не удерживал системный порт в течение очень долгого времени, и одна машина может обрабатывать большое количество запросов до того, как мой веб-сервер (старая рыба) подталкивает запросы в очередь ожидания.

Также, Ожидаемый размер таблицы или количество записей в этой таблице составляет около 10M - 30M.

ответ

1

Я лично не стал бы с асинхронным звонком, по крайней мере, для начала. Создайте сценарий jmeter и запустите некоторую нагрузку на него и посмотрите, как он работает.

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