Your SlideShare is downloading. ×
0
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Erlang ruby
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Erlang ruby

416

Published on

2 Comments
1 Like
Statistics
Notes
No Downloads
Views
Total Views
416
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
2
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Чем хорош Erlang вообще и для веб-разработки в частности? Юра Жлоба aka yzh44yzh
  • 2. Сегодня я расскажу: Что такое Erlang Архитектура веб-серверов Преимущества Erlang для веб Примеры использования: компании и продукты Место Erlang в вебе сейчас и в будущем
  • 3. Клевая картинка Без чего не может обойтись никакая презентация. Да, картинка не в тему. Но это не важно. Жанр презентации обязывает, чтобы клевые картинки были. А вот что б картинки были в тему, к этому не обязывает :)
  • 4. Кратенько про Erlang Многопоточность Распределенность Устойчивость к ошибкам Горячее обновление кода
  • 5. Два слова об истории Середина 80х – начало 90х 90-е – середина 2000х Вторая половина 2000х разработка языка жизнь в узкой нише рост популярности
  • 6. Многопоточность Легкие потоки Эффективные планировщики Изолированные области памяти Изолированные сборщики мусора Обмен сообщениями
  • 7. Распределенность Решение высокого уровня Сетевая прозрачность Просто посылаем сообщение процессу в другой ноде так же, как и процессу в своей ноде
  • 8. Устойчивость к ошибкам 3 уровня защиты: Изоляция потоков Супервайзеры Распределенность
  • 9. Подробнее о процессах Что такое процесс? Процессы бывают разные...
  • 10. Подробнее о процессах Мы начнем с такого процесса, который в unix-подобных ОС создается системным вызовом fork()
  • 11. Подробнее о процессах Процесс имеет ресурсы: несколько областей в оперативной памяти, для хранения кода, данных и стека; область в оперативной памяти для хранения метаинформации о самом процессе (обработчики сигналов, файловые дескрипторы, информация для планировщика и т.д.)
  • 12. Подробнее о процессах ОС имеет таблицу процессов, а там: PID, родительский PID, UID пользователя, GID группы, состояние (зомби, да :)
  • 13. Подробнее о процессах Один такой процесс потребляет прилично памяти fork() работает относительно медленно переключение между процессами тож не супер быстое
  • 14. Подробнее о процессах 700-800 процессов, вот что может дать нам ОС Это много или мало? Пойдем дальше и увидим.
  • 15. Подробнее о процессах Ок, эти процессы тяжелые, а бывают ли легкие? Конечно Нити (threads) Легковесные процессы, работающие внутри процесса ОС, и разделяющие его ресурсы.
  • 16. Подробнее о процессах С нитями дела обстоят получше, ОС может нам дать десятки тысяч нитей. Но...
  • 17. Подробнее о процессах Не каждому ЯП они доступны
  • 18. Подробнее о процессах Виртуальная машина Erlang Кроссплатформенные нити для большинства популярных ОС Доступные из ЯП куда более простого и удобного, чем C/C++
  • 19. Подробнее о процессах Причем процессы Erlang еще легче, чем даже нити. И их можно создать на порядок больше: сотни тысяч.
  • 20. Архитектура веб-серверов 1. Принятие запросов и роутинг 2. Бизнес-логика 3. Хранение данных
  • 21. Архитектура веб-серверов 1. Nginx 2. Ruby On Rails 3. Memcached/PostreSQL
  • 22. Архитектура веб-серверов 1. Х/з, как это работает. 2. Тут-то мы все большие спецы 3. Ну ж MongoDB от Redis отличаем, небось :)
  • 23. Архитектура веб-серверов 1-й уровень нам не интересен. Он просто работает и все. И пофиг, что там происходит. Пока...
  • 24. Архитектура веб-серверов Пока мы обслуживаем 500-800 запросов в секунду. Но случается такое, что нам нужно обслужить 1000 запросов в секунду. 5К, 10К, 100К И тогда 1й уровень становится очень важным.
  • 25. Архитектура веб-серверов Ну так что там, на 1-м уровне?
  • 26. Архитектура веб-серверов Если мы возьмем какой-нибудь не очень свежий веб-сервер: Старичок Apache
  • 27. Архитектура веб-серверов Пул из 100 (допустим) процессов ОС. Процесс выделяется из пула для обслуживания запроса, вызвает бизнес-логику, возвращает клиенту ответ И возвращается в пул.
  • 28. Архитектура веб-серверов Важно быстро обрабатывать запрос и возвращать процесс в пул. Если процессы будут заняты долго, а запросов будет много, то сервер не сможет их все обслужить.
  • 29. Архитектура веб-серверов Важно быстро обрабатывать запрос и возвращать процесс в пул. Если процессы будут заняты долго, а запросов будет много, то сервер не сможет их все обслужить.
  • 30. Архитектура веб-серверов Поэтому nginx использует нити и имеет большой пул и легко его наращивает при необходимости. И поэтому он так крут :)
  • 31. Преимущества Erlang для веб Erlang хорош на всех 3х уровнях.
  • 32. Преимущества Erlang для веб Он вполне конкурирует с nginx на 1-м уровне. Вполне удобен для написания бизнес-логики на 2-м уровне. Годится и для хранения данных. (это ежели в памяти, хранение на диске лучше все-таки доверить БД)
  • 33. Преимущества Erlang для веб Есть еще и 4-й уровень. Это задачи, требующие длительного времени, и выполняющиеся отложено. Обрезка закачанных картинок, перекодировка видео, сбор и анализ логов и т.д.
  • 34. Преимущества Erlang для веб Вы для выполнения таких задач используете что-нибудь типа RabbitMQ
  • 35. Преимущества Erlang для веб На Erlang можно реализовать все 4 уровня вашей системы, на одной технологии, в одной кодовой базе.
  • 36. Преимущества Erlang для веб На том же серверном железе вы обсужите больше клиентов, больше запросов.
  • 37. Преимущества Erlang для веб На порядок, а то и на два порядка больше :) Я, не будучи Erlang-гуру, написал сервер, который обслуживает 5-8К запросов в секунду на одной машине. Код Erlang-гуру сможет обслужить и 50К, и 100К.
  • 38. Преимущества Erlang для веб Но это мы говорим об одном сервере. А Erlang изначально предназначен для построения распределенных систем. Так что если речь идет о кластере, то в таком проекте для Erlang самое место.
  • 39. Преимущества Erlang для веб Разрабатывать распределенные системы в принципе сложно. Сама предметная область таит в себе много проблем. Erlang делает эту разработку простой насколько это вообще возможно.
  • 40. Недостатки Erlang Малое количество разработчиков (и компаний) Плохая работа со строками Поддержка unicode не супер Библиотеки третьих сторон не production ready
  • 41. Примеры использования Поговорим о компаниях и продуктах. Учитывая аудиторию, первой компанией в этом списке будет...
  • 42. Примеры использования 37signals
  • 43. Примеры использования 37signals Campfire, групповой веб-чат для общения команды.
  • 44. Примеры использования 37signals, Campfire Строк кода R/s Задержка Процессов ОС Расширяемость Ruby 127 250-350 20ms да C 397 1800 2-3ms 80 нет Mark Imbriaco, Erlang Factory London 2009 Campfire Loves Erlang Erlang 273 1800 2-3ms 1 да
  • 45. Примеры использования heroku
  • 46. Примеры использования heroku Облачная PAAS платформа
  • 47. Примеры использования heroku Балансировщик нагрузки HTTP Routing Mesh Архитектурный клей Logplex система сбора логов
  • 48. Примеры использования heroku Perl: Making easy things easy and hard things possible! Ruby: Making easy things trivial and hard things fun! Erlang: Making easy things possible and impossible things trivial!
  • 49. Примеры использования heroku Blake Mizerany и Orion Henry на Erlang Factory London 2009: How the Cloud Got Its Groove Back Jacob Vorreuter на Erlang Factory London 2011: Utilizing Redis in distributed Erlang systems Geoff Cant на Erlang Factory SF Bay Area 2013 про Logplex: High Throughput Erlang
  • 50. Примеры использования heroku Fred Hebert Автор книги Learn You Some Erlang for Great Good! на NYC Erlang Factory Lite 2013 Why Heroku (still) uses Erlang
  • 51. Примеры использования GitHub
  • 52. Примеры использования GitHub https://github.com/erlang/otp
  • 53. Примеры использования GitHub Erlectricity GitHub pages
  • 54. Примеры использования GitHub Tom Preston-Werner на Erlang Factory SF Bay Area 2009 Mixing Erlang and Ruby with Erlectricity Jesse Newland на Erlang Factory SF Bay Area 2012: Rewriting GitHub Pages with Riak Core, Riak KV, and Webmachine
  • 55. Примеры использования Facebook Серверная часть чата Данные 2011 года: 1 миллиард сообщений в сутки 10 миллионов активных пользователей на пике 100 серверов
  • 56. Примеры использования Amazone SimpleDB распределенная база данных часть Amazone Web Services
  • 57. Примеры использования Yahoo! Yogish Baliga на Erlang Factory SF Bay Area 2010 Deploying Erlang into a Large Organization
  • 58. Примеры использования DemonWare Malcolm Dowse Erlang and First-Person Shooters in online games Wooga Knut Nesheim Designing online games for scale with Erlang WhatsApp Rick Reed Scaling to Millions of Simultaneous Connections
  • 59. Примеры использования Riak Распределенная Key-Value БД CouchDB Распределенная документ-ориентированная БД RabbitMQ Брокер сообщений, одна из реализаций AMPQ Ejabberd Jabber сервер
  • 60. Место Эрланг в вебе сейчас и в будущем Cloud Platforms Messaging Games Databases
  • 61. Место Эрланг в вебе сейчас и в будущем Веб-сокеты SPDY и HTTP 2.0 Интернет вещей
  • 62. Вопросы? :)

×