Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

70
Big Game Data - Volker Janz Big Game Data 1 Event Tracking @ InnoGames

Transcript of Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Page 1: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz

Big Game Data

1

Event Tracking @ InnoGames

Page 2: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 2

Page 3: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 3

@prenomenon!

Lead Software Developer💼

Volker Janz

Page 4: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 4

Page 5: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 5

InnoGames๏ Free-to-play Onlinespiele

๏ Die Stämme

๏ Forge of Empires

๏ Grepolis

๏ The West

๏ 350 Mitarbeiter am Standort Hamburg

๏ Mehr als 130 Millionen Registrierungen

๏ International

๏ Bester Arbeitgeber der Games Branche

Page 6: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 6

" Was ist Big Data?

Keynote Template

Page 7: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 7

Was ist Big Data? "

Page 8: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 8

Was ist Big Data? "

VolumeVarietyVelocity

Page 9: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 9

⚡ Events

Keynote Template

Page 10: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 10

Events ⚡

!Ein Event ist ein Indikator für ein beobachtbares Geschehen

bzw. eine Zustandsänderung in Form einer Text Nachricht

welche aktiv sowie passiv durch oder für einen bestimmten,

identifizierbaren Nutzer oder ein System zu einer bestimmten

Zeit ausgelöst werden kann.

Page 11: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 11

Events ⚡

!Ein Event ist ein Indikator für ein beobachtbares Geschehen

bzw. eine Zustandsänderung in Form einer Text Nachricht

welche aktiv sowie passiv durch oder für einen bestimmten,

identifizierbaren Nutzer oder ein System zu einer bestimmten

Zeit ausgelöst werden kann.

Page 12: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 12

Events ⚡

0.1.0/prog/build/foe/2.0.1/de/4711/2014-10-01T13:37.000Z/ua/kaserne/10/20/15

Identifikatoren Metadaten Parameter

version/category/type/game/sprint/market/player/date/user_agent/param1/…/paramN

Page 13: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 13

Events ⚡

Page 14: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 14

Events ⚡

prog/build

prog/fight

set/change

soci/invite

soci/message

Page 15: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 15

Events ⚡

280M100G3000G

Events / Tag

Daten / Tag

Daten / Monat

Page 16: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz16

Events ⚡

" Hadoop

$ GameServer

$ GameServer

$ GameServer

📈

👤

💻

Game Backend Tracking

Drag Your Image Here

Page 17: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 17

% Event Tracking

Keynote Template

Page 18: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 18

Event Tracking %

Aller Anfang ist schwer

Page 19: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 19

Event Tracking %

$ Game Server

'Event

Gateway

Event Client

(Message Queue

)Event

Consumer

Hadoop

📈

👤

💻

Entkoppeln und einfacher einstieg ins System

Buffer und „Auffangbecken“ - Bereitstellung der Events an

Consumer

Konsumieren und Schreiben der Events an die Korrekte

Stelle im HDFS (Partitionierung)

Verteilte Speicherung (HDFS) und Verarbeitung

(MapReduce, Spark)

Page 20: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 20

'Gateway

(Queue

💻Client

)Consumer

Twitter Kestrel

Apache Storm

Perl Script

REST API mit Dropwizard

Event Tracking %

Page 21: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 21

Event Tracking %

$ Game Server

'REST API

Perl Script

(Kestrel

Hadoop

'REST API

(Kestrel

LB⚡

Storm Cluster

⟳Round Robin

Event File

Backup =nginx access.log +$request_body +logrotate +hadoop fs -put

Page 22: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 22

( Kestrel

Keynote Template

https://github.com/twitter/kestrel

Page 23: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 23

Kestrel (

Einfache, verteile Message queue

Page 24: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 24

Kestrel (

Persistent Hält Messages im Speicher für Speed

Schreibt in Journal Dateien für Persistenz

Page 25: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 25

Kestrel (

Zuverlässig Clients können Messages „vorläufig“ lesen Bei Abbruch wird Message „zurückgelegt“

Page 26: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 26

Kestrel (

Flexibel memcache Protokoll

Einfaches text Protokoll Apache Thrift

Page 27: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 27

💻

Kestrel (

(geordnet

(geordnet

(locker geordnet

Page 28: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 28

💻

Kestrel (

(events_queue

(events_queue+fanout💻

Client 1

Client 2

Page 29: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 29

Kestrel (

new KestrelConfig { queues = new QueueBuilder() { name = "q" maxItems = 500 } :: new QueueBuilder() { name = "q+fanout" maxAge = 1.minute } :: new QueueBuilder() { name = "x" maxMemorySize = 16.megabytes }}

Page 30: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 30

Kestrel (

Page 31: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 31

⚡ Storm

Keynote Template

https://github.com/apache/storm

Page 32: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 32

Storm ⚡

Apache™ Storm is a distributed real-time computation system for processing fast, large

streams of data.

Page 33: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 33

Storm ⚡

Schnell⏩

1.000.000 100 Byte Nachrichten pro

Sekunde pro Node

Skalierbar,

Parallele, im Cluster verteilte

Berechnung

Fehlertolerant❌

Ausfallende Worker und Nodes werden

automatisch kompensiert

Zuverlässig✓

Garantiert „at least once“ Verarbeitung

von Nachrichten

Page 34: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 34

Storm ⚡

Tupel

Tupel

Tupel

Tupel

Datenstrom

Storm verarbeitet Datenströme aus Tupeln

Ein Tupel ist eine Liste von Werten

Page 35: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 35

Storm ⚡

Spout

Quelle von DatenströmenKestrel Spout https://github.com/nathanmarz/storm-kestrel

Page 36: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 36

Storm ⚡

Verarbeitung von Tupeln

Bolt

Page 37: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 37

Storm ⚡

In Datenbank schreiben

Page 38: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 38

Storm ⚡

Aus Datenbank lesen

Page 39: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 39

Storm ⚡

Optional weitere Tupel / Datenströme erzeugen

HDFS Bolt https://github.com/ptgoetz/storm-hdfs

Page 40: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 40

Storm ⚡

Eine Topologie ist ein gerichteter azyklischer Graph und eine

Komposition aus Spouts und Bolts

Page 41: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 41

λ Lambda Architektur

Keynote Template

Page 42: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 42

Lambda Architektur λ

Abstrakte Architektur für die Realisierung von skalierbaren

Echtzeitsystemen

Page 43: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 43

Lambda Architektur λ

@nathanmarz http://manning.com/marz/

!

📕

Page 44: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 44

Lambda Architektur λ

" Datenquellen

Batch Layer

Speed Layer

Serving Layer Query

Page 45: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 45

Lambda Architektur λ

" Datenquellen

Query

Batch Layer

Speed Layer

Serving Layer

Master Datensatz

Batch Views⟳

Datenstrom Real-Time Views⚡

Merged View&

Page 46: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 46

Lambda Architektur λ

Messaging System Query

DB / DFSBatch

Processing System

Stream Processing System

DB Batch Views

DB Real-Time Views

Application

Page 47: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

47

λ

Kestrel Query

HDFS MapReduce / Spark

Storm-YARN

HOYAHue /

Apache Twill / Apache

Slider

Page 48: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

48

λ

Query

HDFS MapReduce / Spark

Storm-YARN HOYA

HDFS

Apache Mesos

Page 49: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz

Lambda Architektur

49

λ

select c.name, hb.tweets.countfrom hive.ods.`customers` cjoin hbase.user.`socialdata` hbon c.customerId = convert_from(hb.rowkey, UTF-8);

http://incubator.apache.org/drill/

Customer in Hadoop / Hive

Tweets in HBase

Page 50: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 50

$ Game Server

'REST API

Perl Script

(Kestrel

Hadoop

'REST API

(Kestrel

LB⚡

Storm Cluster

Event File

Lambda Architektur λ

⟳Round Robin

Page 51: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 51

$ Game Server

'REST API

Perl Script

'REST API

LB ⟳

Event File

(Kestrel

(Kestrel

Hadoop

HBASE

Storm Cluster

Event Consumer

Lambda Architektur λ

Page 52: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 52

$ Game Server

'REST API

Perl Script

'REST API

LB

Event File

(Kestrel

(Kestrel

Hadoop

HBASE

Storm Cluster

Event Consumer

Lambda Architektur λ

Page 53: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz

53

$ Game Server

'REST API

Perl Script

'REST API

LB

Event File

(Kestrel

(Kestrel

Hadoop

HBASE

Storm Cluster

Event ConsumerBatch Layer

Speed Layer Serving

Layer

Datenquelle

Lambda Architektur λ

Page 54: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

'Mark Twain

If the only tool you have is a hammer, everything

looks like a nail.

Page 55: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

2012

Page 56: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

'

2014

Page 57: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 57

! @prenomenon " 0

VIELEN DANK(

de.linkedin.com/in/vjanz/innogames.com jobs.innogames.com blog.innogames.com

Page 58: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Backup Folien

Page 59: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 59

🚀Spieler verstehen

und Spiele optimieren 📈

Ad-hoc Analysen und

automatisiere Reports

📱Mobile

Plattformen differenzieren

Drag Your Image Here

Events ⚡

'Datenbereitstellung

für andere Systeme (BI)

⚡Echtzeitanalysen

und Aktionen

Page 60: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz60

Events ⚡

💻Client

" Hadoop

$ GameServer

💻Client

$ GameServer

💻Client

$ GameServer

📈

👤

💻

Client Side Tracking

Game Backend Tracking

Page 61: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 61

Storm ⚡

Spouts und Bolts werden als individuelle Tasks parallel im Cluster ausgeführt, die Verteilung der Tupel geschieht durch Stream Grouping

Page 62: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 62

Storm ⚡

public class RedisSpout extends BaseRichSpout {

// ... @Override public void nextTuple() { String message = jedis.rpop(messageQueue);

if(null != message && !message.equals(NIL)) { int pos = message.indexOf(","); String entityId = message.substring(0, pos); String recordData = message.substring(pos+1); collector.emit(new Values(entityId, recordData)); } }

}

Page 63: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 63

Storm ⚡

public

collector } }

}

Kestrel Spout https://github.com/nathanmarz/storm-kestrel

Page 64: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 64

Storm ⚡

public static class WordCount extends BaseBasicBolt { Map<String, Integer> counts = new HashMap<String, Integer>();

@Override public void execute(Tuple tuple, BasicOutputCollector collector) { String sentence = tuple.getString(0);

for (String word : sentence.split(" ")) { collector.emit(tuple, new Values(word)); }

collector.ack(tuple); }

}

Page 65: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 65

Storm ⚡

public

collector }

collector }

}

HDFS Bolt https://github.com/ptgoetz/storm-hdfs

Page 66: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 66

Storm ⚡

public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout", new RandomSentenceSpout(), 5); builder.setBolt("split", new SplitSentence(), 8).shuffleGrouping("spout"); builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));

Config conf = new Config(); conf.setDebug(true);

// ...

LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology());

Thread.sleep(10000);

cluster.shutdown();}

Page 67: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 67

Storm ⚡

Worker NodeWorker Prozess

Executor

Task⚙

Task

Task⚙

Task

image

Nimbus

ZK

Page 68: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 68

Storm ⚡

Alternativen?

) http://odysseus.informatik.uni-oldenburg.de/

Page 69: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

Big Game Data - Volker Janz 69

Kestrel (

) watch -t -d -n,1 'echo "DUMP_STATS" | nc localhost 22133'

*SET <queue-name> <flags (ignored)> <expiration> <# bytes> echo -e "SET game_events 0 0 16\n0.1.0/prog/build\n" | nc localhost 22133

+GET <queue-name>[options] echo "GET game_events" | nc localhost 22133

Page 70: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

'Albert Einstein

Not everything that can be counted counts. Not everything that

counts can be counted.