Node.js (Андрей Костенко)

Preview:

DESCRIPTION

 

Citation preview

node.js

Как работает async

•Получаем http запрос•Смотрим, есть ли пользователь с

этой сессией•Если нужно – добавляем

пользователя•Добавляем запись “Вася зашел

на index.html”

Пример: счетчик посещений

Варианты решения

•Цикл•SELECT * FROM users ...•INSERT INTO users•INSERT INTO stats

JFDI

JFDI

Варианты решенияWorkers

MM

SS SSSS

Workers (idea)

Ага, щас

Workers (real world)

Workers• Работает быстрее

• Вариант I несложно превратить в II (в большистве случаев)

• Поддержка нескольких CPU

• Много worker-ов - много RAM (в случае с процессами)

• Бардак с shared memory

• Процессорное время распределяет планировщик ядра (абы как)

Async calls

Async•Количество задач ограничено только возможностями CPU

• Вы сами выбираете, когда переключаться между задачами

• Разработка и поддержка сложнее

•Используется только одно ядро

•Нельзя использовать блокирующийся код

Workers + asyncMM

AsynAsyncc

AsynAsyncc

AsynAsyncc

Workers + Async• Вы используете все возможности вашего сервера

• Вы сами выбираете, когда переключаться между задачами

• Разработка и поддержка кода становятся еще сложнее

Какой вариант лучше?

Не знаю

QA•cron•while/accept•forks•async

Async

Работа с сетью

•select/poll O(N=total fd)

•kqueue (BSD only) O(N=active fd)

•epoll (linux only) O(N=active fd)

Таймеры• setitimer

• alarm

Абстракция от бардака

• libev

• libevent

node.jslibevlibev JSJS v8v8+ + ......+

=

node.jsnode.js

•HTTP•FS•Прозрачный SSL•DNS•setTimeout, setInterval

Что в коробке?

Что еще?•npm = cpan = pip = emerge•ndb•Socket.IO•async-интерфейс к 99%

приложений, с которыми вам прийдется работать*

* По данным агенства Roga & Kopyta inc. на июль 2011-го года

Success stories

•ВКонтакте XMPP•37Signals•Wikia•Palm/HP WebOS

Тесты производительно

сти ** Эти тесты тестируют неверно,

результаты неправильныеи пользы от них никакой

Беполезный график

?andrey@kostenko.name

http://twitter.com/kostenko

Recommended