12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PC_ZONEПример асинхронного веб-сервераблерный код, и переименовали в TraceMonkey — именно этот движокиспользуется в ветке 3.6 Firefox’а. В основном SpiderMonkeyиспользуют в ПО, которое написано на С/С++ и нуждается в скриптовомязыке. Из известных продуктов: Comet-сервер APE, noSQL БДCouchDB, серверная платформа Jaxer и модуль к Apache mod_js.Futhark — это движок от Opera, который, кроме браузера, используетсяв их инновационном сервисе Unite (типа встроенный серверв каждом браузере), а также на их серверах, обслуживающихмобильный браузер Opera Mini. Жаль, что движок закрыт, и егопока нигде за пределами самой Opera не применяют.V8 — движок от Google, который используется в Chrome и являетсяосновой будущей Chrome OS. Сегодня это самый крутой, быстрыйи мощный движок, в котором JS-код напрямую преобразуется вассемблер целевого процессора, что позволяет обойти по скоростивсе остальные движки. Кроме этого гугловцы используют множествоухищрений для оптимизации, хранят в памяти скомпилированныйкод, оптимизируют его на лету (например, удаляют блоки кода, которыепо решению компилятора вообще не могут быть задействованы,и т.п.). На базе этого движка построена самая популярная и быстроразвивающаясясерверная платформа — Node.JS.NODE.JSВероятно, именно после выхода Chrome разработчики смекнули,что такой быстрый движок можно успешно использовать и на сервере.Первым опытом стал проект V8cgi, который просто позволялписать серверные сценарии, работающие с любым веб-серверомпо стандартному протоколу CGI. Дальнейшие эксперименты привелик рождению проекта Node.js — полностью самостоятельнойплатформы, включающей, кроме движка, встроенный сервер (HTTPи TCP/UDP/Unix-soket) и базовый набор библиотек, а также предоставляющейполностью асинхронную работу с файлами и сетевымиустройствами.Проект развивается настолько быстро и активно, что уже сейчасготов к промышленному использованию. Это, в частности, доказываетопыт парней из Plurk (азиатский аналог твиттера), которыеполностью перенесли свой comet-сервер, изначально написанныйна Java и солидном JBoss Netty, на Node.js и, по отзывам, сократилипотребление памяти буквально на гигабайты. А масштабы у нихеще те — более сотни тысяч одновременных соединений.Запустить HTTP-сервер, способный обрабатывать асинхроннотысячи подключений — это несколько строк кода:var sys = require('sys'),http = require('http');http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello World\n');}).listen(80, "127.0.0.1");sys.puts('Server running at http://127.0.0.1:80/');Чтобы запустить сервер, скопируй код в файл example.js и укажиего при запуске демона node:Для последних версий Node.js есть полноценныйWindows-порт% node example.jsServer running at http://127.0.0.1:80/Маленький тест провести очень просто. Можно взять программуApache Bench — очень простую тулзу для проведения нагрузочноготестирования, и запустить ее: running «ab -n 1000 -c 100‘http://127.0.0.1:80/’». Таким образом, бенчмарк будет «обстреливать»сервер тысячами запросов, используя 100 одновременныхподключений. На моем ноутбуке сервер выдержал больше 3000запросов в секунду. Это очень много!Сам сервер написан на C++ и совсем немножко на ассемблере,однако большая часть библиотек из дистрибутива разработанана JavaScript. В состав базового набора сервера входят толькоосновные функции, остальное оставлено на плечах разработчиков,которые уже написали сотни разных библиотек и фреймворков.Впрочем, молодость проекта дает о себе знать: многих привычныхдля других решений модулей еще нет, а у многих библиотек текущаяверсия — 0.0.1, что не придает уверенности в их стабильности.Некоторые тривиальные задачи могут вообще не иметь готового кзакачке решения, но бывает и наоборот — количество реализаций,зачастую радикально разных по архитектуре, исчисляется десятками(доступ к базе MySQL, например). Хотя большинство библиотекнаписано на чистом JavaScript, есть и такие, что требуют компиляциимодуля к серверу, что обещает гораздо большую скорость —они просто расширяют стандартный API сервера.ÎÑÎÁÅÍÍÎÑÒÈ NODE.JSОсновной особенностью Node, кроме полной асинхронности,яв ляется его однопоточная модель. Другими словами, все операциивыполняются в одном и том же потоке ОС, даже если у твоегосервера тысяча одновременных пользователей. Правда, доступносоздание дочерних процессов и низкоуровневое управлениеисполнением скриптов (загрузка, компиляция, работа с ассемблернымкодом, исполнение). Для реализации многопоточности изадействования всех ядер современных процессоров рекомендуетсяпросто загружать несколько копий приложения, но можно взятьна вооружение WebWorker из стандарта HTML5 и распределитьработу приложения по нескольким дочерним процессам. Не думай,что раз нет многопоточности — это тормоз и отстой. Вспомни, чтовеб-приложение делает полезную работу очень быстро, а большуючасть времени просто ожидает чего-то (данных от базы, отmemcached'а или новомодной NoSQL-базы), либо просто держит впамяти открытые соединения для Comet'а, поэтому в одном потокеможно обработать и десяток тысяч, не прибегая к кластеризации.Второй особенностью архитектуры Node является событийность.Почти каждая операция имеет коллбэки, генерирует событие, апользователю доступен объект EventEmiter, через который можнобуквально одной строкой генерировать свои события (это несложно,ведь событие — это просто строка с названием, а также списокпараметров, которые передаются в обработчик). Сам по себе032 XÀÊÅÐ 08 /139/ 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!