Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

Erlang ruby