Fork me on GitHub

Руководство по убеждению начальства от Felix’a

Ну что? Наигрались с Node.js? Пришло время убеждать начальство? Может быть. Я консультировал различные компании на предмет того, подходит ли им Node.js. И иногда ответ был отрицательный.

Это руководство - набор советов, основанных на личном опыте, для тех из вас, кто хочет разобраться, подходит ли Node.js для использования в компании. И если подходит, то как убедить в этом начальство.

Плохие примеры

Ресурсоемкие приложения

Несмотря на то, что я люблю Node.js, существует несколько случаев, где использование Node.js не имеет смысла. Наиболее очевидный пример - это приложения, потребляющие много CPU и практически не использующие ввод/вывод. Так что, если Вы собираетесь написать кодировщик видео, искусственный интеллект или какое-либо подобное, жадное до CPU, ПО, то лучше при этом не использовать Node.js. Вы, конечно, можете поизвращаться, но гораздо эффективнее эти задачи будут решены с помощью C/C++.

В то же время, Node.js позволяет легко писать дополнения на C++. Так что Вы можете использовать Node.js как скриптовой движок для Ваших супер секретных алгоритмов.

Простые CRUD/HTML приложения

Node.js со временем может стать прикольным инструментом для создания любого типа web-приложений. Но пока не стоит ожидать, что он (Node.js) даст Вам больше преимуществ, чем PHP, Ruby или Python. Да, Ваше приложение может стать немного более масштабируемым, но оно не станет более популярным только потому, что Вы написали его с помощью Node.js.

Правда в том, что хорошие фреймворки для Node.js только-только начинают появляться. И пока еще нет ничего настолько же мощного, как Rails, CakePHP или Django. Если Ваше приложение в основном просто формирует HTML на основе базы данных, то использование Node.js пока не даст Вам каких-либо преимуществ.

NoSQL + Node.js + модная ерунда

Если архитектура Вашего следующего приложения выглядит как “Поваренная книга NoSQL ингридиентов”, то остановитесь на секундочку и прочитайте нижеследующее.

Да, Redis, CouchDB, Cassandra, MongoDB, Riak и т.д. выглядят заманчиво. Точно так же, как то красное яблоко, перед которым не смогла устоять Ева. Если Вы уже рискуете, используя Node.js, то Вам не стоит усугублять ситуацию еще одной новой технологией, в которой Вы, скорее всего, еще не до конца разобрались.

Уверен, есть случаи, когда использование документо-ориентированной БД оправдано. Но если Вы пытаетесь заработать на своем ПО, то использование более консервативных технологий баз данных (например, Postgres или MySQL) должно быть важнее для Вас, чем возможность удовлетворения своего гиковского самолюбия и впечатления друзей.

Хорошие примеры

JSON API

Построение легковесных REST/JSON API - это одна из тех задач, с которой Node.js справляется лучше всего. Неблокирующая модель ввода/вывода и JavaScript делают Node.js отличным выбором для создания обертки над источником данных (например, базы данных или веб-сервисы) и их раздачи через JSON-интерфейс.

Одностраничные приложения

Node.js также хорошо подходит для создания одностраничных насыщенных AJAX’ом приложений (например, как Gmail). Способность обрабатывать множество запросов в секунду с низким временем ответа, а также возможность использования кода как на клиенте, так и на сервере (например, валидация) делают Node.js отличным выбором для современных веб-приложений, которые выполняют много работы в браузере.

Подарок для консольных утилит

Так как Node.js еще довольно молодой, существует соблазн заново написать весь необходимый для него софт. Однако, лушим вариантом будет использование огромного набора существующих консольных утилит. Способность Node.js порождать тысячи дочерних процессов и работать с их выходными потоками является идеальным выбором для тех, кто стремится использовать существующее ПО.

Потоковая передача данных

Обычные веб-приложения трактуют http-запрос и http-ответ как атомарные события. Однако, правда в том, что это потоки и приложения Node.js могут извлекать значительную выгоду из этого факта. Хорошие примеры - это разбор (парсинг) файла во время его загрузки в реальном времени, а также создание проксей между различными слоями данных.

Приложения мягкого реального времени

Еще одной замечательной особенностью Node.js является та легкость, с которой можно разрабатывать системы мягкого реального времени. Под этим я подразумеваю такие вещи, как twitter, ПО для чатов или приема ставок, интерфейсы для сетей мгновенной передачи данных.

Однако тут надо быть осторожным, так как JavaScript - это динамический язык программирования со сборкой мусора. То есть, время отклика иногда может зависеть от того, как часто и как долго работает сборщик мусора (при котором выполнение программы останавливается). Так что не пытайтесь создавать системы жесткого реального времени на Node.js, которые требуют гарантированного времени отклика. Для такого рода задач гораздо лучше подойдет Erlang.

Убеждение начальства

Теперь, когда Вы убедились в том, что в Вашем случае Node.js подходит как нельзя лучше, пора убедить в этом Ваше начальство.

Создание прототипа

Лучший способ начать - это предложить за неделю подготовить простой прототип части приложения. Обычно начальство легко на это соглашается, так как это не накладывает никаких обязательств.

После того, как у Вас есть согласие, гораздо легче поднять и запустить базовую систему, работа которой будет уже более сильным аргументом в пользу Node.js.

Поиск разработчиков

Думайте о JavaScript всё, что угодно, но в настощее время он становится универсальным языком программирования. Практически на каждом персональном компьюетер установлен один или несколько интерпретаторов JavaScript (в виде браузера) и практически любой веб-разработчик хоть немного, но знает JavaScript.

Это означает, что у Вас есть огромный выбор людей, которых можно нанять. Даже больше: наверняка, у Вас в компании уже есть множество талантов. Так что если Вы работаете в растущей, активно нанимающей людей, компании - это еще один аргумент в пользу Node.js.

Активное сообщество

Сообщество Node.js в настоящий момент растет сумасшедшими темпами, привлекая умнейших разработчиков. Это означает, что экосистема Node.js растет каждый день, и всё легче получить бесплатную и платную поддержку.

Производительность

С этим аргументом надо быть осторожным, но если производительность является критичным фактором для Вашего приложения, то Node.js есть что предложить. В результате того, что пять компаний (Mozilla, Google, Apple, Microsoft, Opera) соревновались в создании лучшего интерпретатора JavaScript, Node.js получил самый быстрый из них (v8 от Google).

Учитывая радикальную модель неблокирующего ввода/вывода Node.js, Вы должны очень постараться, чтобы написать медленное приложение. Большинство приложений, построенных на базе Node.js, легко справляются с тысячами одновременных соединений даже на вполне обычном железе.

Поддержка компаниями

Одним из рисков при использовании молодого open source проекта является отсутствие долгосрочных обязательств со стороны авторов проекта. Но это не относится к Node.js, который в настоящее время спонсируется компанией Joyent, которая наняла Райана Дала и еще нескольких основных разработчиков. Таким образом, сейчас на разработку проекта влияет вполне реальная экономическая составляющая.

Благодаря этому, такие компании, как Yahoo! и HP (Palm) решились использовать Node.js в следующий поколениях своих продуктов. Так что Ваш руководитель может расслабиться, читая одобрительные отзывы этих компаний.

Убеждение клиента

Если Вы фрилансер или небольшая компания, выполняющая заказы по контракту, то убеждение клиента к использованию Node.js выглядит немного иначе. Как бы то ни было, все зависит от того, будете ли Вы в дальнейшем поддерживать то, что сделаете для клиента.

Мой совет - будьте более осторожными и дважды проверьте, подходит ли Node.js для клиента. Если подходит, то убедитесь, что у Вас достаточно людей и времени для будущей поддержки приложения. Команда Node.js выпускает новые релизы достаточно часто, так что Вы должны быть готовы к небольшим доработкам каждые 3-6 месяцев, чтобы перейти к новой версии.