Your SlideShare is downloading. ×
0
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Петр Курышев, ITmozg
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

160

Published on

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

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
160
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×