SlideShare une entreprise Scribd logo
1  sur  45
Что и почему
писать на Erlang

      Макс Лапшин
        erlyvideo
    max@erlyvideo.org
Erlang — это круто

•   Опыт создания видеостримингового сервера
    erlyvideo
• Есть с чем сравнивать: C++, Java, ObjectiveC
• Erlang прекрасно себя показал
Erlang — это круто

• Это не больно
• Это свободная /cores по утрам
• Это возможность пускать новичков в продакшн
• Это решение проблем продакшна
Область применимости

Долгоживущие серверные приложения,
обеспечивающие коммуникацию большого числа
онлайн пользователей
Область применимости

• Игры
• Чаты, конференции
• Аудио/видео коммуникации
Область применимости

• Игры
• Чаты, конференции
• Аудио/видео коммуникации
• Коммуникация онлайн-пользователей
Это всё можно делать
•   на Java
Это всё можно делать
• на Java
• на C++
Это всё можно делать
• на Java
• на C++
• на Node.js
Это всё можно делать
• на Java
• на C++
• на Node.js
• на прочих перфокартовых технологиях
Проблемы общего
         назначения

Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации
Проблемы общего
         назначения
Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации
Проблемы общего
         назначения
Платформы общего назначения имеют проблемы,
фатальные для описываемой ситуации


В контексте этих проблем Java от бейсика не
отличается
Проблемы Java
• Утечки памяти
Проблемы Java
• Утечки памяти
• Утечки ресурсов
Проблемы Java
• Утечки памяти
• Утечки ресурсов
• Обработка ошибок
Проблемы Java
• Утечки памяти
• Утечки ресурсов
• Обработка ошибок
• Сложность параллельного программирования
Причина проблем

В языках типа Java разделены объекты и потоки
выполнения


У них разное время жизни
Причина проблем
Нелокальность исключений по отношению к
объектам


Обработка ошибок становится проблемой и
превращает код в спагетти
Причина проблем


Мутабельные данные превращают параллельное
программирование в кошмар
Результаты проблем

Привлечение новых программистов — головная боль
Их ошибки валят весь проект


Цена программирования растет
Erlang — это круто
Erlang — это круто
• Вся память разделена на изолированные потоки
  исполнения
Erlang — это круто
• Вся память разделена на изолированные потоки
  исполнения
• Общение происходит через обмен копируемыми
  сообщениями
Erlang — это круто
• Вся память разделена на изолированные потоки
    исполнения
• Общение происходит через обмен копируемыми
    сообщениями
•   Все данные немутабельны, ссылок нет
Erlang — это круто
• Вся память разделена на изолированные потоки
  исполнения
• Общение происходит через обмен копируемыми
  сообщениями
• Все данные немутабельны, ссылок нет
• Эти потоки выглядят как процессы ОС и так же
  называются — «процессы»
Erlang — это круто


Спроектирован программистами Ericsson, которые
очень хотели спать по ночам
А вы хотите, что бы ночью
   работало только ПО?
Решение проблем
• Просто и автоматически
Решение проблем
• Просто и автоматически
• Данные живут не дольше процесса
Решение проблем
• Просто и автоматически
• Данные живут не дольше процесса
• Отсутствие мутабельности и ссылок снимает
  проблему их утекания
Решение проблем
• Просто и автоматически
• Данные живут не дольше процесса
• Отсутствие мутабельности и ссылок снимает
  проблему их утекания
• Ошибки автоматически пишутся в лог и завершают
  текущий процесс
Решение проблем
• Просто и автоматически
• Данные живут не дольше процесса
• Отсутствие мутабельности и ссылок снимает
  проблему их утекания
• Ошибки автоматически пишутся в лог и завершают
  текущий процесс
• Ресурсы закрываются вместе с процессом
Let it crash


• Программистам платят только за happy path
• Продавцы продают код, а не обработку ошибок
ERror handling LANGuage
{ok, F} = file:open(“a.txt”),
{ok, Bin} = file:read(F, 1024)
soft-realtime


• Нет ссылок
• у каждого процесса изолированная куча
• сборка мусора раздельная по ядрам
Многоядерность


• Процессы изолированы
• Никаких взаимных мьютексов
• Автоматический шедулинг по ядрам из коробки
Горячая замена кода


• Деплой кода без отключения онлайн пользователей
Легкая кластеризация


• Сообщения точно так же копируются по сети
• Идентификаторы процессов прозрачно переходят
  по сети
Говорят, Node.js круче
• Нам не нужны изолированные треды
• Нам не нужна многопроцессорность из коробки
• Нам не нужна готовая инфраструктура обработки
  ошибок
• Нам не нужна прозрачная сетевая работа
• Мы выбираем server-side JS, потому что мы знаем JS
Evented — шаг назад

• Evented подход превращает код в спагетти
• Обработка ошибок в коллбеках ещё сложнее чем
  try/catch
• Ни одна указанная проблема не решается
• Годится для nginx
В Erlang и это круче

{ok, F} = http_file:open(“http://ya.ru/”),

{ok, Bin} = http_file:read(F, 1024)
Резюме

•   Классические решения имеют проблемы,
    вылезающие в продакшне
• Проблемы дизайна усложняют включение новых
    программистов
• Некоторые «модные» технологии ничего нового не
    привносят
Резюме

•   В Erlang дизайн платформы решает указанные
    проблем
• Удешевляется поддержка и программирование
• Растет плотность информации в коде (до 10 раз)
• Облегчается включение новых программистов
Вопросы?

  Макс Лапшин
max@erlyvideo.org

Contenu connexe

Tendances

ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
Ontico
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
rit2011
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
it-people
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Daniel Podolsky
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 

Tendances (19)

Erlang railsclub - 1
Erlang   railsclub - 1Erlang   railsclub - 1
Erlang railsclub - 1
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
 
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
ELK: менеджмент логов, быстрая локализация проблем / Сергей Шумов (News360)
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
Там, где Rails не справляются
Там, где Rails не справляютсяТам, где Rails не справляются
Там, где Rails не справляются
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Sivko
SivkoSivko
Sivko
 
Алексей Федоров
Алексей ФедоровАлексей Федоров
Алексей Федоров
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Андрей Акиньшин
Андрей АкиньшинАндрей Акиньшин
Андрей Акиньшин
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 

En vedette

CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программирования
Yandex
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
Yuri Zhloba
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
Alexander Podkhalyuzin
 

En vedette (20)

CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере NitrogenCodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
 
Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTP
 
Алексей Воинов — Языки программирования
Алексей Воинов — Языки программированияАлексей Воинов — Языки программирования
Алексей Воинов — Языки программирования
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитатьВсе, что вы хотели знать о Rebar, но ленились прочитать
Все, что вы хотели знать о Rebar, но ленились прочитать
 
Dive into SObjectizer 5.5. Introductory part
Dive into SObjectizer 5.5. Introductory partDive into SObjectizer 5.5. Introductory part
Dive into SObjectizer 5.5. Introductory part
 
What is SObjectizer 5.5
What is SObjectizer 5.5What is SObjectizer 5.5
What is SObjectizer 5.5
 
Lec 2
Lec 2Lec 2
Lec 2
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Scala #2
Scala #2Scala #2
Scala #2
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Scala #4
Scala #4Scala #4
Scala #4
 
Scala training
Scala trainingScala training
Scala training
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala #5
Scala #5Scala #5
Scala #5
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 

Similaire à Что и почему писать на Erlang

Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
Max Lapshin
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
Max Lapshin Erlyvideo V1
Max Lapshin Erlyvideo V1Max Lapshin Erlyvideo V1
Max Lapshin Erlyvideo V1
guest092df8
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
 

Similaire à Что и почему писать на Erlang (20)

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

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

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

 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Max Lapshin Erlyvideo V1
Max Lapshin Erlyvideo V1Max Lapshin Erlyvideo V1
Max Lapshin Erlyvideo V1
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Lesson 01
Lesson 01Lesson 01
Lesson 01
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Ryazan
RyazanRyazan
Ryazan
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 

Plus de Max Lapshin (10)

Flussonic IPTV OTT
Flussonic IPTV OTTFlussonic IPTV OTT
Flussonic IPTV OTT
 
Pulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядовPulsedb — система хранения временных рядов
Pulsedb — система хранения временных рядов
 
Видеостриминг на 10 ГБит/с
Видеостриминг на 10 ГБит/сВидеостриминг на 10 ГБит/с
Видеостриминг на 10 ГБит/с
 
Rails, Eventmachine, Erlang
Rails, Eventmachine, ErlangRails, Eventmachine, Erlang
Rails, Eventmachine, Erlang
 
Code generation in Erlang
Code generation in ErlangCode generation in Erlang
Code generation in Erlang
 
Актуальное состояние вещания видео в интернете
Актуальное состояние вещания видео в интернетеАктуальное состояние вещания видео в интернете
Актуальное состояние вещания видео в интернете
 
Http streaming
Http streamingHttp streaming
Http streaming
 
Devpoint2 video in internet
Devpoint2 video in internetDevpoint2 video in internet
Devpoint2 video in internet
 
Erlyvideo
ErlyvideoErlyvideo
Erlyvideo
 
кеширование в бд
кеширование в бдкеширование в бд
кеширование в бд
 

Что и почему писать на Erlang

  • 1. Что и почему писать на Erlang Макс Лапшин erlyvideo max@erlyvideo.org
  • 2. Erlang — это круто • Опыт создания видеостримингового сервера erlyvideo • Есть с чем сравнивать: C++, Java, ObjectiveC • Erlang прекрасно себя показал
  • 3. Erlang — это круто • Это не больно • Это свободная /cores по утрам • Это возможность пускать новичков в продакшн • Это решение проблем продакшна
  • 4. Область применимости Долгоживущие серверные приложения, обеспечивающие коммуникацию большого числа онлайн пользователей
  • 5. Область применимости • Игры • Чаты, конференции • Аудио/видео коммуникации
  • 6. Область применимости • Игры • Чаты, конференции • Аудио/видео коммуникации • Коммуникация онлайн-пользователей
  • 7. Это всё можно делать • на Java
  • 8. Это всё можно делать • на Java • на C++
  • 9. Это всё можно делать • на Java • на C++ • на Node.js
  • 10. Это всё можно делать • на Java • на C++ • на Node.js • на прочих перфокартовых технологиях
  • 11. Проблемы общего назначения Платформы общего назначения имеют проблемы, фатальные для описываемой ситуации
  • 12. Проблемы общего назначения Платформы общего назначения имеют проблемы, фатальные для описываемой ситуации
  • 13. Проблемы общего назначения Платформы общего назначения имеют проблемы, фатальные для описываемой ситуации В контексте этих проблем Java от бейсика не отличается
  • 15. Проблемы Java • Утечки памяти • Утечки ресурсов
  • 16. Проблемы Java • Утечки памяти • Утечки ресурсов • Обработка ошибок
  • 17. Проблемы Java • Утечки памяти • Утечки ресурсов • Обработка ошибок • Сложность параллельного программирования
  • 18. Причина проблем В языках типа Java разделены объекты и потоки выполнения У них разное время жизни
  • 19. Причина проблем Нелокальность исключений по отношению к объектам Обработка ошибок становится проблемой и превращает код в спагетти
  • 20. Причина проблем Мутабельные данные превращают параллельное программирование в кошмар
  • 21. Результаты проблем Привлечение новых программистов — головная боль Их ошибки валят весь проект Цена программирования растет
  • 23. Erlang — это круто • Вся память разделена на изолированные потоки исполнения
  • 24. Erlang — это круто • Вся память разделена на изолированные потоки исполнения • Общение происходит через обмен копируемыми сообщениями
  • 25. Erlang — это круто • Вся память разделена на изолированные потоки исполнения • Общение происходит через обмен копируемыми сообщениями • Все данные немутабельны, ссылок нет
  • 26. Erlang — это круто • Вся память разделена на изолированные потоки исполнения • Общение происходит через обмен копируемыми сообщениями • Все данные немутабельны, ссылок нет • Эти потоки выглядят как процессы ОС и так же называются — «процессы»
  • 27. Erlang — это круто Спроектирован программистами Ericsson, которые очень хотели спать по ночам
  • 28. А вы хотите, что бы ночью работало только ПО?
  • 29. Решение проблем • Просто и автоматически
  • 30. Решение проблем • Просто и автоматически • Данные живут не дольше процесса
  • 31. Решение проблем • Просто и автоматически • Данные живут не дольше процесса • Отсутствие мутабельности и ссылок снимает проблему их утекания
  • 32. Решение проблем • Просто и автоматически • Данные живут не дольше процесса • Отсутствие мутабельности и ссылок снимает проблему их утекания • Ошибки автоматически пишутся в лог и завершают текущий процесс
  • 33. Решение проблем • Просто и автоматически • Данные живут не дольше процесса • Отсутствие мутабельности и ссылок снимает проблему их утекания • Ошибки автоматически пишутся в лог и завершают текущий процесс • Ресурсы закрываются вместе с процессом
  • 34. Let it crash • Программистам платят только за happy path • Продавцы продают код, а не обработку ошибок
  • 35. ERror handling LANGuage {ok, F} = file:open(“a.txt”), {ok, Bin} = file:read(F, 1024)
  • 36. soft-realtime • Нет ссылок • у каждого процесса изолированная куча • сборка мусора раздельная по ядрам
  • 37. Многоядерность • Процессы изолированы • Никаких взаимных мьютексов • Автоматический шедулинг по ядрам из коробки
  • 38. Горячая замена кода • Деплой кода без отключения онлайн пользователей
  • 39. Легкая кластеризация • Сообщения точно так же копируются по сети • Идентификаторы процессов прозрачно переходят по сети
  • 40. Говорят, Node.js круче • Нам не нужны изолированные треды • Нам не нужна многопроцессорность из коробки • Нам не нужна готовая инфраструктура обработки ошибок • Нам не нужна прозрачная сетевая работа • Мы выбираем server-side JS, потому что мы знаем JS
  • 41. Evented — шаг назад • Evented подход превращает код в спагетти • Обработка ошибок в коллбеках ещё сложнее чем try/catch • Ни одна указанная проблема не решается • Годится для nginx
  • 42. В Erlang и это круче {ok, F} = http_file:open(“http://ya.ru/”), {ok, Bin} = http_file:read(F, 1024)
  • 43. Резюме • Классические решения имеют проблемы, вылезающие в продакшне • Проблемы дизайна усложняют включение новых программистов • Некоторые «модные» технологии ничего нового не привносят
  • 44. Резюме • В Erlang дизайн платформы решает указанные проблем • Удешевляется поддержка и программирование • Растет плотность информации в коде (до 10 раз) • Облегчается включение новых программистов
  • 45. Вопросы? Макс Лапшин max@erlyvideo.org

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n