Я работаю в небольшой команде, разрабатывающей одностраничное приложение, которое в значительной степени опирается на запросы с низкой задержкой через WebSockets. Серверная часть работает на Node.js + Redis. Он должен поддерживать от сотен до тысяч одновременных соединений, а запросы должны обслуживаться в течение 50-100 мс (при хороших условиях сети на стороне клиента). Мы очень довольны нашей первоначальной реализацией этой части сервера, она работает как положено.
Нам также нужно обслуживать множество статических файлов по HTTP. Эти запросы не чувствительны ко времени. Из-за больших требований к хранилищу мы хотели бы выбрать массив жестких дисков вместо твердотельных накопителей по соображениям стоимости.
Существует ли риск медленного дискового ввода-вывода, который может ухудшить производительность остальной части приложения Node.js (часть WebSocket, использующая только базу данных в памяти), или это сильно повлияет на часть обслуживания HTTP / статического файла сервера? Насколько я понимаю, Node.js с его асинхронной природой хорошо бы подходил для такой ситуации, поскольку он позволял бы модулю WebSockets обрабатывать запросы в обычном режиме, пока модуль HTTP ожидает чтения / записи дисков?
Возможно, большое количество HTTP-запросов "в ожидании обслуживания" может каким-то образом засорить сервер (в конце концов, они должны где-то храниться, и, вероятно, нет возможности опроса, если доступно чтение и запись), и нам нужно рассмотреть возможность использования отдельного процесса Node.js для обслуживания статических файлов или даже отдельного выделенного сервера?
Я могу думать о следующих вещах:
- HTTP-запрос «ожидает обслуживания» будет использовать ограниченное количество доступных одновременных TCP-соединений
- HTTP-запросы «ожидающие обработки» также будут занимать некоторое количество оперативной памяти
- системные файлы, вероятно, должны находиться на диске, который не будет занят обслуживанием статических файлов
Мы пока не можем проверить этот сценарий в реальном мире, поэтому я был бы очень рад услышать от кого-либо с подобным опытом. Это может потребовать от нас переосмысления архитектуры, и это то, что мы бы предпочли открыть раньше, чем позже.