Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Что и почему писать на Erlang писать на Erlang Макс Лапшин  erlyvideo [email_address]
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 раз) Облегчается включение новых программистов
Вопросы? Макс Лапшин [email_address]

More Related Content

что и почему вы должны программировать на Erlang.максим лапшин. зал 4

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