Top Banner
Введение в реактивный dotNet Акуляков Артём Неизвестный банк 9-я конференция .NET разработчиков 12 октября 2014 dotnetconf.ru
65

reactive dotNet

Jul 15, 2015

Download

Engineering

0xffAA
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: reactive dotNet

Введение в реактивный dotNet

Акуляков АртёмНеизвестный банк

9-я конференция .NET разработчиков12 октября 2014dotnetconf.ru

Page 2: reactive dotNet

Кто я?● 5+ лет

– Финансовый сектор– Энергетика

● Докладчик и

организатор

Dev2Dev

2

Page 3: reactive dotNet

Реактивное программирование

3

Page 4: reactive dotNet

Внимание! Реактивные двигатели тут совершенно не

причем...

4

Page 5: reactive dotNet

Реактивный от слова «реакция».

5

Page 6: reactive dotNet

Зачем?

6

Page 7: reactive dotNet

Обычное приложение

7

Page 8: reactive dotNet

Проблемы● Не масштабируется● Отказоустойчивости нет

8

Page 9: reactive dotNet

Масштабируем

9

Page 10: reactive dotNet

Проблемы● Сложно● Масштабирование имеет

латентность● Любая ошибка приводит к потере

сервера

10

Page 11: reactive dotNet

Что делать?

11

Page 12: reactive dotNet

Решение #1

12

Page 13: reactive dotNet

Решение #2

13

Page 14: reactive dotNet

Решение #3

14

Page 15: reactive dotNet

Решение #4

15

Page 16: reactive dotNet

Плюсы● Гибкое и быстрое масштабирование● Просто тестировать● Ошибки локализованы компонентом● Эффективное неиспользование ресурсов

16

Page 17: reactive dotNet

Минусы● Сложно на первый взгляд● Дополнительные расходы на

обмен сообщениями● Большая инфраструктура под

капотом

17

Page 18: reactive dotNet

Философия

18

Page 19: reactive dotNet

Reactive manifesto

19

Page 20: reactive dotNet

Reactive manifesto● Ориентированность на события

20

Page 21: reactive dotNet

Reactive manifesto● Ориентированность на события● Отказоустойчивость

21

Page 22: reactive dotNet

Reactive manifesto● Ориентированность на события● Отказоустойчивость● Масштабируемость

22

Page 23: reactive dotNet

Reactive manifesto● Ориентированность на события● Отказоустойчивость● Масштабируемость● Отзывчивость

23

Page 24: reactive dotNet

Когда использовать?

24

Page 25: reactive dotNet

Использовать● Transaction processing● Service backend● Concurrency/parallelism● Complex event stream processing

25

Page 26: reactive dotNet

Уже используют● Box● Wix● LinkedIn● Blizzard● Twitter

26

Page 27: reactive dotNet

С чем работать в dotNet?

27

Page 28: reactive dotNet

Akka.NET● Actors model

28

Page 29: reactive dotNet

ActorModel

29

Page 30: reactive dotNet

Actor● Состояние● Поведение

30

Page 31: reactive dotNet

Actor● Состояние● Поведение● Асинхронность● Обмен сообщениями

31

Page 32: reactive dotNet

Actor● Supervisor strategy● Routing

32

Page 33: reactive dotNet

33

Page 34: reactive dotNet

Пути

34

Page 35: reactive dotNet

● akka://my-sys/user/service-a● akka.tcp://sys@localhost:80/user/service-b● ../brothers● ../*● /user/service-c

35

Page 36: reactive dotNet

Как обрабатываются ошибки?

36

Page 37: reactive dotNet

Supervisors

37

Page 38: reactive dotNet

38

Page 39: reactive dotNet

OneForOne vs OneForAll

39

Page 40: reactive dotNet

Что с routing?

40

Page 41: reactive dotNet

41

Page 42: reactive dotNet

Routing● Broadcast

42

Page 43: reactive dotNet

Routing● Broadcast● RoundRobin

43

Page 44: reactive dotNet

Routing● Broadcast● RoundRobin● ConsistentHash

44

Page 45: reactive dotNet

Routing● ScatterGatherFirstCompleted

45

Page 46: reactive dotNet

Routing● ScatterGatherFirstCompleted● Random

46

Page 47: reactive dotNet

Routing● ScatterGatherFirstCompleted● Random● SmallestMailbox

47

Page 48: reactive dotNet

Akka.Net итог● AkkaDotNet это framework.● Многое не озвучено

– DI– Remoting– Actor lifecycle

48

Page 49: reactive dotNet

Не любишь hardcore?

49

Page 50: reactive dotNet

Rx (Reactive Extensions)● Push-collections

50

Page 51: reactive dotNet

Don't call us,We will call you.

-Hollywood principle

51

Page 52: reactive dotNet

IEnumerable vs IObservable IEnumerator vs IObserver

LINQ to Events

52

Page 53: reactive dotNet

53

Page 54: reactive dotNet

54

Page 55: reactive dotNet

Итоги● Удобно работать с event streams● Удобно обрабатывать

асинхронные операции● Не позволяет строить реактивные

приложения полностью

55

Page 56: reactive dotNet

Хочется больше hardcore?

56

Page 57: reactive dotNet

F#● Functional reactive programming

– Actor model– Async– Functional

57

Page 58: reactive dotNet

MailboxProcessor

58

Page 59: reactive dotNet

F#● … но это далеко не все

– Rx– Akka.NET

59

Page 60: reactive dotNet

Akka.Net F# API

60

Page 61: reactive dotNet

Итоги● Больше возможностей● Для построения полностью

реактивного приложения необходима Akka.Net

61

Page 62: reactive dotNet

Что почитать?● 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: reactive dotNet

Итоги

63

Page 64: reactive dotNet

На правах рекламы

64

Page 65: reactive dotNet

Спасибо за внимание

Акуляков АртемНеизвестный банк

[email protected]