Top Banner
WELCOME TO THE LONDON SCALA UG MEET UP @ WILLIAM HILL
74

London Scala Meetup - Omnia

Apr 14, 2017

Download

Software

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: London Scala Meetup - Omnia

WELCOME TO THE LONDON SCALA UG

MEET UP @

WILLIAM HILL

Page 2: London Scala Meetup - Omnia

Luis Ángel Vicente Sánchez Software Engineer @ Innovation Team

OMNIA DISTRIBUTED & REACTIVE PLATFORM FOR DATA MANAGEMENT

Site https://developer.williamhill.com

Twi$er https://twitter.com/lvicentesanchez

Page 3: London Scala Meetup - Omnia

WHY BUILDING A DATA MANAGEMENT PLATFORM?

Page 4: London Scala Meetup - Omnia

WHY BUILDING A DATA MANAGEMENT PLATFORM?

Page 5: London Scala Meetup - Omnia

•  Lots of information flowing in the system.

•  What if we could make sense of all of it...?

•  ... and on real-time?

•  We would be in a great position to innovate.

WHY BUILDING A DATA MANAGEMENT PLATFORM?

Page 6: London Scala Meetup - Omnia

BUT…

Page 7: London Scala Meetup - Omnia

BUT… AVAILABILITY

Page 8: London Scala Meetup - Omnia

BUT… AVAILABILITY

Page 9: London Scala Meetup - Omnia

BUT…

Page 10: London Scala Meetup - Omnia

BUT… SCALABILITY

Page 11: London Scala Meetup - Omnia

BUT… SCALABILITY

Page 12: London Scala Meetup - Omnia

BUT…

Page 13: London Scala Meetup - Omnia

BUT… FAULT TOLERANCE

Page 14: London Scala Meetup - Omnia

BUT… FAULT TOLERANCE

Page 15: London Scala Meetup - Omnia

REQUIREMENTS

Page 16: London Scala Meetup - Omnia

Availability

Faulttolerance

Scalability

REQUIREMENTS

Page 17: London Scala Meetup - Omnia

REACTIVE MANIFESTO

Page 18: London Scala Meetup - Omnia

REACTIVE MANIFESTO

Page 19: London Scala Meetup - Omnia

REACTIVE MANIFESTO Respondina+melymanner

Page 20: London Scala Meetup - Omnia

REACTIVE MANIFESTO Respondina+melymanner

Stayresponsiveunderdifferentworkloads

Page 21: London Scala Meetup - Omnia

REACTIVE MANIFESTO Respondina+melymanner

Stayresponsiveunderdifferentworkloads Stayresponsiveinfaceoffailures

Page 22: London Scala Meetup - Omnia

REACTIVE MANIFESTO Respondina+melymanner

Stayresponsiveunderdifferentworkloads Stayresponsiveinfaceoffailures

Loosecoupling,isola+on,loca+ontransparency,anderrorhandlingdelega+on

Page 23: London Scala Meetup - Omnia

OMNIA

Page 24: London Scala Meetup - Omnia

•  It’s a lambda architecture.

OMNIA

Page 25: London Scala Meetup - Omnia

•  It’s a lambda architecture.

OMNIA

Page 26: London Scala Meetup - Omnia

•  It’s a lambda architecture.

OMNIA

InputC

hron

osD

ata

Sour

ce

NeoCortexSpeed Layer

FatesBatch Layer

Her

mes

Serv

ing

Laye

r Output

Page 27: London Scala Meetup - Omnia

CHRONOS

Page 28: London Scala Meetup - Omnia

•  Collects data from multiple data sources.

•  Initially a PUSH system…

•  ... but that introduces dependencies on 3rd parties.

•  Evolved to a PUSH-PULL system.

CHRONOS

Page 29: London Scala Meetup - Omnia

CHRONOS

Chr

onos

Dat

a So

urce

TCP

HTTP

WS

Bets

Depo

sits

Prices

Page 30: London Scala Meetup - Omnia

CHRONOS

JMS

SSE

Chr

onos

Dat

a So

urce

TCP

HTTP

WS

…HTTP

Poll

Bets

Depo

sits

Prices

Page 31: London Scala Meetup - Omnia

CHRONOS

JMS

SSE

Chr

onos

Dat

a So

urce

TCP

HTTP

WS

…HTTP

Poll

Streams

Bets

Depo

sits

Prices

Page 32: London Scala Meetup - Omnia

CHRONOS STREAM

Page 33: London Scala Meetup - Omnia

CHRONOS

Adapter

STREAM

Page 34: London Scala Meetup - Omnia

CHRONOS

Adapter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

Page 35: London Scala Meetup - Omnia

CHRONOS

Adapter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

Page 36: London Scala Meetup - Omnia

CHRONOS

Adapter Converter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

Page 37: London Scala Meetup - Omnia

CHRONOS

Adapter Converter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

INCIDENT: { type: “bet”, version: “1.0”, time: “2015-09-03 06:00:10”, acquisitionTime: “2015-09-03 06:00:06”, source: “BetSystem”, payload: {…. Any valid JSON …} }

Page 38: London Scala Meetup - Omnia

CHRONOS

Adapter Converter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

INCIDENT: { type: “bet”, version: “1.0”, time: “2015-09-03 06:00:10”, acquisitionTime: “2015-09-03 06:00:06”, source: “BetSystem”, payload: {…. Any valid JSON …} } O

bservable[Incide

nt]

Page 39: London Scala Meetup - Omnia

CHRONOS

Adapter Converter

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

INCIDENT: { type: “bet”, version: “1.0”, time: “2015-09-03 06:00:10”, acquisitionTime: “2015-09-03 06:00:06”, source: “BetSystem”, payload: {…. Any valid JSON …} } O

bservable[Incide

nt]

Page 40: London Scala Meetup - Omnia

CHRONOS

Adapter Converter Persistor

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

INCIDENT: { type: “bet”, version: “1.0”, time: “2015-09-03 06:00:10”, acquisitionTime: “2015-09-03 06:00:06”, source: “BetSystem”, payload: {…. Any valid JSON …} } O

bservable[Incide

nt]

Page 41: London Scala Meetup - Omnia

CHRONOS

Adapter Converter Persistor

STREAM

PUSH:•  HTTP•  TCP•  WEBSOCKETS

PULL:

•  HTTPPOLL•  JMS•  SSE

INCIDENT: { type: “bet”, version: “1.0”, time: “2015-09-03 06:00:10”, acquisitionTime: “2015-09-03 06:00:06”, source: “BetSystem”, payload: {…. Any valid JSON …} } O

bservable[Incide

nt]

Page 42: London Scala Meetup - Omnia

CHRONOS

Page 43: London Scala Meetup - Omnia

CHRONOS

Chronos 1 Chronos 2 Chronos 3

Chronos N

….…

Page 44: London Scala Meetup - Omnia

CHRONOS

Chronos 1(SSE, Bets placed)

(SSE, Twitter)

Chronos 2(JMS, Deposits)

Chronos 3(HTTP, Events)

Chronos N

….…

Page 45: London Scala Meetup - Omnia

CHRONOS

Chronos 1(SSE, Bets placed)

(SSE, Twitter)

Chronos 2(JMS, Deposits)

Chronos 3(HTTP, Events)

Chronos N

….…

Page 46: London Scala Meetup - Omnia

CHRONOS

Chronos 1(SSE, Bets placed)

(SSE, Twitter)

Chronos 2(JMS, Deposits)

Chronos 3(HTTP, Events)

Chronos N

….…

Page 47: London Scala Meetup - Omnia

CHRONOS

Chronos 1(SSE, Bets placed)

(SSE, Twitter)

Chronos 3(HTTP, Events)

Chronos N(SSE, Twitter)

….…

Chronos 2(JMS, Deposits)

(SSE, Bets placed)

Page 48: London Scala Meetup - Omnia

FATES

Page 49: London Scala Meetup - Omnia

FATES

Views

Jobs

Fates

Page 50: London Scala Meetup - Omnia

•  Long term memory.

•  Records all incidents as timelines, i.e. customer bets, customer payments, everything that happens in a match…

•  … or any combination of those.

FATES

Page 51: London Scala Meetup - Omnia

FATES

Bets DepositsEvents Session

FatesBatch Layer

Page 52: London Scala Meetup - Omnia

FATES

Timelines

Bets DepositsEvents Session

FatesBatch Layer

Page 53: London Scala Meetup - Omnia

FATES

Customer: 123

Login

Deposit

Bet placed

LogoutTimelines

Bets DepositsEvents Session

FatesBatch Layer

Page 54: London Scala Meetup - Omnia

FATES

Customer: 123

Login

Deposit

Bet placed

Logout

Event: 78

Started

Bet placed

Penalty

GoalTimelines

Bets DepositsEvents Session

FatesBatch Layer

Page 55: London Scala Meetup - Omnia

•  Creates views using the timelines and/or other views.

•  These views are created using: – Timeline analysis – Logical reasoning… – ... or any other ML technique

FATES

Page 56: London Scala Meetup - Omnia

FATES

LogicalReasoning• DeducDon•  InducDon• AbducDon

Timelineanalysis• Trends• Cycles• Seasonality

OtherML• ClassificaDon• Clustering• PredicDons

Page 57: London Scala Meetup - Omnia

•  Timelines and views persisted to Cassandra.

•  Column family name: <category>_tl or <category>_vw

•  Column family key: ((entityId, date), timestamp)

FATES

Page 58: London Scala Meetup - Omnia

NEOCORTEX

Page 59: London Scala Meetup - Omnia

NEOCORTEX

Bets

Depo

sits

Events

Session

Micro Services

Outpu

t

Page 60: London Scala Meetup - Omnia

•  Short term memory

•  Built on top of Spark: performant, distributed, real-time computations.

•  Built on top of abstractions that hide low level details: Timeline, View, Stream, Sink, Monoid, Group, Ring…

NEOCORTEX

Page 61: London Scala Meetup - Omnia

NEOCORTEX

Page 62: London Scala Meetup - Omnia

HERMES

Page 63: London Scala Meetup - Omnia

•  Full duplex serving layer.

•  Can be queried from any backend…

•  ... and we provide a JS library to provide efficient data access from the browser. Inspired by Falcor and GraphML

HERMES

Page 64: London Scala Meetup - Omnia

HERMES

B2CBrowser

B2BLoad

bal

ance

r

Push Server

DistributedCache Push

Server

Push Server

TCP

WS

HTTP

JS A

PI WH AppsC

ache

Cac

heApps

Page 65: London Scala Meetup - Omnia

HERMES

HermesDistributedCache

HermesNode

LocalCache

SubscripDo

nManager

ClientM

anager

Authen

DcaD

onHandler

Dispatcher

HTTP

WS

TCP

Browser

Herm

esJS

WHAp

ps

Page 66: London Scala Meetup - Omnia

INFRASTRUCTURE

Page 67: London Scala Meetup - Omnia

INFRASTRUCTURE

Omnia

Docker

Marathon

Mesos

Node Node Node Node Node

Page 68: London Scala Meetup - Omnia

USE CASE: BET SUGGESTIONS

Page 69: London Scala Meetup - Omnia

•  To provide customers with bet suggestions to make their experience more relevant/personal

•  Offered to new and existing customers.

•  Hot bets and personalized suggestions.

USE CASE: BET SUGGESTIONS

Page 70: London Scala Meetup - Omnia

USE CASE: BET SUGGESTIONS

Page 71: London Scala Meetup - Omnia

USE CASE: GAMIFICATION

Page 72: London Scala Meetup - Omnia

•  To provide customers with a more engaging experience by gamifying parts of the customer journey.

•  Appeal to attributes like status, mastery, belonging.

•  Achievements and rewards, leveling up, leaderboard, …

USE CASE: GAMIFICATION

Page 73: London Scala Meetup - Omnia

USE CASE: GAMIFICATION

Page 74: London Scala Meetup - Omnia

https://careers.williamhillplc.com

QUESTIONS

74

Twitter: @WHTechjobs