Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Erlang, который мы потеряли

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Erlang, который мы потеряли

Avatar for Yuri Khrustalev

Yuri Khrustalev

December 29, 2015
Tweet

More Decks by Yuri Khrustalev

Other Decks in Programming

Transcript

  1. В далекой далекой ЮВ Азии • была сеть, она все

    еще жива • раздает контент • знает про геоблокирование • может рестримить видео • обрабатывает много запросов в секунду • но, когда-то давно она всего этого не умела • но очень хотела научиться
  2. Требования к системе авторизации • Понятный формат • Простота интеграции

    • Скорость работы • Масштабируемость • Надежность • Простота использования • JSON? • REST? • <1ms? • 10k клиентов за раз • автономная работа • запустил и забыл
  3. Erlang • Простой и понятный, даже старшекласнику • Многопоточный (умри

    или сделай) • Имеет нативный протокол сериализации BERT • Встроенная база данных Mnesia • Хорошо зарекомендовал себя при работе под нагрузкой • Горячая замена кода • Виртуальную машину можно править/смотреть на лету • Выбор очевиден
  4. Сервер авторизации на erlang Клиенты • nginx via lua •

    java • c++ • легко добавить новые (на самом деле нет) • кстати вы тоже не видите здесь erlang как клиента?
  5. Сервер авторизации на erlang Общается по UDP • Работает на

    уровне ноды, т.е. localhost • Максимальный размер сообщения =MTU ~1472 bytes • Очень быстро • Но есть задержки при большом количестве датаграмм • Клиенты не получают ответа -> задержка оригинального запроса
  6. Сервер авторизации на erlang Позволяет смотреть состояние виртуальной машины а

    также легко ее убивать [root@node ~]$ service authdaemon attach Attaching to /tmp/opt/authdeamon/erlang.pipe.1 (^D to exit) # нажал CTR+C BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution ... [End]
  7. Эксплуатация • Авторизационный сервис под нагрузкой часто ложится ◦ Запросы

    вызывают таймаут ◦ Клиенты просто не умеют обрабатывать такую ситуацию • erlang vm требет резолвить ноду через внешнюю сеть ◦ лечится в resolve.conf • Много новой бизнес логики связано с парсингом строк ◦ regex и прочий .split ◦ не так легко пишется
  8. Эксплуатация • jvm при рестарте erlang vm требует дополнительной логики

    подключения • Никто не пользуется хот релоудом • Просмотр состояния erlang vm опасно для сервисов • Сложности с init.d ◦ vm одна, процессов несколько ◦ изоляция erlang vm на каждый пакет • Erlang создает больше проблем, чем решает
  9. Erlang из масс • Переписываем авторизационный сервис на C++ ◦

    люди знающие erlang ушли из команды • Убираем сервис состояние стриминга внутрь стриминг серсива ◦ это же просто hashmap • Убираем интеграцию jvm с erlang vm • Не знаем что делать с UDP и BERT
  10. Выводы • Протокол - им должно быть легко пользоваться •

    Формат данных - должен быть легким для понимания • ФП - это лишь технология решения • Миллениалов оказалось сложно заставить писать на erlang • ФП не всегда KISS
  11. У меня есть мечта применить ФП • Но не erlang

    • Что может быть на уровне python в работе со строками? • Простым в использовании? ◦ Логи, init.d скрипты и пакетирование • Чтобы билдилось в одно касание? • Чтобы работало на общих протоколах? • Имело хорошую библиотеку? • Легко работало с зависимостями • Btw, у нас проекте не так много памяти