big game data - event tracking mit storm, kestrel und der lambda architektur - code.talks 2014

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

Upload: volker-janz

Post on 30-Jun-2015

379 views

Category:

Technology


1 download

DESCRIPTION

Event Tracking ist ein bekanntes Problem aus dem Big Data Bereich. Die Präsentation zeigt unsere Lösung bei InnoGames und geht dabei auf Technologien wie Apache Storm und Kestrel näher ein. Zudem wird die Lambda Architektur vorgestellt und mit Beispieltechnologien verständlich und praktisch erklärt.

TRANSCRIPT

Page 1: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 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 - code.talks 2014

Big Game Data - Volker Janz 2

Page 3: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 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 - code.talks 2014

Big Game Data - Volker Janz 4

Page 5: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 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 - code.talks 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 - code.talks 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 - code.talks 2014

Big Game Data - Volker Janz 8

Was ist Big Data? "

Volume

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

Big Game Data - Volker Janz 9

Was ist Big Data? "

Variety

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

Big Game Data - Volker Janz 10

Was ist Big Data? "

Velocity

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

Big Game Data - Volker Janz 11

Was ist Big Data? "

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

Big Game Data - Volker Janz 12

⚡ Events

Keynote Template

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

Big Game Data - Volker Janz 13

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 14: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 14

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 15: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 15

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 16: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 16

Events ⚡

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

Big Game Data - Volker Janz 17

Events ⚡

prog/build

prog/fight

set/change

soci/invite

soci/message

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

Big Game Data - Volker Janz 18

Events ⚡

250M90G2700G

Events / Tag

Daten / Tag

Daten / Monat

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

Big Game Data - Volker Janz 19

Events ⚡

" GameServer

# Hadoop

" GameServer

" GameServer

" GameServer

" GameServer

" GameServer

" GameServer

" GameServer

" GameServer

📈

👤

💻

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

Big Game Data - Volker Janz 20

🚀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 21: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 21

% Event Tracking

Keynote Template

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

Big Game Data - Volker Janz 22

Event Tracking %

Aller Anfang ist schwer

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

Big Game Data - Volker Janz 23

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 24: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 24

'Gateway

*Queue

💻Client

+Consumer

Twitter Kestrel

Apache Storm

Perl Script

REST API mit Dropwizard

Event Tracking %

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

Big Game Data - Volker Janz 25

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 26: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 26

* Kestrel

Keynote Template

https://github.com/twitter/kestrel

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

Big Game Data - Volker Janz 27

Kestrel *

Einfache, verteile Message queue

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

Big Game Data - Volker Janz 28

Kestrel *

Persistent Hält Messages im Speicher für Speed

Schreibt in Journal Dateien für Persistenz

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

Big Game Data - Volker Janz 29

Kestrel *

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

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

Big Game Data - Volker Janz 30

Kestrel *

Flexibel memcache Protokoll

Einfaches text Protokoll Apache Thrift

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

Big Game Data - Volker Janz 31

💻

Kestrel *

*geordnet

*geordnet

*locker geordnet

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

Big Game Data - Volker Janz 32

💻

Kestrel *

*events_queue

*events_queue+fanout💻

Client 1

Client 2

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

Big Game Data - Volker Janz 33

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 34: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 34

Kestrel *

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

Big Game Data - Volker Janz 35

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 36: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 36

⚡ Storm

Keynote Template

https://github.com/apache/storm

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

Big Game Data - Volker Janz 37

Storm ⚡

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

streams of data.

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

Big Game Data - Volker Janz 38

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“ oder „exactly once“ Verarbeitung

von Nachrichten

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

Big Game Data - Volker Janz 39

Storm ⚡

Tupel

Tupel

Tupel

Tupel

Datenstrom

Storm verarbeitet Datenströme aus Tupeln

Ein Tupel ist eine Liste von Werten

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

Big Game Data - Volker Janz 40

Storm ⚡

Spout

Quelle von Datenströmen

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

Big Game Data - Volker Janz 41

Storm ⚡

Verarbeitung von Tupeln

Bolt

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

Big Game Data - Volker Janz 42

Storm ⚡

In Datenbank schreiben

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

Big Game Data - Volker Janz 43

Storm ⚡

Aus Datenbank lesen

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

Big Game Data - Volker Janz 44

Storm ⚡

Optional weitere Tupel / Datenströme erzeugen

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

Big Game Data - Volker Janz 45

Storm ⚡

Eine Topologie ist ein gerichteter azyklischer Graph und eine

Komposition aus Spouts und Bolts

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

Big Game Data - Volker Janz 46

Storm ⚡

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

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

Big Game Data - Volker Janz 47

Storm ⚡

Worker NodeWorker Prozess

Executor

Task⚙

Task

Task⚙

Task

image

Nimbus

ZK

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

Big Game Data - Volker Janz 48

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 49: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 49

Storm ⚡

public

collector } }

}

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

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

Big Game Data - Volker Janz 50

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 51: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 51

Storm ⚡

public

collector }

collector }

}

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

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

Big Game Data - Volker Janz 52

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 53: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

Big Game Data - Volker Janz 53

λ Lambda Architektur

Keynote Template

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

Big Game Data - Volker Janz 54

Lambda Architektur λ

Abstrakte Architektur für die Realisierung von skalierbaren

Echtzeitsystemen

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

Big Game Data - Volker Janz 55

Lambda Architektur λ

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

!

📕

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

Big Game Data - Volker Janz 56

Lambda Architektur λ

# Datenquellen

Batch Layer

Speed Layer

Serving Layer Query

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

Big Game Data - Volker Janz 57

Lambda Architektur λ

# Datenquellen

Query

Batch Layer

Speed Layer

Serving Layer

Master Datensatz

Batch Views⟳

Datenstrom Real-Time Views⚡

Merged View)

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

Big Game Data - Volker Janz 58

Lambda Architektur λ

Messaging System Query

DB / DFSBatch

Processing System

Stream Processing System

DB Batch Views

DB Real-Time Views

Application

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

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

59

λ

Apache Kafka / Kestrel Query

HDFS MapReduce / Spark

Storm-YARN

HOYAHue /

Apache Twill / Apache

Slider

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

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

60

λ

Apache Kafka / Kestrel Query

HDFS MapReduce / Spark

Storm-YARN HOYA

HDFS

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

Big Game Data - Volker Janz 61

" Game Server

'REST API

Perl Script

*Kestrel

Hadoop

'REST API

*Kestrel

LB⚡

Storm Cluster

⟳Round Robin

Event File

Lambda Architektur λ

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

Big Game Data - Volker Janz 62

" Game Server

'REST API

Perl Script

'REST API

LB ⟳

Event File

*Kestrel

*Kestrel

Hadoop

HBASE

Storm Cluster

Event Consumer

Lambda Architektur λ

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

Big Game Data - Volker Janz 63

" Game Server

'REST API

Perl Script

'REST API

LB ⟳

Event File

*Kestrel

*Kestrel

Hadoop

HBASE

Storm Cluster

Event Consumer

Lambda Architektur λ

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

Big Game Data - Volker Janz 64

" 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 65: Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - code.talks 2014

*Mark Twain

If the only tool you have is a hammer, everything

looks like a nail.

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

2012

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

*

2014

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

*Albert Einstein

Not everything that can be counted counts. Not everything that

counts can be counted.

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

Big Game Data - Volker Janz 69

! @prenomenon " 3

VIELEN DANK+

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

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

Big Game Data - Volker Janz 70

! @prenomenon " 3

VIELEN DANK+

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

JOIN US ,