Петр Курышев, ITmozg
-
Upload
diana-dymolazova -
Category
Technology
-
view
294 -
download
5
description
Transcript of Петр Курышев, ITmozg
![Page 2: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/2.jpg)
2
Erlang
2
• Функциональный язык программирования (не чистый)
• Писать для распределенности и отказоустойчивости - легко
• Писать логику - сложно
![Page 3: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/3.jpg)
3
Erlang и другие
3
• У каждой технологии - своя ниша
• Не противопоставлять!
• Использовать вместе для достижения целей
![Page 4: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/4.jpg)
4
Все привыкли к ООП
4
• Процесс - как экземпляр класса
• Состояние - внутри модуля
• Модуль - как декларация класса
![Page 5: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/5.jpg)
5
Open Telecom Platform
5
• Можно все писать самому, но зачем?
• Общий путь для всехspawn -> init -> loop calls -> ... -> exit
![Page 6: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/6.jpg)
6
Gen server
6
• gen_server:start_link
• gen_server:call и genserver:cast
• синхронно и асинхронно, соответственно
![Page 7: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/7.jpg)
7
Горячая замена кода
7
code_change(_OldVsn, State, _Extra) -> %% No change planned. The function is there for the behaviour, %% but will not be used. Only a version on the next {ok, State}.
code_change({down, _Vsn}, {Chs, N}, _Extra) -> {ok, Chs};code_change(_Vsn, Chs, _Extra) -> {ok, {Chs, 0}}.
![Page 8: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/8.jpg)
8
Супервизор
8
• Наблюдающий и наблюдаемый
• Спецификация «ребенка»:
• Супервизоры супервизоров или кто следит за следящими
{ChildId, StartFunc, Restart, Shutdown, Type, Modules}.
![Page 9: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/9.jpg)
9
Супервизор
9
child_spec() = {Id,StartFunc,Restart,Shutdown,Type,Modules} Id = term() StartFunc = {M,F,A} M = F = atom() A = [term()] Restart = permanent | transient | temporary Shutdown = brutal_kill | int()>0 | infinity Type = worker | supervisor Modules = [Module] | dynamic Module = atom()
Какой должен быть ребенок
![Page 10: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/10.jpg)
10
Наеродные воркеры
10
• Python/Django
• Ruby on Rails
• Node.js
![Page 11: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/11.jpg)
11
Слежка за чужими детьми
11
• Порты Erlang
• Port против Lined Port
• Другие способы
![Page 12: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/12.jpg)
12
Способ взаимодействия
12
• Вызываем внешние процессы
• NIFы
• ErlPort (http://hlabs.org/development/erlang/ports.html)
![Page 13: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/13.jpg)
13
Что бывает когда падает
13
![Page 14: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/14.jpg)
14
Let it fail
14
• Быстро поднятое не считается упавшим
• Уронить до конца и поднять с самого начала
![Page 15: Петр Курышев, ITmozg](https://reader036.fdocument.pub/reader036/viewer/2022082603/546e6827af795980298b56a5/html5/thumbnails/15.jpg)
15
Храните состояние вовне
15
• Очереди сообщений
• Быстрые key/value хранилища
• Всегда можно что-то потерять пока оно не записано в постоянное хранилище