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

336 views

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
336
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
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

×