Петр Курышев, itmozg

16
Erlang/OTP: чтобы не падало Курышев Петр, [email protected]

Upload: diana-dymolazova

Post on 18-Nov-2014

294 views

Category:

Technology


5 download

DESCRIPTION

Erlang/OTP: чтобы не падало

TRANSCRIPT

Page 1: Петр Курышев, ITmozg

Erlang/OTP: чтобы не падало

Курышев Петр, [email protected]

Page 2: Петр Курышев, ITmozg

2

Erlang

2

• Функциональный язык программирования (не чистый)

• Писать для распределенности и отказоустойчивости - легко

• Писать логику - сложно

Page 3: Петр Курышев, ITmozg

3

Erlang и другие

3

• У каждой технологии - своя ниша

• Не противопоставлять!

• Использовать вместе для достижения целей

Page 4: Петр Курышев, ITmozg

4

Все привыкли к ООП

4

• Процесс - как экземпляр класса

• Состояние - внутри модуля

• Модуль - как декларация класса

Page 5: Петр Курышев, ITmozg

5

Open Telecom Platform

5

• Можно все писать самому, но зачем?

• Общий путь для всехspawn -> init -> loop calls -> ... -> exit

Page 6: Петр Курышев, ITmozg

6

Gen server

6

• gen_server:start_link

• gen_server:call и genserver:cast

• синхронно и асинхронно, соответственно

Page 7: Петр Курышев, ITmozg

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

8

Супервизор

8

• Наблюдающий и наблюдаемый

• Спецификация «ребенка»:

• Супервизоры супервизоров или кто следит за следящими

{ChildId, StartFunc, Restart, Shutdown, Type, Modules}.

Page 9: Петр Курышев, ITmozg

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

10

Наеродные воркеры

10

• Python/Django

• Ruby on Rails

• Node.js

Page 11: Петр Курышев, ITmozg

11

Слежка за чужими детьми

11

• Порты Erlang

• Port против Lined Port

• Другие способы

Page 12: Петр Курышев, ITmozg

12

Способ взаимодействия

12

• Вызываем внешние процессы

• NIFы

• ErlPort (http://hlabs.org/development/erlang/ports.html)

Page 13: Петр Курышев, ITmozg

13

Что бывает когда падает

13

Page 14: Петр Курышев, ITmozg

14

Let it fail

14

• Быстро поднятое не считается упавшим

• Уронить до конца и поднять с самого начала

Page 15: Петр Курышев, ITmozg

15

Храните состояние вовне

15

• Очереди сообщений

• Быстрые key/value хранилища

• Всегда можно что-то потерять пока оно не записано в постоянное хранилище

Page 16: Петр Курышев, ITmozg

16

Вопросы!

16

• Пообщаемся сейчас

• ...но можно задать и потом:[email protected]