Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

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

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, у нас проекте не так много памяти