Distributed erlang

678 views

Published on

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
678
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Distributed erlang

  1. 1. Распределенный Erlang Юра Жлоба для Minsk F# User Group
  2. 2. Что такое распределенная система? Лесли Лэмпорт A distributed system is one in which the failure of a computer You didn’t even know existed can render your own computer unusable.
  3. 3. Что такое распределенная система? Хранилища данных: Google BigTable, Amazon SimpleDB, Hadoop, Cassandra множество их, в т.ч. и написаные на Erlang: Riak, CouchDB
  4. 4. Что такое распределенная система? Сервисы Google Search, Поиск Яндекса, WhatsApp множество их, в т.ч. и написаные частично на Erlang: Hadoop, Github
  5. 5. Что такое распределенная система? Социальные сети: Facebook, Twitter, Вконтакте
  6. 6. Что такое распределенная система? Многопользовательские игры: World of Warcraft World of Tanks Call of Duty Black Ops
  7. 7. Зачем их делают? Хранить данных больше, чем может поместиться на одной машине Обрабатывать данных больше, чем можно обработать на одной машине Повысить надежность системы Построить масштабируемую систему, способную адаптироваться к росту нагрузки Сервисы, распределенные по своей сути (CDN -- content delivery network)
  8. 8. Какова надежность Erlang? Распределенность в Erlang Изначально реализована ради надежности
  9. 9. Какова надежность Erlang? 90% 99% 99,9% 99,99% 99,999% 99,9999% 99,99999% 99,999999% 99,9999999% < месяц < 4 дня < 9 часов < 1 час ~ 5 минут ~ 31 секунда ~ 3 секудны ~ 300 милисекунд ~ 30 милисекунд
  10. 10. Какова надежность Erlang? 99s http://ninenines.eu/ Cowboy, Ranch, Bullet, Sheriff
  11. 11. Терминология Приложение (Application) Узел (Node) Кластер (Cluster)
  12. 12. Что такого особенного в Erlang? Единый подход и к локальному и к распределенному программированию
  13. 13. Что такого особенного в Erlang? Процесс: имеет публичный АПИ (реагирует на определенные сообщения) хранит внутри себя состояние (некие данные) общается с другими процессами, пользуясь их публичным АПИ имеет закрытую бизнес-логику
  14. 14. Что такого особенного в Erlang? Процесс: то же самое, что объект в ООП :)
  15. 15. Что такого особенного в Erlang? Приложение: имеет публичный АПИ хранит внутри себя данные общается с другими приложениями, пользуясь их публичным АПИ имеет закрытую бизнес-логику
  16. 16. Что такого особенного в Erlang? Узел: имеет публичный АПИ хранит внутри себя данные общается с клиентами и другими узлами имеет закрытую бизнес-логику
  17. 17. Что такого особенного в Erlang? Кластер: имеет публичный АПИ хранит внутри себя данные общается с клиентами имеет закрытую бизнес-логику
  18. 18. Что такого особенного в Erlang? Сетевая прозрачность
  19. 19. Что такого особенного в Erlang? Сетевая прозрачность для сообщений
  20. 20. Что такого особенного в Erlang? Сетевая прозрачность для мониторинга
  21. 21. Что такого особенного в Erlang? Мониторинг между процессами в приложении в узле в кластере
  22. 22. Что такого особенного в Erlang? Мониторинг Takeover Failover
  23. 23. Что такого сложного в распределенных системах? Оптимистичные разработчики деляют неявные предположения, а потом ...
  24. 24. Что такого сложного в распределенных системах? Сеть надежна, соединение между узлами никогда не обрывается
  25. 25. Что такого сложного в распределенных системах? Данные по сети передаются мгновенно
  26. 26. Что такого сложного в распределенных системах? Пропускная способность сети не ограничена
  27. 27. Что такого сложного в распределенных системах? Сеть безопасна
  28. 28. Что такого сложного в распределенных системах? Топология сети не меняется
  29. 29. Что такого сложного в распределенных системах? Есть только один администратор, который все знает о сети
  30. 30. Что такого сложного в распределенных системах? Стоимость передачи данных нулевая
  31. 31. Что такого сложного в распределенных системах? Сеть однородна
  32. 32. Erlang кластер trusted environment
  33. 33. Erlang кластер trusted environment в локальной сети защищенной от внешнего мира
  34. 34. Erlang кластер Иначе нужно строить защищенный внешний АПИ (HTTP REST например)
  35. 35. Erlang кластер erl -name node@host
  36. 36. Erlang кластер erl -name my_node@127.0.0.1
  37. 37. Erlang кластер Соединения узлов каждый с каждым
  38. 38. Erlang кластер Соединения узлов каждый с каждым 4 узла – 6 соединений 10 узлов – 45 соединений и дальше в арифметической прогрессии
  39. 39. Erlang кластер Служебный траффик Heart Beat
  40. 40. Erlang кластер Скрытые узлы erl -name node@host -hidden
  41. 41. Erlang кластер Куки ~/.erlang.cookie erl -setcookie abc erlang:set_cookie(Node, Cookie)
  42. 42. Erlang кластер epmd Erlang Port Mapper Daemon
  43. 43. Erlang кластер empd один на машину хранит имя-порт для каждого узла
  44. 44. Erlang кластер Empd Name listing Port queries
  45. 45. Модули и функции global Регистрация процессов в глобальной области видимости Глобальные локи на ресурсы Поддержка сети
  46. 46. Модули и функции global:register_name(Name, Pid) global:re_register_name(Name, Pid) global:whereis_name(Name)
  47. 47. Модули и функции Naming Conflict global:register_name(Name, Pid, Resolve)
  48. 48. Модули и функции Naming Conflict fun global:random_exit_name/3 fun global:random_notify_name/3 fun global:notify_all_name/3
  49. 49. Модули и функции net_adm Various Erlang Net Administration Routines
  50. 50. Модули и функции net_adm:ping(Node)
  51. 51. Модули и функции Erlang BIF (Build in functions)
  52. 52. Модули и функции node() nodes() monitor_node(Node, Flag) disconnect_node(Node) get_cookie() set_cookie(Node, Cookie)
  53. 53. Модули и функции spawn(Fun) spawn(Node, Fun) spawn(Module, Function, Args) spawn(Node, Module, Function, Args) spawn_link/1,2,3,4
  54. 54. Модули и функции net_kernel Erlang Networking Kernel
  55. 55. Модули и функции net_kernel:connect_node(Node) net_kernel:start([Name, shortnames]) net_kernel:start([Name, longnames, HeartBeat]) net_kernel:set_net_ticktime(5)
  56. 56. Модули и функции rpc Remote Procedure Call Services
  57. 57. Модули и функции rpc:call(Node, Module, Function, Args) rpc:call(Node, Module, Function, Args, Timeout)
  58. 58. Модули и функции Res = rpc:asyn_call(node, module, function, arguments) rpc:yield(Res) rpc:nb_yield(Res, Timeout)
  59. 59. Модули и функции rpc:multicall(Module, Function, Args) rpc:multicall(Nodes, Module, Function, Args) rpc:multicall(Module, Function, Args, Timeout) rpc:multicall(Nodes, Module, Function, Args, Timeout)
  60. 60. Модули и функции rpc:cast(Node, Module, Function, Args) rpc:abcast(Nodes, Name, Msg) rpc:sbcast(Nodes, Name, Msg)
  61. 61. Распределенное OTP-приложение Состояния обычного OTP-приложения: loaded started stopped
  62. 62. Распределенное OTP-приложение Состояния распределенного OTP-приложения: loaded started/running stopped
  63. 63. Распределенное OTP-приложение Failover Takeover Net Split
  64. 64. Распределенное OTP-приложение LYSE Distributed OTP Applications
  65. 65. Практика Распределенный чат на веб-сокетах в кластере из 4х узлов.
  66. 66. Вопросы?

×