@Ntonk

Какую связку «фреймворк-СУБД» выбрать для веб-приложения на 1000 запросов в секунду?

Здравствуйте. Мне предстоит разработать RESTfull веб-приложение на питоне, которое будет получать крайне неравномерную нагрузку от пользователей. Предполагается, что большую часть времени оно будет вяло обмениваться данными примерно с десятью пользователями. Но в пиковом случае оно должно выдерживать до 1000-1200 пользовательских действий в секунду, в большинстве случаев предполагающих простой обмен HTTP-запросами между клиентом и сервером, а также чтение/запись из/в БД. Более серьезные вычисления, обмен файлами и т.п. будут происходить редко, долготекущих заданий типа отправки почты не предусматривается. Если предположить, что я деплою его на General Purpose-дроплете DigitalOcean (2 vCPU, 8 Гб ОЗУ - немного ограничен в бюджете), какая из следующих комбинаций фреймворка и СУБД лучше подойдет для заявленной цели: Flask+РСУБД (через SQLAlchemy, возможно с Celery - если он тут вообще нужен), aiohttp+РСУБД через тот же SQLAlchemy, или aiohttp+NoSQL (например, MongoDB, при условии, что мои данные не очень охотно поддаются денормализации)? Сервер nginx + Gunicorn.
  • Вопрос задан
  • 371 просмотр
Решения вопроса 1
xmoonlight
@xmoonlight Куратор тега Веб-разработка
https://sitecoder.blogspot.com
В принципе, подойдёт любое решение.
Главное - это реализация очереди обработки.
При входящих запросах их нужно делить на зависимые и независимые и распределять по приоритетам.

Нужен каскад из двух последовательных типов очередей:
1. Внешний - последовательная обработка зависимых запросов (от одного или нескольких клиентов). Т.е., постановка в асинхронную очередь.
2. Внутренний - асинхронная и пакетная (один запрос к бд сразу для нескольких внешних запросов!) обработка параллельных независимых внешних запросов.

Таким образом, значительно снизится время ответа при высоких нагрузках к API (при большом количестве параллельных запросов в единицу времени).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Senior .NET developer
Не попробуете не узнаете.

Что мешает создать стенд у себя дома и промоделировать нагрузки?
Ответ написан
@bacon
Тут больше зависит от вашего умения писать такие приложения, чем от фреймворка.
Аiohttp и другие асинхронные, нужны если у вас ожидаются IO Bound задачи, из описание про них вроде ничего не сказано.
Сам процесс будет выглядеть так, написали - сделали нагрузочное тестирование - нашил и оптимизировали узкое место - опять сделали нагрузочное тестирование - опять оптимизировали, и так до получения удовлетворительного результата.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы