SlideShare a Scribd company logo
1 of 66
Распределенный Erlang
Юра Жлоба для Minsk F# User Group
Что такое распределенная система?
Лесли Лэмпорт
A distributed system is one
in which the failure of a computer
You didn’t even know existed
can render your own computer unusable.
Что такое распределенная система?
Хранилища данных:
Google BigTable, Amazon SimpleDB,
Hadoop, Cassandra
множество их, в т.ч. и написаные на Erlang:
Riak, CouchDB
Что такое распределенная система?
Сервисы
Google Search, Поиск Яндекса, WhatsApp
множество их, в т.ч. и написаные частично на
Erlang:
Hadoop, Github
Что такое распределенная система?
Социальные сети:
Facebook, Twitter, Вконтакте
Что такое распределенная система?
Многопользовательские игры:
World of Warcraft
World of Tanks
Call of Duty Black Ops
Зачем их делают?
Хранить данных больше,
чем может поместиться на одной машине
Обрабатывать данных больше,
чем можно обработать на одной машине
Повысить надежность системы
Построить масштабируемую систему,
способную адаптироваться к росту нагрузки
Сервисы, распределенные по своей сути
(CDN -- content delivery network)
Какова надежность Erlang?
Распределенность в Erlang
Изначально реализована ради надежности
Какова надежность 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 милисекунд
Какова надежность Erlang?
99s
http://ninenines.eu/
Cowboy, Ranch, Bullet, Sheriff
Терминология
Приложение (Application)
Узел (Node)
Кластер (Cluster)
Что такого особенного в Erlang?
Единый подход и к локальному
и к распределенному программированию
Что такого особенного в Erlang?
Процесс:
имеет публичный АПИ
(реагирует на определенные сообщения)
хранит внутри себя состояние (некие данные)
общается с другими процессами,
пользуясь их публичным АПИ
имеет закрытую бизнес-логику
Что такого особенного в Erlang?
Процесс:
то же самое, что объект в ООП :)
Что такого особенного в Erlang?
Приложение:
имеет публичный АПИ
хранит внутри себя данные
общается с другими приложениями,
пользуясь их публичным АПИ
имеет закрытую бизнес-логику
Что такого особенного в Erlang?
Узел:
имеет публичный АПИ
хранит внутри себя данные
общается с клиентами
и другими узлами
имеет закрытую бизнес-логику
Что такого особенного в Erlang?
Кластер:
имеет публичный АПИ
хранит внутри себя данные
общается с клиентами
имеет закрытую бизнес-логику
Что такого особенного в Erlang?
Сетевая прозрачность
Что такого особенного в Erlang?
Сетевая прозрачность
для сообщений
Что такого особенного в Erlang?
Сетевая прозрачность
для мониторинга
Что такого особенного в Erlang?
Мониторинг
между процессами
в приложении
в узле
в кластере
Что такого особенного в Erlang?
Мониторинг
Takeover
Failover
Что такого сложного
в распределенных системах?
Оптимистичные разработчики
деляют неявные предположения,
а потом ...
Что такого сложного
в распределенных системах?
Сеть надежна, соединение между узлами
никогда не обрывается
Что такого сложного
в распределенных системах?
Данные по сети передаются мгновенно
Что такого сложного
в распределенных системах?
Пропускная способность сети не ограничена
Что такого сложного
в распределенных системах?
Сеть безопасна
Что такого сложного
в распределенных системах?
Топология сети не меняется
Что такого сложного
в распределенных системах?
Есть только один администратор,
который все знает о сети
Что такого сложного
в распределенных системах?
Стоимость передачи данных нулевая
Что такого сложного
в распределенных системах?
Сеть однородна
Erlang кластер
trusted environment
Erlang кластер
trusted environment
в локальной сети
защищенной от внешнего мира
Erlang кластер
Иначе нужно строить защищенный внешний АПИ
(HTTP REST например)
Erlang кластер
erl -name node@host
Erlang кластер
erl -name my_node@127.0.0.1
Erlang кластер
Соединения узлов каждый с каждым
Erlang кластер
Соединения узлов каждый с каждым
4 узла – 6 соединений
10 узлов – 45 соединений
и дальше в арифметической прогрессии
Erlang кластер
Служебный траффик
Heart Beat
Erlang кластер
Скрытые узлы
erl -name node@host -hidden
Erlang кластер
Куки
~/.erlang.cookie
erl -setcookie abc
erlang:set_cookie(Node, Cookie)
Erlang кластер
epmd
Erlang Port Mapper Daemon
Erlang кластер
empd
один на машину
хранит имя-порт для каждого узла
Erlang кластер
Empd
Name listing
Port queries
Модули и функции
global
Регистрация процессов в глобальной области
видимости
Глобальные локи на ресурсы
Поддержка сети
Модули и функции
global:register_name(Name, Pid)
global:re_register_name(Name, Pid)
global:whereis_name(Name)
Модули и функции
Naming Conflict
global:register_name(Name, Pid, Resolve)
Модули и функции
Naming Conflict
fun global:random_exit_name/3
fun global:random_notify_name/3
fun global:notify_all_name/3
Модули и функции
net_adm
Various Erlang Net Administration Routines
Модули и функции
net_adm:ping(Node)
Модули и функции
Erlang
BIF (Build in functions)
Модули и функции
node()
nodes()
monitor_node(Node, Flag)
disconnect_node(Node)
get_cookie()
set_cookie(Node, Cookie)
Модули и функции
spawn(Fun)
spawn(Node, Fun)
spawn(Module, Function, Args)
spawn(Node, Module, Function, Args)
spawn_link/1,2,3,4
Модули и функции
net_kernel
Erlang Networking Kernel
Модули и функции
net_kernel:connect_node(Node)
net_kernel:start([Name, shortnames])
net_kernel:start([Name, longnames,
HeartBeat])
net_kernel:set_net_ticktime(5)
Модули и функции
rpc
Remote Procedure Call Services
Модули и функции
rpc:call(Node, Module, Function, Args)
rpc:call(Node, Module, Function, Args,
Timeout)
Модули и функции
Res = rpc:asyn_call(node, module, function,
arguments)
rpc:yield(Res)
rpc:nb_yield(Res, Timeout)
Модули и функции
rpc:multicall(Module, Function, Args)
rpc:multicall(Nodes, Module, Function, Args)
rpc:multicall(Module, Function, Args,
Timeout)
rpc:multicall(Nodes, Module, Function, Args,
Timeout)
Модули и функции
rpc:cast(Node, Module, Function, Args)
rpc:abcast(Nodes, Name, Msg)
rpc:sbcast(Nodes, Name, Msg)
Распределенное OTP-приложение
Состояния обычного OTP-приложения:
loaded
started
stopped
Распределенное OTP-приложение
Состояния распределенного OTP-приложения:
loaded
started/running
stopped
Распределенное OTP-приложение
Failover
Takeover
Net Split
Распределенное OTP-приложение
LYSE
Distributed OTP Applications
Практика
Распределенный чат на веб-сокетах
в кластере из 4х узлов.
Вопросы?

More Related Content

What's hot

Python Meetup
Python Meetup Python Meetup
Python Meetup iQSpace
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 
ТФРВС - весна 2014 - лекция 1
ТФРВС - весна 2014 - лекция 1ТФРВС - весна 2014 - лекция 1
ТФРВС - весна 2014 - лекция 1Alexey Paznikov
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsSergey Schetinin
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумоеAlexander Byndyu
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Yandex
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.genericsmuqaddas_m
 

What's hot (9)

Python Meetup
Python Meetup Python Meetup
Python Meetup
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
ТФРВС - весна 2014 - лекция 1
ТФРВС - весна 2014 - лекция 1ТФРВС - весна 2014 - лекция 1
ТФРВС - весна 2014 - лекция 1
 
Erlang&rails
Erlang&railsErlang&rails
Erlang&rails
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Индексируй неиндексирумое
Индексируй неиндексирумоеИндексируй неиндексирумое
Индексируй неиндексирумое
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 

Viewers also liked

Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Alexander Podkhalyuzin
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Alexander Podkhalyuzin
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаSergey Lobin
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблямSveta Bozhko
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 

Viewers also liked (20)

Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Scala #3
Scala #3Scala #3
Scala #3
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Scala #5
Scala #5Scala #5
Scala #5
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Scala #2
Scala #2Scala #2
Scala #2
 
Erlang
ErlangErlang
Erlang
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Lec 2
Lec 2Lec 2
Lec 2
 
Scala magic
Scala magicScala magic
Scala magic
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Scala #4
Scala #4Scala #4
Scala #4
 
Scala training
Scala trainingScala training
Scala training
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программиста
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблям
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 

Similar to Distributed erlang

что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Машины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеМашины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеAndrei Nikolaenko
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на ErlangMax Lapshin
 
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхAndrey Akulov
 
Как devops исчерпывает себя и что будет дальше
Как devops исчерпывает себя и что будет дальшеКак devops исчерпывает себя и что будет дальше
Как devops исчерпывает себя и что будет дальшеKirill Vechera
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Fwdays
 
Отличие Erlang от объектных языков
Отличие Erlang от объектных языковОтличие Erlang от объектных языков
Отличие Erlang от объектных языковMax Lapshin
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияSlach
 
Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Victor Agroskin
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Andrey Akulov
 
Масштабирование и отказоустойчивость с Nginx
Масштабирование и отказоустойчивость с NginxМасштабирование и отказоустойчивость с Nginx
Масштабирование и отказоустойчивость с NginxGetDev.NET
 

Similar to Distributed erlang (20)

что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Машины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрениеМашины баз данных: концентрированное обозрение
Машины баз данных: концентрированное обозрение
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших Данных
 
Как devops исчерпывает себя и что будет дальше
Как devops исчерпывает себя и что будет дальшеКак devops исчерпывает себя и что будет дальше
Как devops исчерпывает себя и что будет дальше
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 
Отличие Erlang от объектных языков
Отличие Erlang от объектных языковОтличие Erlang от объектных языков
Отличие Erlang от объектных языков
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем хранения
 
Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных.
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
 
Масштабирование и отказоустойчивость с Nginx
Масштабирование и отказоустойчивость с NginxМасштабирование и отказоустойчивость с Nginx
Масштабирование и отказоустойчивость с Nginx
 

Distributed erlang