Потоковая фильтрация событий

of 113 /113
Streaming event matching Dmitry Schitinin

Author: cee-secr

Post on 06-Jan-2017

71 views

Category:

Software


0 download

Embed Size (px)

TRANSCRIPT

Page 1: Потоковая фильтрация событий

Streaming event matching

Dmitry Schitinin

Page 2: Потоковая фильтрация событий

About

Backend infrastructure team

› Services› Libraries› Frameworks

@ Yandex.Classifieds

› auto.ru

› auto.yandex.ru

› rabota.yandex.ru

› realty.yandex.ru

› travel.yandex.ru

https://stat.yandex.ru 2

Page 3: Потоковая фильтрация событий

About

Backend infrastructure team

› Services› Libraries› Frameworks

@ Yandex.Classifieds

› auto.ru

› auto.yandex.ru

› rabota.yandex.ru

› realty.yandex.ru

› travel.yandex.ru

https://stat.yandex.ru 2

Page 4: Потоковая фильтрация событий

About

Backend infrastructure team

› Services› Libraries› Frameworks

@ Yandex.Classifieds

› auto.ru

› auto.yandex.ru

› rabota.yandex.ru

› realty.yandex.ru

› travel.yandex.ruhttps://stat.yandex.ru 2

Page 5: Потоковая фильтрация событий

Introduction

Page 6: Потоковая фильтрация событий

Audience

› Software engineers/architects

› Event stream processing

› Distributed systems

4

Page 7: Потоковая фильтрация событий
Page 8: Потоковая фильтрация событий
Page 9: Потоковая фильтрация событий
Page 10: Потоковая фильтрация событий

Features

› Stream of offers (tens per second)

› Up to 500K subscriptions

› Complex multi field conditions

› Low latency (seconds)

8

Page 11: Потоковая фильтрация событий

Features

› Stream of offers (tens per second)

› Up to 500K subscriptions

› Complex multi field conditions

› Low latency (seconds)

8

Page 12: Потоковая фильтрация событий

Features

› Stream of offers (tens per second)

› Up to 500K subscriptions

› Complex multi field conditions

› Low latency (seconds)

8

Page 13: Потоковая фильтрация событий

Features

› Stream of offers (tens per second)

› Up to 500K subscriptions

› Complex multi field conditions

› Low latency (seconds)

8

Page 14: Потоковая фильтрация событий

Features

› Stream of offers (tens per second)

› Up to 500K subscriptions

› Complex multi field conditions

› Low latency (seconds)

8

Page 15: Потоковая фильтрация событий

Motivation

Page 16: Потоковая фильтрация событий

Customer subscriptions

› Short notification delays (minutes)

› Instant subscription modifications› Notifications transport

› email, SMS, push, pigeons, owls, etc.

10

Page 17: Потоковая фильтрация событий

Customer subscriptions

› Short notification delays (minutes)

› Instant subscription modifications› Notifications transport

› email, SMS, push, pigeons, owls, etc.

10

Page 18: Потоковая фильтрация событий

Customer subscriptions

› Short notification delays (minutes)

› Instant subscription modifications

› Notifications transport

› email, SMS, push, pigeons, owls, etc.

10

Page 19: Потоковая фильтрация событий

Customer subscriptions

› Short notification delays (minutes)

› Instant subscription modifications› Notifications transport

› email, SMS, push, pigeons, owls, etc.

10

Page 20: Потоковая фильтрация событий

Non-functional requirements

› Scalability by subscriptions› millions

› Scalability by events› tens-hundreds per second

› Fault tolerance› nodes, network, data centers

11

Page 21: Потоковая фильтрация событий

Non-functional requirements

› Scalability by subscriptions› millions

› Scalability by events› tens-hundreds per second

› Fault tolerance› nodes, network, data centers

11

Page 22: Потоковая фильтрация событий

Non-functional requirements

› Scalability by subscriptions› millions

› Scalability by events› tens-hundreds per second

› Fault tolerance› nodes, network, data centers

11

Page 23: Потоковая фильтрация событий

Non-functional requirements

› Scalability by subscriptions› millions

› Scalability by events› tens-hundreds per second

› Fault tolerance› nodes, network, data centers

11

Page 24: Потоковая фильтрация событий
Page 25: Потоковая фильтрация событий
Page 26: Потоковая фильтрация событий
Page 27: Потоковая фильтрация событий
Page 28: Потоковая фильтрация событий
Page 29: Потоковая фильтрация событий
Page 30: Потоковая фильтрация событий
Page 31: Потоковая фильтрация событий

Naive solution

Pros:› Simplicity

› Working

Cons:› High notificationlatency (hours, days)

› Search systemextra load

› Scalability?

19

Page 32: Потоковая фильтрация событий

Naive solution

Pros:› Simplicity

› Working

Cons:

› High notificationlatency (hours, days)

› Search systemextra load

› Scalability?

19

Page 33: Потоковая фильтрация событий

Naive solution

Pros:› Simplicity

› Working

Cons:› High notificationlatency (hours, days)

› Search systemextra load

› Scalability?

19

Page 34: Потоковая фильтрация событий

Naive solution

Pros:› Simplicity

› Working

Cons:› High notificationlatency (hours, days)

› Search systemextra load

› Scalability?

19

Page 35: Потоковая фильтрация событий

Naive solution

Pros:› Simplicity

› Working

Cons:› High notificationlatency (hours, days)

› Search systemextra load

› Scalability?19

Page 36: Потоковая фильтрация событий
Page 37: Потоковая фильтрация событий
Page 38: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 39: Потоковая фильтрация событий

Not so naive approach

Pros:

› Low latency

› No extra work› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 40: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 41: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work

› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 42: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 43: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:

› More complex, butnot complicated

22

Page 44: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:› More complex

, butnot complicated

22

Page 45: Потоковая фильтрация событий

Not so naive approach

Pros:› Low latency

› No extra work› Possibly scalable

Cons:› More complex, butnot complicated

22

Page 46: Потоковая фильтрация событий

Matching

Page 47: Потоковая фильтрация событий
Page 48: Потоковая фильтрация событий

Data model

› Event:

› Subscription:mark=FORD&model=FOCUS&model=MONDEO&year=2015

25

Page 49: Потоковая фильтрация событий
Page 50: Потоковая фильтрация событий

A better way

Commonalities:› mark=FORD&model=FOCUS

› mark=FORD&year=2010

› year=2010&price_from=500000

Data structures› BDD

› DAG

› Search tree

› Indices

27

Page 51: Потоковая фильтрация событий

A better way

Commonalities:› mark=FORD&model=FOCUS

› mark=FORD&year=2010

› year=2010&price_from=500000

Data structures› BDD

› DAG

› Search tree

› Indices

27

Page 52: Потоковая фильтрация событий

A better way

Commonalities:› mark=FORD&model=FOCUS

› mark=FORD&year=2010

› year=2010&price_from=500000

Data structures› BDD

› DAG

› Search tree

› Indices

27

Page 53: Потоковая фильтрация событий
Page 54: Потоковая фильтрация событий
Page 55: Потоковая фильтрация событий
Page 56: Потоковая фильтрация событий
Page 57: Потоковая фильтрация событий
Page 58: Потоковая фильтрация событий
Page 59: Потоковая фильтрация событий
Page 60: Потоковая фильтрация событий
Page 61: Потоковая фильтрация событий
Page 62: Потоковая фильтрация событий
Page 63: Потоковая фильтрация событий
Page 64: Потоковая фильтрация событий
Page 65: Потоковая фильтрация событий

Architecture

Page 66: Потоковая фильтрация событий
Page 67: Потоковая фильтрация событий
Page 68: Потоковая фильтрация событий
Page 69: Потоковая фильтрация событий

Architecture

Matcher

Page 70: Потоковая фильтрация событий
Page 71: Потоковая фильтрация событий
Page 72: Потоковая фильтрация событий
Page 73: Потоковая фильтрация событий
Page 74: Потоковая фильтрация событий
Page 75: Потоковая фильтрация событий
Page 76: Потоковая фильтрация событий

Resilience

› Subscriptions => Tokens› Token ≈responsibility

› Nodes distribute tokens

51

Page 77: Потоковая фильтрация событий

Resilience

› Subscriptions => Tokens

› Token ≈responsibility

› Nodes distribute tokens

51

Page 78: Потоковая фильтрация событий

Resilience

› Subscriptions => Tokens› Token ≈responsibility

› Nodes distribute tokens

51

Page 79: Потоковая фильтрация событий

Resilience

› Subscriptions => Tokens› Token ≈responsibility

› Nodes distribute tokens

51

Page 80: Потоковая фильтрация событий
Page 81: Потоковая фильтрация событий
Page 82: Потоковая фильтрация событий
Page 83: Потоковая фильтрация событий
Page 84: Потоковая фильтрация событий
Page 85: Потоковая фильтрация событий
Page 86: Потоковая фильтрация событий
Page 87: Потоковая фильтрация событий

Architecture

Notifier

Page 88: Потоковая фильтрация событий
Page 89: Потоковая фильтрация событий
Page 90: Потоковая фильтрация событий
Page 91: Потоковая фильтрация событий
Page 92: Потоковая фильтрация событий
Page 93: Потоковая фильтрация событий
Page 94: Потоковая фильтрация событий
Page 95: Потоковая фильтрация событий

Implementation

Page 96: Потоковая фильтрация событий

Scala

› Functional & concise› Persistent data structures for matching tree(1Kloc)

› No need for synchronization

› Property-based testing (matching algorithm)

1http://www.scalacheck.org

68

Page 97: Потоковая фильтрация событий

Scala

› Functional & concise

› Persistent data structures for matching tree(1Kloc)

› No need for synchronization

› Property-based testing (matching algorithm)

1http://www.scalacheck.org

68

Page 98: Потоковая фильтрация событий

Scala

› Functional & concise› Persistent data structures for matching tree(1Kloc)

› No need for synchronization

› Property-based testing (matching algorithm)

1http://www.scalacheck.org

68

Page 99: Потоковая фильтрация событий

Scala

› Functional & concise› Persistent data structures for matching tree(1Kloc)

› No need for synchronization

› Property-based testing (matching algorithm)

1http://www.scalacheck.org

68

Page 100: Потоковая фильтрация событий

Scala

› Functional & concise› Persistent data structures for matching tree(1Kloc)

› No need for synchronization

› Property-based testing (matching algorithm)

1http://www.scalacheck.org

68

Page 101: Потоковая фильтрация событий

Akka

› actors (events)

› akka-remoting (networking)

› protobuf (serialization)

› akka-fsm (aggregation)

69

Page 102: Потоковая фильтрация событий

Akka

› actors (events)

› akka-remoting (networking)

› protobuf (serialization)

› akka-fsm (aggregation)

69

Page 103: Потоковая фильтрация событий

Akka

› actors (events)

› akka-remoting (networking)

› protobuf (serialization)

› akka-fsm (aggregation)

69

Page 104: Потоковая фильтрация событий

Akka

› actors (events)

› akka-remoting (networking)

› protobuf (serialization)

› akka-fsm (aggregation)

69

Page 105: Потоковая фильтрация событий

Akka

› actors (events)

› akka-remoting (networking)

› protobuf (serialization)

› akka-fsm (aggregation)

69

Page 106: Потоковая фильтрация событий

Zookeeper

› Exclusive tokenacquirement

› Service discovery

http://zookeeper.apache.org 70

Page 107: Потоковая фильтрация событий

Conclusion

Page 108: Потоковая фильтрация событий

Achievements

› Low customer notification latency (seconds)

› No extra load› All on 3 nodes x 2 DC

› 200K subs — 1G heap

72

Page 109: Потоковая фильтрация событий

Achievements

› Low customer notification latency (seconds)

› No extra load› All on 3 nodes x 2 DC

› 200K subs — 1G heap

72

Page 110: Потоковая фильтрация событий

300K subscriptions in production

73

Page 111: Потоковая фильтрация событий

300K subscriptions stress testing (cluster)

74

Page 112: Потоковая фильтрация событий

150K subscriptions stress testing (node)

75

Page 113: Потоковая фильтрация событий

ContactsDmitry SchitininBackend infrastructure team @ Yandex.Classifieds

[email protected]

76