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

1,699 views
1,644 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,699
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
21
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×