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