Page 1
Введение в реактивный dotNet
Акуляков АртёмНеизвестный банк
9-я конференция .NET разработчиков12 октября 2014dotnetconf.ru
Page 2
Кто я?● 5+ лет
– Финансовый сектор– Энергетика
● Докладчик и
организатор
Dev2Dev
2
Page 3
Реактивное программирование
3
Page 4
Внимание! Реактивные двигатели тут совершенно не
причем...
4
Page 5
Реактивный от слова «реакция».
5
Page 7
Обычное приложение
7
Page 8
Проблемы● Не масштабируется● Отказоустойчивости нет
8
Page 10
Проблемы● Сложно● Масштабирование имеет
латентность● Любая ошибка приводит к потере
сервера
10
Page 16
Плюсы● Гибкое и быстрое масштабирование● Просто тестировать● Ошибки локализованы компонентом● Эффективное неиспользование ресурсов
16
Page 17
Минусы● Сложно на первый взгляд● Дополнительные расходы на
обмен сообщениями● Большая инфраструктура под
капотом
17
Page 19
Reactive manifesto
19
Page 20
Reactive manifesto● Ориентированность на события
20
Page 21
Reactive manifesto● Ориентированность на события● Отказоустойчивость
21
Page 22
Reactive manifesto● Ориентированность на события● Отказоустойчивость● Масштабируемость
22
Page 23
Reactive manifesto● Ориентированность на события● Отказоустойчивость● Масштабируемость● Отзывчивость
23
Page 24
Когда использовать?
24
Page 25
Использовать● Transaction processing● Service backend● Concurrency/parallelism● Complex event stream processing
25
Page 26
Уже используют● Box● Wix● LinkedIn● Blizzard● Twitter
26
Page 27
С чем работать в dotNet?
27
Page 28
Akka.NET● Actors model
28
Page 30
Actor● Состояние● Поведение
30
Page 31
Actor● Состояние● Поведение● Асинхронность● Обмен сообщениями
31
Page 32
Actor● Supervisor strategy● Routing
32
Page 35
● akka://my-sys/user/service-a● akka.tcp://sys@localhost:80/user/service-b● ../brothers● ../*● /user/service-c
35
Page 36
Как обрабатываются ошибки?
36
Page 39
OneForOne vs OneForAll
39
Page 40
Что с routing?
40
Page 42
Routing● Broadcast
42
Page 43
Routing● Broadcast● RoundRobin
43
Page 44
Routing● Broadcast● RoundRobin● ConsistentHash
44
Page 45
Routing● ScatterGatherFirstCompleted
45
Page 46
Routing● ScatterGatherFirstCompleted● Random
46
Page 47
Routing● ScatterGatherFirstCompleted● Random● SmallestMailbox
47
Page 48
Akka.Net итог● AkkaDotNet это framework.● Многое не озвучено
– DI– Remoting– Actor lifecycle
48
Page 49
Не любишь hardcore?
49
Page 50
Rx (Reactive Extensions)● Push-collections
50
Page 51
Don't call us,We will call you.
-Hollywood principle
51
Page 52
IEnumerable vs IObservable IEnumerator vs IObserver
LINQ to Events
52
Page 55
Итоги● Удобно работать с event streams● Удобно обрабатывать
асинхронные операции● Не позволяет строить реактивные
приложения полностью
55
Page 56
Хочется больше hardcore?
56
Page 57
F#● Functional reactive programming
– Actor model– Async– Functional
57
Page 58
MailboxProcessor
58
Page 59
F#● … но это далеко не все
– Rx– Akka.NET
59
Page 60
Akka.Net F# API
60
Page 61
Итоги● Больше возможностей● Для построения полностью
реактивного приложения необходима Akka.Net
61
Page 62
Что почитать?● http://akkadotnet.github.io/● https://rx.codeplex.com/● http://rxwiki.wikidot.com/101samples● http://fsharpforfunandprofit.com/● http://www.reactivemanifesto.org/● https://www.coursera.org/course/reactive
62
Page 64
На правах рекламы
64
Page 65
Спасибо за внимание
Акуляков АртемНеизвестный банк
[email protected]