Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
node.js
Как работает async <ul><li>Получаем http запрос </li></ul><ul><li>Смотрим, есть ли пользователь с этой сессией </li></ul><...
Варианты решения <ul><li>Цикл </li></ul><ul><li>SELECT * FROM users ... </li></ul><ul><li>INSERT INTO users </li></ul><ul>...
JFDI
Варианты решения Workers M S S S
Workers (idea)
Ага, щас
Workers (real world)
Workers <ul><li>Работает быстрее </li></ul><ul><li>Вариант I несложно превратить в II (в большистве случаев) </li></ul><ul...
Async calls
Async <ul><li>Количество задач ограничено только возможностями CPU </li></ul><ul><li>Вы сами выбираете, когда переключатьс...
Workers + async M Async Async Async
Workers + Async <ul><li>Вы используете все возможности вашего сервера </li></ul><ul><li>Вы сами выбираете, когда переключа...
Какой вариант лучше? Не знаю
QA <ul><li>cron </li></ul><ul><li>while/accept </li></ul><ul><li>forks </li></ul><ul><li>async </li></ul>
Async
Работа с сетью <ul><li>select/poll  O(N=total fd) </li></ul><ul><li>kqueue (BSD only)  O(N=active fd) </li></ul><ul><li>ep...
Таймеры <ul><li>setitimer </li></ul><ul><li>alarm </li></ul>
Абстракция от бардака <ul><li>libev </li></ul><ul><li>libevent </li></ul>
node.js libev JS v8 + + ... + = node.js
<ul><li>HTTP </li></ul><ul><li>FS </li></ul><ul><li>Прозрачный SSL </li></ul><ul><li>DNS </li></ul><ul><li>setTimeout, set...
Что еще? <ul><li>npm = cpan = pip = emerge </li></ul><ul><li>ndb </li></ul><ul><li>Socket.IO </li></ul><ul><li>async-интер...
Success stories <ul><li>ВКонтакте XMPP </li></ul><ul><li>37Signals </li></ul><ul><li>Wikia </li></ul><ul><li>Palm/HP WebOS...
Тесты производительности * <ul><li>* Эти тесты тестируют неверно, </li></ul><ul><li>результаты неправильные </li></ul><ul>...
Беполезный график
? [email_address] http://twitter.com/kostenko
Upcoming SlideShare
Loading in …5
×

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

1,832 views

Published on

  • Привет! Мы запилили поддержку Node.js на всех тарифных планах виртуального хостинга (не на VDS/VPS и не на облаке, а на shared!) и сейчас очень нуждаемся в обратной связи, а для этого нужно больше живых проектов на Node.js. У всех тарифов есть бесплатный тестовый период: https://sprinthost.ru. Регистрируйтесь, создавайте приложение, присылайте замечания, пожелания и вопросы на support@sprinthost.ru или в группу https://vk.com/sprinthost, мы будем бесконечно благодарны. Что нужно знать: В каталоге с приложением ( ~/domains/example.org/public_html ) создаем файл app.js со следующим содержимым: require('/home/login/domains/example.org/public_html/index.js'); process.chdir('/home/login/domains/example.org/public_html'); Создаем файл .htaccess в этом же каталоге и добавляем в него правило: PassengerStartupFile app.js PassengerResolveSymlinksInDocumentRoot on Require all granted PassengerAppType node PassengerAppRoot /home/login/domains/example.org/public_html Options -MultiViews Для работы приложений у нас используется Phusion Passenger https://www.phusionpassenger.com/#about
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. node.js
  2. 2. Как работает async <ul><li>Получаем http запрос </li></ul><ul><li>Смотрим, есть ли пользователь с этой сессией </li></ul><ul><li>Если нужно – добавляем пользователя </li></ul><ul><li>Добавляем запись “Вася зашел на index.html” </li></ul>Пример: счетчик посещений
  3. 3. Варианты решения <ul><li>Цикл </li></ul><ul><li>SELECT * FROM users ... </li></ul><ul><li>INSERT INTO users </li></ul><ul><li>INSERT INTO stats </li></ul>JFDI
  4. 4. JFDI
  5. 5. Варианты решения Workers M S S S
  6. 6. Workers (idea)
  7. 7. Ага, щас
  8. 8. Workers (real world)
  9. 9. Workers <ul><li>Работает быстрее </li></ul><ul><li>Вариант I несложно превратить в II (в большистве случаев) </li></ul><ul><li>Поддержка нескольких CPU </li></ul><ul><li>Много worker-ов - много RAM (в случае с процессами) </li></ul><ul><li>Бардак с shared memory </li></ul><ul><li>Процессорное время распределяет планировщик ядра (абы как) </li></ul>
  10. 10. Async calls
  11. 11. Async <ul><li>Количество задач ограничено только возможностями CPU </li></ul><ul><li>Вы сами выбираете, когда переключаться между задачами </li></ul><ul><li>Разработка и поддержка сложнее </li></ul><ul><li>Используется только одно ядро </li></ul><ul><li>Нельзя использовать блокирующийся код </li></ul>
  12. 12. Workers + async M Async Async Async
  13. 13. Workers + Async <ul><li>Вы используете все возможности вашего сервера </li></ul><ul><li>Вы сами выбираете, когда переключаться между задачами </li></ul><ul><li>Разработка и поддержка кода становятся еще сложнее </li></ul>
  14. 14. Какой вариант лучше? Не знаю
  15. 15. QA <ul><li>cron </li></ul><ul><li>while/accept </li></ul><ul><li>forks </li></ul><ul><li>async </li></ul>
  16. 16. Async
  17. 17. Работа с сетью <ul><li>select/poll O(N=total fd) </li></ul><ul><li>kqueue (BSD only) O(N=active fd) </li></ul><ul><li>epoll (linux only) O(N=active fd) </li></ul>
  18. 18. Таймеры <ul><li>setitimer </li></ul><ul><li>alarm </li></ul>
  19. 19. Абстракция от бардака <ul><li>libev </li></ul><ul><li>libevent </li></ul>
  20. 20. node.js libev JS v8 + + ... + = node.js
  21. 21. <ul><li>HTTP </li></ul><ul><li>FS </li></ul><ul><li>Прозрачный SSL </li></ul><ul><li>DNS </li></ul><ul><li>setTimeout, setInterval </li></ul>Что в коробке?
  22. 22. Что еще? <ul><li>npm = cpan = pip = emerge </li></ul><ul><li>ndb </li></ul><ul><li>Socket.IO </li></ul><ul><li>async-интерфейс к 99% приложений, с которыми вам прийдется работать* </li></ul>* По данным агенства Roga & Kopyta inc. на июль 2011-го года
  23. 23. Success stories <ul><li>ВКонтакте XMPP </li></ul><ul><li>37Signals </li></ul><ul><li>Wikia </li></ul><ul><li>Palm/HP WebOS </li></ul>
  24. 24. Тесты производительности * <ul><li>* Эти тесты тестируют неверно, </li></ul><ul><li>результаты неправильные </li></ul><ul><li>и пользы от них никакой </li></ul>
  25. 25. Беполезный график
  26. 26. ? [email_address] http://twitter.com/kostenko

×