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

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

Upload: dotnetconf

Post on 17-Jul-2015

439 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Введение в реактивный .NET

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

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

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

Page 2: Введение в реактивный .NET

Кто я?● 5+ лет

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

● Докладчик и

организатор

Dev2Dev

2

Page 3: Введение в реактивный .NET

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

3

Page 4: Введение в реактивный .NET

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

причем...

4

Page 5: Введение в реактивный .NET

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

5

Page 6: Введение в реактивный .NET

Зачем?

6

Page 7: Введение в реактивный .NET

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

7

Page 8: Введение в реактивный .NET

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

8

Page 9: Введение в реактивный .NET

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

9

Page 10: Введение в реактивный .NET

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

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

сервера

10

Page 11: Введение в реактивный .NET

Что делать?

11

Page 12: Введение в реактивный .NET

Решение #1

12

Page 13: Введение в реактивный .NET

Решение #2

13

Page 14: Введение в реактивный .NET

Решение #3

14

Page 15: Введение в реактивный .NET

Решение #4

15

Page 16: Введение в реактивный .NET

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

16

Page 17: Введение в реактивный .NET

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

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

капотом

17

Page 18: Введение в реактивный .NET

Философия

18

Page 19: Введение в реактивный .NET

Reactive manifesto

19

Page 20: Введение в реактивный .NET

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

20

Page 21: Введение в реактивный .NET

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

21

Page 22: Введение в реактивный .NET

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

22

Page 23: Введение в реактивный .NET

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

23

Page 24: Введение в реактивный .NET

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

24

Page 25: Введение в реактивный .NET

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

25

Page 26: Введение в реактивный .NET

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

26

Page 27: Введение в реактивный .NET

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

27

Page 28: Введение в реактивный .NET

Akka.NET● Actors model

28

Page 29: Введение в реактивный .NET

ActorModel

29

Page 30: Введение в реактивный .NET

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

30

Page 31: Введение в реактивный .NET

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

31

Page 32: Введение в реактивный .NET

Actor● Supervisor strategy● Routing

32

Page 33: Введение в реактивный .NET

33

Page 34: Введение в реактивный .NET

Пути

34

Page 35: Введение в реактивный .NET

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

35

Page 36: Введение в реактивный .NET

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

36

Page 37: Введение в реактивный .NET

Supervisors

37

Page 38: Введение в реактивный .NET

38

Page 39: Введение в реактивный .NET

OneForOne vs OneForAll

39

Page 40: Введение в реактивный .NET

Что с routing?

40

Page 41: Введение в реактивный .NET

41

Page 42: Введение в реактивный .NET

Routing● Broadcast

42

Page 43: Введение в реактивный .NET

Routing● Broadcast● RoundRobin

43

Page 44: Введение в реактивный .NET

Routing● Broadcast● RoundRobin● ConsistentHash

44

Page 45: Введение в реактивный .NET

Routing● ScatterGatherFirstCompleted

45

Page 46: Введение в реактивный .NET

Routing● ScatterGatherFirstCompleted● Random

46

Page 47: Введение в реактивный .NET

Routing● ScatterGatherFirstCompleted● Random● SmallestMailbox

47

Page 48: Введение в реактивный .NET

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

– DI– Remoting– Actor lifecycle

48

Page 49: Введение в реактивный .NET

Не любишь hardcore?

49

Page 50: Введение в реактивный .NET

Rx (Reactive Extensions)● Push-collections

50

Page 51: Введение в реактивный .NET

Don't call us,We will call you.

-Hollywood principle

51

Page 52: Введение в реактивный .NET

IEnumerable vs IObservable IEnumerator vs IObserver

LINQ to Events

52

Page 53: Введение в реактивный .NET

53

Page 54: Введение в реактивный .NET

54

Page 55: Введение в реактивный .NET

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

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

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

55

Page 56: Введение в реактивный .NET

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

56

Page 57: Введение в реактивный .NET

F#● Functional reactive programming

– Actor model– Async– Functional

57

Page 58: Введение в реактивный .NET

MailboxProcessor

58

Page 59: Введение в реактивный .NET

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

– Rx– Akka.NET

59

Page 60: Введение в реактивный .NET

Akka.Net F# API

60

Page 61: Введение в реактивный .NET

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

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

61

Page 62: Введение в реактивный .NET

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

Итоги

63

Page 64: Введение в реактивный .NET

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

64

Page 65: Введение в реактивный .NET

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

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

[email protected]