Node.js под большим трафиком
Топик с "числом Бумбурума", хоть и привёл к моему бану на Хабре, позволил на несколько часов подставить реальный сайт на Express под большой трафик. Результат интересный: сайт один раз упал, выдав ошибку открытия файла, но после перезапуска node работал нормально. Трафик за пару часов составил около 27000 просмотров, с очень быстрым ростом (выход топика на главную). К сожалению трафик по из Google Analytics получить похоже нельзя, было бы более наглядно.
Новый спайдер на основе htmlparser + soupselect
На досуге набросал новый спайдер для очередного микропроекта. В этот раз я решил не использовать jsdom (как в нескольких предыдущих), а остановиться на связке htmlparser + soupselect. Страница сначала отдаётся парсеру, а поиск по полученному DOM делается с помощью SoupSelect.
Сервер разработки на основе Gitosis
Если Вы пользовались Joyent или Heroku, Вам должен быть знаком способ которым они делают связку хостинга и git: Вы делаете git push нужной ветки и сервер запускает этот код. Я решил сделать то же самое на своём маленьком сервере.
Основные требования к серверу были такими:
- Использование git. Я конечно знаю SVN и CVS, но git для меня гораздо удобнее.
- Автоматический рестарт Ноды с нужным скриптом при git push
- Авторизация по открытому ключу, чтобы не вводить логины-пароли, и чтобы никто кроме меня не мог делать push на мой сервер
- Возможность выполнять скрипты после получения кода но до перезапуска Node - например, чтобы вызывать JSLint
Хостинг Node.js на Joyent
Ещё полгода назад хостинг на Node.js был чем то из области фантастики. Если Вы хотели пользоваться Node, лучшее что Вам могли предложить — виртуальный сервер с возможностью установки софта. Теперь же Node-хостинг набирает обороты. Вовсю идёт бета-тестирование платформы Heroku, что то готовят товарищи из Elusive Hippo (правда последнее время там что то неспокойно). Теперь же вслед за Heroku о создании Node-хостинга объявил Joyent.
Как и в случае Heroku, хостинг этот пока экспериментальный и доступ к нему ограничен. Чтобы создать сервер на платформе Joyent надо ввести специальный код купона, который можно получить сделав запрос к RESTful API. Ещё одно важное отличие от Heroku: Вам предоставляется полноценный сервер, и node-приложение доступно из Интернета напрямую, а значит - там работают вебсокеты и сервисы на портах отличных от стандартного.
Хранилища данных в Node.js: Redis
Последний раз я серьёзно заинтересовался Redis после посещения DevConf 2010 — там был очень интересный доклад о возможностях и применении этой системы. Теперь, когда API Ноды несколько устаканилось и коннекторы пришли в более-менее стабильный вид, можно поэкспериментировать и с Redis, помимо прочих хранилищ
Использование нескольких ядер/процессоров в Node.js: порождаем воркеры
Одно из слабых мест Node.js — однопоточное выполнение кода. С этой проблемой можно бороться по разному: например, ставя load balancer'ы и запуская несколько экземпляров сервера. Но с версией 0.1.98 появился и новый способ: передача файлового дескриптора.
Socket.IO и Node.js: пробное использование
Я давно хотел попробовать поиграться с библиотекой Socket.IO. Она предоставляет API, которое позволяет клиенту и серверу общаться, используя различные технологии:
- WebSocket
- Adobe Flash Socket
- ActiveX HTMLFile (IE)
- Server-Sent Events (Opera)
- XHR с multipart encoding
- XHR с long-polling
Причём технология выбирается совершенно прозрачно и для клиента, и для сервера. Если браузер поддерживает WebSockets, будут использоваться именно они. Для других браузеров будет обеспечен fallback до флешовых сокетов, а если и этих нет — до обычного XHR с long polling. Плюс над всем этим великолепием сделан удобный API для клиента и сервер для Node.js (впрочем, думаю сервер тут можно реализовать на любом языке).
Хранилища данных в Node.js: MySQL через DBSlayer
Хотя Node отлично справляется с большим количеством одновременных запросов и висящих соединений, для больших сервисов иногда имеет смысл не переписывать всё на Node, а перенести на неё только критичные части кода: в частности, все связанное с Comet и асинхронной доставкой контента. Сегодня я покопаюсь в DBSlayer и псмотрю как можно ускорить с помощью Node обычный сайт на Drupal.
DBSlayer был создан в недрах New York Times как средство абстракции и балансирования нагрузки на БД. Подробнее можно почитать на сайте NYTimes. DBSlayer предоставляет API на основе JSON. Т.к. нативного драйвера для MySQL нет, для доступа к MySQL-серверам из Node используется именно этот сервер.
Хранилища данных в Node.js: Riak
Если Вы следите за записями о Node.js в Твиттере или блогах, Вам наверняка случалось слышать о связке Node.js + Riak. Я тоже недавно узнал об этом хранилище, и мне стало интересно, что оно из себя представляет и чем выделяется в ряду остальных.
Если коротко, Riak — распределённое key-value хранилище с eventual consistency (изменения рано или поздно распространяются по всему кластеру) и запросами на основе map/reduce.
Использование mapReduce в MongoDB
Ещё одна полезная штука в MongoDB — возможность делать агрегатные запросы с помощью MapReduce. Но в отличии от CouchDB, здесь map-reduce используется только когда это явно необходимо. Сейчас я попробую воспользоваться этой фичей.
Все дальнейшие действия будут проводиться в консоли. Любой консольной команде можно найти соответствие в коннекторе Node.js.


