SlideShare a Scribd company logo
Чем хорош Erlang вообще и для
веб-разработки в частности?

Юра Жлоба aka yzh44yzh
Сегодня я расскажу:
Что такое Erlang
Архитектура веб-серверов
Преимущества Erlang для веб
Примеры использования: компании и продукты
Место Erlang в вебе сейчас и в будущем
Клевая картинка
Без чего не может
обойтись никакая
презентация.
Да, картинка не в тему.
Но это не важно. Жанр
презентации обязывает,
чтобы клевые картинки
были. А вот что б
картинки были в тему, к
этому не обязывает :)
Кратенько про Erlang

Многопоточность
Распределенность
Устойчивость к ошибкам
Горячее обновление кода
Два слова об истории

Середина 80х – начало 90х
90-е – середина 2000х
Вторая половина 2000х

разработка языка
жизнь в узкой нише
рост популярности
Многопоточность
Легкие потоки
Эффективные планировщики
Изолированные области памяти
Изолированные сборщики мусора
Обмен сообщениями
Распределенность

Решение высокого уровня
Сетевая прозрачность
Просто посылаем сообщение процессу в другой
ноде так же, как и процессу в своей ноде
Устойчивость к ошибкам

3 уровня защиты:
Изоляция потоков
Супервайзеры
Распределенность
Подробнее о процессах

Что такое процесс?
Процессы бывают разные...
Подробнее о процессах

Мы начнем с такого процесса,
который в unix-подобных ОС
создается системным вызовом
fork()
Подробнее о процессах
Процесс имеет ресурсы:
несколько областей в оперативной памяти, для
хранения кода, данных и стека;
область в оперативной памяти для хранения
метаинформации о самом процессе
(обработчики сигналов, файловые дескрипторы,
информация для планировщика и т.д.)
Подробнее о процессах

ОС имеет таблицу процессов, а там:
PID, родительский PID, UID пользователя, GID
группы, состояние (зомби, да :)
Подробнее о процессах

Один такой процесс потребляет прилично памяти
fork() работает относительно медленно
переключение между процессами
тож не супер быстое
Подробнее о процессах

700-800 процессов, вот что может дать нам ОС
Это много или мало? Пойдем дальше и увидим.
Подробнее о процессах
Ок, эти процессы тяжелые, а бывают ли легкие?
Конечно
Нити (threads)
Легковесные процессы, работающие внутри
процесса ОС, и разделяющие его ресурсы.
Подробнее о процессах

С нитями дела обстоят получше,
ОС может нам дать десятки тысяч нитей.
Но...
Подробнее о процессах

Не каждому ЯП они доступны
Подробнее о процессах

Виртуальная машина Erlang
Кроссплатформенные нити для большинства
популярных ОС
Доступные из ЯП куда более простого
и удобного, чем C/C++
Подробнее о процессах

Причем процессы Erlang еще легче,
чем даже нити.
И их можно создать на порядок больше:
сотни тысяч.
Архитектура веб-серверов

1. Принятие запросов и роутинг
2. Бизнес-логика
3. Хранение данных
Архитектура веб-серверов

1. Nginx
2. Ruby On Rails
3. Memcached/PostreSQL
Архитектура веб-серверов

1. Х/з, как это работает.
2. Тут-то мы все большие спецы
3. Ну ж MongoDB от Redis отличаем, небось :)
Архитектура веб-серверов

1-й уровень нам не интересен.
Он просто работает и все.
И пофиг, что там происходит.
Пока...
Архитектура веб-серверов
Пока мы обслуживаем
500-800 запросов в секунду.
Но случается такое, что нам нужно обслужить
1000 запросов в секунду.
5К, 10К, 100К
И тогда 1й уровень становится очень важным.
Архитектура веб-серверов

Ну так что там, на 1-м уровне?
Архитектура веб-серверов

Если мы возьмем какой-нибудь
не очень свежий веб-сервер:
Старичок Apache
Архитектура веб-серверов
Пул из 100 (допустим) процессов ОС.
Процесс выделяется из пула
для обслуживания запроса,
вызвает бизнес-логику,
возвращает клиенту ответ
И возвращается в пул.
Архитектура веб-серверов

Важно быстро обрабатывать запрос
и возвращать процесс в пул.
Если процессы будут заняты долго,
а запросов будет много,
то сервер не сможет их все обслужить.
Архитектура веб-серверов

Важно быстро обрабатывать запрос
и возвращать процесс в пул.
Если процессы будут заняты долго,
а запросов будет много,
то сервер не сможет их все обслужить.
Архитектура веб-серверов

Поэтому nginx использует нити
и имеет большой пул
и легко его наращивает при необходимости.
И поэтому он так крут :)
Преимущества Erlang для веб

Erlang хорош на всех 3х уровнях.
Преимущества Erlang для веб

Он вполне конкурирует с nginx на 1-м уровне.
Вполне удобен для написания
бизнес-логики на 2-м уровне.
Годится и для хранения данных.
(это ежели в памяти,
хранение на диске лучше все-таки доверить БД)
Преимущества Erlang для веб

Есть еще и 4-й уровень.
Это задачи, требующие длительного времени,
и выполняющиеся отложено.
Обрезка закачанных картинок, перекодировка
видео, сбор и анализ логов и т.д.
Преимущества Erlang для веб

Вы для выполнения таких задач
используете что-нибудь типа
RabbitMQ
Преимущества Erlang для веб

На Erlang можно реализовать
все 4 уровня вашей системы,
на одной технологии,
в одной кодовой базе.
Преимущества Erlang для веб

На том же серверном железе
вы обсужите больше клиентов,
больше запросов.
Преимущества Erlang для веб

На порядок, а то и на два порядка больше :)
Я, не будучи Erlang-гуру, написал сервер,
который обслуживает 5-8К запросов в секунду
на одной машине.
Код Erlang-гуру сможет обслужить и 50К, и 100К.
Преимущества Erlang для веб

Но это мы говорим об одном сервере.
А Erlang изначально предназначен
для построения распределенных систем.
Так что если речь идет о кластере,
то в таком проекте для Erlang самое место.
Преимущества Erlang для веб

Разрабатывать распределенные системы
в принципе сложно.
Сама предметная область таит
в себе много проблем.
Erlang делает эту разработку простой
насколько это вообще возможно.
Недостатки Erlang

Малое количество разработчиков (и компаний)
Плохая работа со строками
Поддержка unicode не супер
Библиотеки третьих сторон
не production ready
Примеры использования

Поговорим о компаниях и продуктах.
Учитывая аудиторию,
первой компанией в этом списке будет...
Примеры использования

37signals
Примеры использования

37signals
Campfire, групповой веб-чат
для общения команды.
Примеры использования
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
да
Примеры использования

heroku
Примеры использования

heroku
Облачная PAAS платформа
Примеры использования
heroku
Балансировщик нагрузки
HTTP Routing Mesh
Архитектурный клей
Logplex система сбора логов
Примеры использования
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!
Примеры использования
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
Примеры использования
heroku
Fred Hebert
Автор книги
Learn You Some Erlang for Great Good!
на NYC Erlang Factory Lite 2013
Why Heroku (still) uses Erlang
Примеры использования

GitHub
Примеры использования

GitHub
https://github.com/erlang/otp
Примеры использования

GitHub
Erlectricity
GitHub pages
Примеры использования
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
Примеры использования

Facebook
Серверная часть чата
Данные 2011 года:
1 миллиард сообщений в сутки
10 миллионов активных пользователей на пике
100 серверов
Примеры использования

Amazone
SimpleDB распределенная база данных
часть Amazone Web Services
Примеры использования

Yahoo!
Yogish Baliga
на Erlang Factory SF Bay Area 2010
Deploying Erlang into a Large Organization
Примеры использования
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
Примеры использования
Riak
Распределенная Key-Value БД
CouchDB
Распределенная документ-ориентированная БД
RabbitMQ
Брокер сообщений, одна из реализаций AMPQ
Ejabberd
Jabber сервер
Место Эрланг в вебе сейчас и в будущем

Cloud Platforms
Messaging
Games
Databases
Место Эрланг в вебе сейчас и в будущем

Веб-сокеты
SPDY и HTTP 2.0
Интернет вещей
Вопросы? :)

More Related Content

PDF
Erlang ruby
KEY
Erlang&rails
PDF
Erlang мгновенное просветление
KEY
Что и почему писать на Erlang
PDF
Алексей Туля - А нужен ли вам erlang?
KEY
Отличие Erlang от объектных языков
PDF
Максим Лапшин — введение в Erlang
PDF
Лев Валкин — Кое-что про Erlang
Erlang ruby
Erlang&rails
Erlang мгновенное просветление
Что и почему писать на Erlang
Алексей Туля - А нужен ли вам erlang?
Отличие Erlang от объектных языков
Максим Лапшин — введение в Erlang
Лев Валкин — Кое-что про Erlang

What's hot (20)

KEY
Erlang for Yandex
PDF
Опыт использования Erlang в разработке многопользовательской игры
PDF
Erlang, который мы потеряли
PPT
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
PDF
Erlang railsclub - 1
PDF
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
PPT
Devpoint2 video in internet
PDF
Erlyvideo v3
PDF
Алексей Иванкин: Highload + PHP
PPTX
High load. Наследство от дядюшки Ау
PDF
Макс Волошин: Php + shell = ♥
KEY
Erlyvideo — сервер потокового видео.
PDF
Максим Лапшин. Erlang production
PPTX
Dynamic Language Runtime
PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
PPTX
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
PDF
Max Lapshin Erlyvideo V1
PDF
PDF
Там, где Rails не справляются
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
Erlang for Yandex
Опыт использования Erlang в разработке многопользовательской игры
Erlang, который мы потеряли
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
Erlang railsclub - 1
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
Devpoint2 video in internet
Erlyvideo v3
Алексей Иванкин: Highload + PHP
High load. Наследство от дядюшки Ау
Макс Волошин: Php + shell = ♥
Erlyvideo — сервер потокового видео.
Максим Лапшин. Erlang production
Dynamic Language Runtime
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Max Lapshin Erlyvideo V1
Там, где Rails не справляются
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
Ad

Viewers also liked (20)

PDF
Антон Веснин - "Обзорное сравнение серверов приложений ruby-on-rails"
PPTX
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
PPT
1000 запросов в секунду на rails (Макс Лапшин)
PDF
Oleg Gorbunov Action cable
PDF
PDF
Scala lecture #4
PDF
Under the hood of scala implicits (kl10tch 10.03.2015)
PDF
Feature suggester
PDF
Scala training
PDF
PDF
Павел Павлов - Scala для профессионалов - Joker 2013
PDF
PPTX
Scala для всех (РИФ 2015)
PDF
Under the hood of scala implicits (Scala eXchange 2014)
PDF
Backend: Пишем на Scala для браузера
ODP
Distributed erlang
Антон Веснин - "Обзорное сравнение серверов приложений ruby-on-rails"
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
1000 запросов в секунду на rails (Макс Лапшин)
Oleg Gorbunov Action cable
Scala lecture #4
Under the hood of scala implicits (kl10tch 10.03.2015)
Feature suggester
Scala training
Павел Павлов - Scala для профессионалов - Joker 2013
Scala для всех (РИФ 2015)
Under the hood of scala implicits (Scala eXchange 2014)
Backend: Пишем на Scala для браузера
Distributed erlang
Ad

Similar to “Чем хорош Erlang вообще и для веб-разработки в частности?”
 (20)

PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Erlang and OCaml Experience at Echo
PDF
07 - Web-технологии. Web-сервера
PPTX
Масштабирование и отказоустойчивость с Nginx
PDF
Баннерокрутилка на Erlang
PDF
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
PDF
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
PDF
Erlang: прагматичный рассказ про прагматичный язык
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PPTX
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
PDF
Erlyvideo
PDF
Erlang tasty & useful stuff
PPT
Макс Лапшин Erlyvideo
ODP
GetDev.NET: Снова Эрланг
PDF
Max Lapshin Erlyvideo V2
PPT
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
PPTX
Варианты развертывания проектов на M3
PPT
Erlang
PPT
Erlang – лекарство при высоких нагрузках
PPTX
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Erlang and OCaml Experience at Echo
07 - Web-технологии. Web-сервера
Масштабирование и отказоустойчивость с Nginx
Баннерокрутилка на Erlang
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Erlang: прагматичный рассказ про прагматичный язык
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Erlyvideo
Erlang tasty & useful stuff
Макс Лапшин Erlyvideo
GetDev.NET: Снова Эрланг
Max Lapshin Erlyvideo V2
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Варианты развертывания проектов на M3
Erlang
Erlang – лекарство при высоких нагрузках
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6

More from Olga Lavrentieva (20)

PPTX
15 10-22 altoros-fact_sheet_st_v4
PPTX
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
PPTX
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
PDF
Владимир Иванов (Oracle): Java: прошлое и будущее
PPTX
Brug - Web push notification
PDF
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
PPTX
Максим Жилинский: "Контейнеры: под капотом"
PPTX
Александр Протасеня: "PayPal. Различные способы интеграции"
PPTX
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
PPTX
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
PDF
Егор Воробьёв: «Ruby internals»
PDF
Андрей Колешко «Что не так с Rails»
PDF
Дмитрий Савицкий «Ruby Anti Magic Shield»
PPTX
Сергей Алексеев «Парное программирование. Удаленно»
PPTX
«Почему Spark отнюдь не так хорош»
PPTX
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
PPTX
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
PPTX
«Дизайн продвинутых нереляционных схем для Big Data»
PPTX
«Обзор возможностей Open cv»
PPTX
«Нужно больше шин! Eventbus based framework vertx.io»
15 10-22 altoros-fact_sheet_st_v4
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
Владимир Иванов (Oracle): Java: прошлое и будущее
Brug - Web push notification
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Максим Жилинский: "Контейнеры: под капотом"
Александр Протасеня: "PayPal. Различные способы интеграции"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Егор Воробьёв: «Ruby internals»
Андрей Колешко «Что не так с Rails»
Дмитрий Савицкий «Ruby Anti Magic Shield»
Сергей Алексеев «Парное программирование. Удаленно»
«Почему Spark отнюдь не так хорош»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Дизайн продвинутых нереляционных схем для Big Data»
«Обзор возможностей Open cv»
«Нужно больше шин! Eventbus based framework vertx.io»

“Чем хорош Erlang вообще и для веб-разработки в частности?”