Erlang/OTP: чтобы не падало
Курышев Петр, p.kurishev@itmozg.ru
2
Erlang
2
• Функциональный язык
программирования (не чистый)
• Писать для распределенности и
отказоустойчивости - легко
•...
3
Erlang и другие
3
• У каждой технологии - своя ниша
• Не противопоставлять!
• Использовать вместе для
достижения целей
4
Все привыкли к ООП
4
• Процесс - как экземпляр класса
• Состояние - внутри модуля
• Модуль - как декларация класса
5
Open Telecom Platform
5
• Можно все писать самому, но
зачем?
• Общий путь для всех
spawn -> init -> loop calls -> ... ->...
6
Gen server
6
• gen_server:start_link
• gen_server:call и genserver:cast
• синхронно и асинхронно,
соответственно
7
Горячая замена кода
7
code_change(_OldVsn, State, _Extra) ->
%% No change planned. The function is there for the behavio...
8
Супервизор
8
• Наблюдающий и наблюдаемый
• Спецификация «ребенка»:
• Супервизоры супервизоров или кто
следит за следящим...
99
child_spec() = {Id,StartFunc,Restart,Shutdown,Type,Modules}
Id = term()
StartFunc = {M,F,A}
M = F = atom()
A = [term()]...
10
Наеродные воркеры
10
• Python/Django
• Ruby on Rails
• Node.js
11
Слежка за чужими детьми
11
• Порты Erlang
• Port против Lined Port
• Другие способы
12
Способ взаимодействия
12
• Вызываем внешние процессы
• NIFы
• ErlPort
(http://hlabs.org/development/erlang/po
rts.html)
13
Что бывает когда падает
13
1414
• Быстро поднятое не считается
упавшим
• Уронить до конца и поднять с самого
начала
15
Храните состояние вовне
15
• Очереди сообщений
• Быстрые key/value хранилища
• Всегда можно что-то потерять пока
оно не...
16
Вопросы!
16
• Пообщаемся сейчас
• ...но можно задать и потом:
p.kurishev@itmozg.ru
Upcoming SlideShare
Loading in...5
×

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

182

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
182
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Erlang/OTP: чтобы не падало Курышев Петр, p.kurishev@itmozg.ru
  2. 2. 2 Erlang 2 • Функциональный язык программирования (не чистый) • Писать для распределенности и отказоустойчивости - легко • Писать логику - сложно
  3. 3. 3 Erlang и другие 3 • У каждой технологии - своя ниша • Не противопоставлять! • Использовать вместе для достижения целей
  4. 4. 4 Все привыкли к ООП 4 • Процесс - как экземпляр класса • Состояние - внутри модуля • Модуль - как декларация класса
  5. 5. 5 Open Telecom Platform 5 • Можно все писать самому, но зачем? • Общий путь для всех spawn -> init -> loop calls -> ... -> exit
  6. 6. 6 Gen server 6 • gen_server:start_link • gen_server:call и genserver:cast • синхронно и асинхронно, соответственно
  7. 7. 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}}.
  8. 8. 8 Супервизор 8 • Наблюдающий и наблюдаемый • Спецификация «ребенка»: • Супервизоры супервизоров или кто следит за следящими {ChildId, StartFunc, Restart, Shutdown, Type, Modules}.
  9. 9. 99 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() Какой должен быть ребенок
  10. 10. 10 Наеродные воркеры 10 • Python/Django • Ruby on Rails • Node.js
  11. 11. 11 Слежка за чужими детьми 11 • Порты Erlang • Port против Lined Port • Другие способы
  12. 12. 12 Способ взаимодействия 12 • Вызываем внешние процессы • NIFы • ErlPort (http://hlabs.org/development/erlang/po rts.html)
  13. 13. 13 Что бывает когда падает 13
  14. 14. 1414 • Быстро поднятое не считается упавшим • Уронить до конца и поднять с самого начала
  15. 15. 15 Храните состояние вовне 15 • Очереди сообщений • Быстрые key/value хранилища • Всегда можно что-то потерять пока оно не записано в постоянное хранилище
  16. 16. 16 Вопросы! 16 • Пообщаемся сейчас • ...но можно задать и потом: p.kurishev@itmozg.ru
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×