SlideShare a Scribd company logo
yo-ho-ho
Hello I’m
Alexey
Алексей Осипенко
cimon.io
«Эликсир счастья»
Эликсир на сервере
или
/README.md
Нет смысла пересказывать
cimon.io
cimon.io
с докеромЭликсир
cimon.io
с докеромЭликсир
это
cimon.io
с докеромЭликсир
как без
докера
это
cimon.io
с докеромЭликсир
с докером
только с
как без
докера
это
cimon.io
Козу вверх
кто любит
эликсир
cimon.io
Козу вверх
кто любит эликсир
cimon.io
Козу вверх
кто любит эликсир
cimon.io
Эликсир не панацея
cimon.io
не элексирЭликсир
Но ведь, можно же!
Не стоит деплоить с горячей заменой кода
Но ведь, можно же!
Не стоит деплоить с горячей заменой кода
Можно, но не стоит
cimon.io
Используется на боевом сервере
Сейчас эликсир-приложение
cimon.io
Справляется отлично
И, знаете, сервер
со всеми задачами!
cimon.io
Развертывание на сервере
Но вот
не такое радужное
cimon.io
Конечно же,
заслуга эликсира –
это эрланг
cimon.io
BEAM
А заслуга эрланга – это его
cimon.io
все является процессами,
а «процесс» – это актор
В эрланге
cimon.io
Снаружи
И процесс
выглядит как
черный ящик
Снаружи
мы ничего не знаем про
текущее состояние
cimon.io
Внутри
черный ящик превращается в
замкнутое пространство
Внутри
приходит
извне
параметрами
состояние
cimon.io
хранение данных управляется
виртуальной машиной,
а не акторами
В итоге,
cimon.io
Чистые функции
А внутри акторов у нас
cimon.io
Чистые вызовы функций
А у программиста снаружи используются
умирать весело
как концепт, говорят нам,
Акторы,
что
001 002 003004 005006
Совершенно неважно есть ли актор прямо сейчас
или не нужно заботиться о том, чтобы актор жил
cimon.io
можно поднять новый актор, а старый убить
Данные хранятся в BEAM, поэтому
006 007
Данные
006 007
Данные
cimon.io
проблема?
Может быть есть какая-нибудь
cimon.io
Миграция состояния
данных актора — серьезная
проблема
006 007
данные
Мы хотим, чтобы
подходили одинаково хорошо
для всех версий акторов
данные
А в итоге
нужны разные.
Наш актор а после обновления
был рокер,
стал хиппи
Миграция данных
не автоматизируется
И в общем случае
пишется вручную
для всех релизов
cimon.io
Не стоит деплоить с горячей заменой кода
Вывод, который был сделан:
cimon.io
по делу
Теперь давайте
обсудим
существующие решения
Процесс релиза
прост, как столб
/README.md
И описан
чтение ENV переменных
происходит
на этапе компиляции
CONFIG.EXS
cimon.io
Ubuntu
Проблема межплатформенной компиляции.
MacOS,
То, что компилировалось под
не запустится под
cimon.io
Проблема
миграций
базы данных
cimon.io
Проблема
миграций
базы данных
cimon.io
> _build/production/rel/vault8/bin/vault8 command
'Elixir.Vault8.Release.Tasks' migrate
The Twelve Factors
Config in the environment
Stateless processes
Dev/prod as similar as possible
Admin processes
несоблюдение
Тотальное
cimon.io
Платформа билда и запуска должны совпадать
Процесс релиза затрагивает все акторы
Процесс релиза уникален для системы
Четыре бочки дегтяв итоге имеем
Сервисы снаружи никак не управляемы
cimon.io
Все будет хорошо.
Но не стоит расстраиваться.
Эликсир молод, горяч
активно развивается
и
и
alexey@cimon.io
Спасибо
за
внимание
telegram@aratak
alexey.osipenko@fb.me
https://t.me/itextrapolation

More Related Content

PDF
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine
PDF
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club Ukraine
PDF
— An async template - Oleksandr Khokhlov | Elixir Club Ukraine
PDF
BEAM architecture handbook - Andrea Leopardi | Elixir Club Ukraine
PDF
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club Ukraine
PDF
— Knock, knock — An async templates — Who’s there? - Alexander Khokhlov | ...
PDF
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3
PDF
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi...
Kubernetes + Docker + Elixir - Alexei Sholik, Andrew Dryga | Elixir Club Ukraine
Integrating 3rd parties with Ecto - Eduardo Aguilera | Elixir Club Ukraine
— An async template - Oleksandr Khokhlov | Elixir Club Ukraine
BEAM architecture handbook - Andrea Leopardi | Elixir Club Ukraine
You ain't gonna need write a GenServer - Ulisses Almeida | Elixir Club Ukraine
— Knock, knock — An async templates — Who’s there? - Alexander Khokhlov | ...
Performance measurement methodology — Maksym Pugach | Elixir Evening Club 3
Erlang cluster. How is it? Production experience. — Valerii Vasylkov | Elixi...

More from Elixir Club (20)

PDF
Promo Phx4RailsDevs - Volodya Sveredyuk
PDF
Web of today — Alexander Khokhlov
PDF
ElixirConf Eu 2018, what was it like? – Eugene Pirogov
PDF
Implementing GraphQL API in Elixir – Victor Deryagin
PDF
WebPerformance: Why and How? – Stefan Wintermeyer
PDF
GenServer in Action – Yurii Bodarev
PDF
Russian Doll Paradox: Elixir Web without Phoenix - Alex Rozumii
PDF
Practical Fault Tolerance in Elixir - Alexei Sholik
PDF
Phoenix and beyond: Things we do with Elixir - Alexander Khokhlov
PDF
Monads are just monoids in the category of endofunctors - Ike Kurghinyan
PDF
Craft effective API with GraphQL and Absinthe - Ihor Katkov
PDF
Elixir in a service of government - Alex Troush
PDF
Pattern matching in Elixir by example - Alexander Khokhlov
PDF
Ecto and Phoenix: Doing web with Elixir - Yurii Bodarev
PDF
Handling external APIs with Elixir - Alex Rozumii
PDF
Public Elixir in a service of government - Alex Troush
PDF
How I did create Telegram bot - Roman Senin
PDF
Designing scalable application: from umbrella project to distributed system -...
PDF
Deploying Elixir/Phoenix with Distillery - Yaroslav Martsynuyk
PPTX
Erlang Common tests - Sergey Bondarchuk
Promo Phx4RailsDevs - Volodya Sveredyuk
Web of today — Alexander Khokhlov
ElixirConf Eu 2018, what was it like? – Eugene Pirogov
Implementing GraphQL API in Elixir – Victor Deryagin
WebPerformance: Why and How? – Stefan Wintermeyer
GenServer in Action – Yurii Bodarev
Russian Doll Paradox: Elixir Web without Phoenix - Alex Rozumii
Practical Fault Tolerance in Elixir - Alexei Sholik
Phoenix and beyond: Things we do with Elixir - Alexander Khokhlov
Monads are just monoids in the category of endofunctors - Ike Kurghinyan
Craft effective API with GraphQL and Absinthe - Ihor Katkov
Elixir in a service of government - Alex Troush
Pattern matching in Elixir by example - Alexander Khokhlov
Ecto and Phoenix: Doing web with Elixir - Yurii Bodarev
Handling external APIs with Elixir - Alex Rozumii
Public Elixir in a service of government - Alex Troush
How I did create Telegram bot - Roman Senin
Designing scalable application: from umbrella project to distributed system -...
Deploying Elixir/Phoenix with Distillery - Yaroslav Martsynuyk
Erlang Common tests - Sergey Bondarchuk
Ad

Deploying Elixir application - Alexey Osipenko