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

Post on 08-Feb-2017

229 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

об эволюции использования и наследии

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

В далекой далекой ЮВ Азии

● была сеть, она все еще жива● раздает контент● знает про геоблокирование ● может рестримить видео● обрабатывает много запросов в секунду ● но, когда-то давно она всего этого не умела● но очень хотела научиться

Требования к системе авторизации

● Понятный формат● Простота интеграции● Скорость работы● Масштабируемость● Надежность● Простота использования

● JSON?● REST?● <1ms?● 10k клиентов за раз● автономная работа● запустил и забыл

Erlang

● Простой и понятный, даже старшекласнику● Многопоточный (умри или сделай)● Имеет нативный протокол сериализации BERT● Встроенная база данных Mnesia● Хорошо зарекомендовал себя при работе под нагрузкой● Горячая замена кода● Виртуальную машину можно править/смотреть на лету● Выбор очевиден

Сеть

Сервер авторизации на erlang

Использует BERT

Сервер авторизации на erlang

Клиенты

● nginx via lua● java ● c++● легко добавить новые (на самом деле нет)● кстати вы тоже не видите здесь erlang как клиента?

Сервер авторизации на erlang

Общается по UDP

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

запроса

Сервер авторизации на erlang

Позволяет смотреть состояние виртуальной машины

а также легко ее убивать

[root@node ~]$ service authdaemon attachAttaching to /tmp/opt/authdeamon/erlang.pipe.1 (^D to exit)

# нажал CTR+CBREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution...[End]

Erlang в массы

Эксплуатация

● Авторизационный сервис под нагрузкой часто ложится○ Запросы вызывают таймаут○ Клиенты просто не умеют обрабатывать такую ситуацию

● erlang vm требет резолвить ноду через внешнюю сеть○ лечится в resolve.conf

● Много новой бизнес логики связано с парсингом строк○ regex и прочий .split ○ не так легко пишется

Эксплуатация

● jvm при рестарте erlang vm требует дополнительной логики подключения

● Никто не пользуется хот релоудом● Просмотр состояния erlang vm опасно для сервисов● Сложности с init.d

○ vm одна, процессов несколько○ изоляция erlang vm на каждый пакет

● Erlang создает больше проблем, чем решает

Что делать?

ТРИЗ: Идеальный объект — когда объекта нет, а функция его выполняется.

Erlang из масс

● Переписываем авторизационный сервис на C++○ люди знающие erlang ушли из команды

● Убираем сервис состояние стриминга внутрь стриминг серсива○ это же просто hashmap

● Убираем интеграцию jvm с erlang vm● Не знаем что делать с UDP и BERT

Выводы

● Протокол - им должно быть легко пользоваться● Формат данных - должен быть легким для понимания● ФП - это лишь технология решения

● Миллениалов оказалось сложно заставить писать на erlang● ФП не всегда KISS

У меня есть мечта применить ФП

● Но не erlang● Что может быть на уровне python в работе со строками?● Простым в использовании?

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

top related