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

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

 В принципе, подойдёт любое решение.  

Главное - это реализация очереди обработки.  

При входящих запросах их нужно делить на зависимые и независимые и распределять по приоритетам.  

  

Нужен каскад из двух последовательных типов очередей:  

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

2. Внутренний - асинхронная и **пакетная** (один запрос к бд сразу для нескольких внешних запросов!) обработка параллельных независимых внешних запросов.  

  

Таким образом, значительно снизится время ответа при высоких нагрузках к API (при большом количестве параллельных запросов в единицу времени). 

 Не попробуете не узнаете.   

  

Что мешает создать стенд у себя дома и промоделировать нагрузки? 

 Тут больше зависит от вашего умения писать такие приложения, чем от фреймворка.  

Аiohttp и другие асинхронные, нужны если у вас ожидаются IO Bound задачи, из описание про них вроде ничего не сказано.  

Сам процесс будет выглядеть так, написали - сделали нагрузочное тестирование - нашил и оптимизировали узкое место - опять сделали нагрузочное тестирование - опять оптимизировали, и так до получения удовлетворительного результата.