1. Чем хорош Erlang вообще и для
веб-разработки в частности?
Юра Жлоба aka yzh44yzh
2. Сегодня я расскажу:
Что такое Erlang
Архитектура веб-серверов
Преимущества Erlang для веб
Примеры использования: компании и продукты
Место Erlang в вебе сейчас и в будущем
3. Клевая картинка
Без чего не может
обойтись никакая
презентация.
Да, картинка не в тему.
Но это не важно. Жанр
презентации обязывает,
чтобы клевые картинки
были. А вот что б
картинки были в тему, к
этому не обязывает :)
10. Подробнее о процессах
Мы начнем с такого процесса,
который в unix-подобных ОС
создается системным вызовом
fork()
11. Подробнее о процессах
Процесс имеет ресурсы:
несколько областей в оперативной памяти, для
хранения кода, данных и стека;
область в оперативной памяти для хранения
метаинформации о самом процессе
(обработчики сигналов, файловые дескрипторы,
информация для планировщика и т.д.)
12. Подробнее о процессах
ОС имеет таблицу процессов, а там:
PID, родительский PID, UID пользователя, GID
группы, состояние (зомби, да :)
13. Подробнее о процессах
Один такой процесс потребляет прилично памяти
fork() работает относительно медленно
переключение между процессами
тож не супер быстое
15. Подробнее о процессах
Ок, эти процессы тяжелые, а бывают ли легкие?
Конечно
Нити (threads)
Легковесные процессы, работающие внутри
процесса ОС, и разделяющие его ресурсы.
16. Подробнее о процессах
С нитями дела обстоят получше,
ОС может нам дать десятки тысяч нитей.
Но...
18. Подробнее о процессах
Виртуальная машина Erlang
Кроссплатформенные нити для большинства
популярных ОС
Доступные из ЯП куда более простого
и удобного, чем C/C++
19. Подробнее о процессах
Причем процессы Erlang еще легче,
чем даже нити.
И их можно создать на порядок больше:
сотни тысяч.
24. Архитектура веб-серверов
Пока мы обслуживаем
500-800 запросов в секунду.
Но случается такое, что нам нужно обслужить
1000 запросов в секунду.
5К, 10К, 100К
И тогда 1й уровень становится очень важным.
27. Архитектура веб-серверов
Пул из 100 (допустим) процессов ОС.
Процесс выделяется из пула
для обслуживания запроса,
вызвает бизнес-логику,
возвращает клиенту ответ
И возвращается в пул.
28. Архитектура веб-серверов
Важно быстро обрабатывать запрос
и возвращать процесс в пул.
Если процессы будут заняты долго,
а запросов будет много,
то сервер не сможет их все обслужить.
29. Архитектура веб-серверов
Важно быстро обрабатывать запрос
и возвращать процесс в пул.
Если процессы будут заняты долго,
а запросов будет много,
то сервер не сможет их все обслужить.
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
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
да
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
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
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