Одним из ключевых понятий, которые вы упомянули это:
Да, они наделение потока для каждого запроса
Было показано, что с потоком по запросу с привязанным к IO приложением в конечном итоге выйдет из потока пула, когда ваша цель состоит в поддержке большого количества одновременных пользователей. Как оказалось, рамки, о которых вы говорите, такие как Node.js, Tornado и т. Д., Превосходят обработку большого количества одновременных пользователей, где ваше приложение, скорее всего, просто ждет чего-то, что не произойдет, и не делает никакого CPU связанных задач. Другими словами, эти инструменты отлично подходят для создания приложений реального времени, таких как онлайн-игры, чаты, системы регистрации, системы уведомлений, в которых основной целью является скорейшая координация передачи небольших сообщений со многими пользователями, как можно быстрее.
На самом деле, эти инструменты отлично подходят для написания приложений на основе websocket, потому что это действительно предложение пользователю в реальном времени или почти в реальном времени.
Несмотря на то, что многие компании используют эти платформы с самого начала, я думаю, что для компаний с традиционными стеками чаще используются инструменты, управляемые событиями, как дополнительные дополнения к их системе. Когда вы идете с чем-то вроде node.js или Tornado, вы можете отказаться от большого количества встроенного программного обеспечения, на которое вы полагаетесь, за то, что вам нужно сворачивать свои собственные api и драйверы. node.js существует уже некоторое время, и на самом деле существует большая поддержка для подключения к базам данных, платформам nosql и системам сборки, но для этого потребовалось некоторое время.
В качестве эксперимента попробуйте написать простое приложение для чата tcp, которое использует один поток для каждого запроса и посмотреть, сколько пользователей вы можете поддерживать. В конце концов, вы достигнете предела тем, сколько потоков ОС вы можете развернуть, что действительно дорого.
Затем посмотрите, как далеко вы можете получить с node.js, используя только один поток, его поток по умолчанию. Вы обнаружите, что сможете поддерживать чрезвычайно большое количество одновременных запросов в секунду. Известно, что оно масштабируется в миллионах, потому что оно не ограничено потоками, оно ограничено только памятью, количеством дескрипторов файлов и процессором в этой точке.
Чтобы ответить на ваши вопросы лучше, я могу:
- Я не думаю, что это возможно, чтобы просто угробить всю вашу платформу только потому, что вы слышите, как большой Node.js и архитектуры управляемых событий являются. Вы действительно должны спросить себя, если у вас есть необходимость в создании высокоприоритетного приложения, связанного с IO. Если да, почему бы просто не использовать его для дополнения существующего стека?
- Я не уверен в вашем втором вопросе, что вы подразумеваете под устройством?
- Вы можете создать отличное приложение в облаке на основе традиционных инструментов, а также использовать архитектуры, управляемые событиями. Тот факт, что он может быть «облачным» приложением, действительно не имеет никакого отношения к выбору платформы.
- Я бы сказал, что это больше о масштабах, чем о производительности. Вы можете обнаружить, что приложение node.js работает медленнее или быстрее, чем приложение java, работающее с тем же кодом. Но то, что может сделать node.js, позволяет значительно повысить пропускную способность, потому что это не повлияет на этот поток, о котором я упоминал. И это также означает, что вы создали правильное приложение, управляемое событиями, где вы не блокируете. Если вы блокируете, вы снимаете всю систему!