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