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

reactive dotNet

  • Upload
    0xffaa

  • View
    128

  • Download
    1

Embed Size (px)

Citation preview

Введение в реактивный 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

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

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

[email protected]