Как наименее накладно обрабатывать 5-6М очень мелких запросов в сутки?

Я располагаю веб-сервисом, который реализует API. К данному API (REST) на вход прилетают очень-очень короткиe сообщения вида:
{
client_key: «my_secret_key»,
ip: «10.128.225.66»,
user: «testuser»,

}
И так далее. В совокупности в сообщении 10+-2 очень коротких поля. У меня стоит очень быстрое шардированное (MongoDB) хранилище (оно изрядно подросло за время длительного использования). Но я уперся в производительность сервера (Apache) отвечать на такое количество очень мелкоатомарных запросов. Запросы распределены не равномерно, а сосредоточены в основном в группе пиков. Как бы выкрутиться, не обновляя железо и не устанавливая loadbalancer? Может попробовать что-то другое вместо апача или взять для него какой-то мод? Apache просто «из коробки» в Ubuntu Server 12.04.1 LTS.
  • Вопрос задан
  • 4468 просмотров
Пригласить эксперта
Ответы на вопрос 8
@Moxa
можно поставить tomcat, реализовать апи на яве… простенький сервлет у меня на ноуте обрабатывает ~12к реквестов в секунду… в таком случае все скорее упрется в скорость записи монги…
Ответ написан
Комментировать
Stdit
@Stdit
Возможно, nodejs для этого подойдёт.
Ответ написан
AterCattus
@AterCattus
Люблю быстрый backend
Может покрутить настройки воркеров апача? Под вашей нагрузкой он может неоправданно часто перезапускать «рабочих». А у вас, как я понял, он настроен «из коробки».
Ну в догонку, стоит ли у вас APC или эквивалентный кешер?
Ответ написан
iXCray
@iXCray
YAWS/nginx + php-fastCGI, в этом случае Вы дополнительно выигрываете в возможности держать постоянное соединение с МонгоДБ.

Есть есть такие запросы, ответы на которые можно кешировать, то цепляете ramfs, внутрь папку для кеширования, на эту папку завязываете nginx, чтобы кешировал ответы на определенные запросы.
Ответ написан
Комментировать
nginx вместо апача поставьте
данные из этих ваших запросов надо просто сохранять в MongoDB или еще какая то обработка требуется?
Ответ написан
Комментировать
AotD
@AotD
PHP, Redis, Postgresql
Выкинуть Apache, поставить nginx. Если запросы идут через php — php-fpm и в путь.
Есть однотипные запросы? nginx и fastcgi_cache (хотя не уверен что оно надо)
Не нужна лишняя прослойка? Самый отчаяный вариант:
openResty (nginx приправленый lua и какой-то матерью) + mongol
И имеем схему — nginx -> mongo без какого-либо оверхеда. Всё круто, здорово, асинхронно.

Не выдерживает mongo? Поднимаем еще инстанс, прописываем его в апстрим nginx — радуемся!

Навертеть можно что угодно и как угодно, важно понимать как оно будет работать и где bottleneck
Ответ написан
@justthefish
Плюсую nginx + кеш на ramfs

Если и этого не хватит — можно употребить жуткую экзотику, типа
github.com/vii/teepeedee2
Ответ написан
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы