big game data - event tracking mit storm, kestrel und der lambda architektur - data2day 2014

Post on 17-Jul-2015

10.449 Views

Category:

Data & Analytics

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Big Game Data - Volker Janz

Big Game Data

1

Event Tracking @ InnoGames

Big Game Data - Volker Janz 2

Big Game Data - Volker Janz 3

@prenomenon!

Lead Software Developer💼

Volker Janz

Big Game Data - Volker Janz 4

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

Big Game Data - Volker Janz 6

" Was ist Big Data?

Keynote Template

Big Game Data - Volker Janz 7

Was ist Big Data? "

Big Game Data - Volker Janz 8

Was ist Big Data? "

VolumeVarietyVelocity

Big Game Data - Volker Janz 9

⚡ Events

Keynote Template

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.

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.

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

Big Game Data - Volker Janz 13

Events ⚡

Big Game Data - Volker Janz 14

Events ⚡

prog/build

prog/fight

set/change

soci/invite

soci/message

Big Game Data - Volker Janz 15

Events ⚡

280M100G3000G

Events / Tag

Daten / Tag

Daten / Monat

Big Game Data - Volker Janz16

Events ⚡

" Hadoop

$ GameServer

$ GameServer

$ GameServer

📈

👤

💻

Game Backend Tracking

Drag Your Image Here

Big Game Data - Volker Janz 17

% Event Tracking

Keynote Template

Big Game Data - Volker Janz 18

Event Tracking %

Aller Anfang ist schwer

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)

Big Game Data - Volker Janz 20

'Gateway

(Queue

💻Client

)Consumer

Twitter Kestrel

Apache Storm

Perl Script

REST API mit Dropwizard

Event Tracking %

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

Big Game Data - Volker Janz 22

( Kestrel

Keynote Template

https://github.com/twitter/kestrel

Big Game Data - Volker Janz 23

Kestrel (

Einfache, verteile Message queue

Big Game Data - Volker Janz 24

Kestrel (

Persistent Hält Messages im Speicher für Speed

Schreibt in Journal Dateien für Persistenz

Big Game Data - Volker Janz 25

Kestrel (

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

Big Game Data - Volker Janz 26

Kestrel (

Flexibel memcache Protokoll

Einfaches text Protokoll Apache Thrift

Big Game Data - Volker Janz 27

💻

Kestrel (

(geordnet

(geordnet

(locker geordnet

Big Game Data - Volker Janz 28

💻

Kestrel (

(events_queue

(events_queue+fanout💻

Client 1

Client 2

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 }}

Big Game Data - Volker Janz 30

Kestrel (

Big Game Data - Volker Janz 31

⚡ Storm

Keynote Template

https://github.com/apache/storm

Big Game Data - Volker Janz 32

Storm ⚡

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

streams of data.

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

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

Big Game Data - Volker Janz 35

Storm ⚡

Spout

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

Big Game Data - Volker Janz 36

Storm ⚡

Verarbeitung von Tupeln

Bolt

Big Game Data - Volker Janz 37

Storm ⚡

In Datenbank schreiben

Big Game Data - Volker Janz 38

Storm ⚡

Aus Datenbank lesen

Big Game Data - Volker Janz 39

Storm ⚡

Optional weitere Tupel / Datenströme erzeugen

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

Big Game Data - Volker Janz 40

Storm ⚡

Eine Topologie ist ein gerichteter azyklischer Graph und eine

Komposition aus Spouts und Bolts

Big Game Data - Volker Janz 41

λ Lambda Architektur

Keynote Template

Big Game Data - Volker Janz 42

Lambda Architektur λ

Abstrakte Architektur für die Realisierung von skalierbaren

Echtzeitsystemen

Big Game Data - Volker Janz 43

Lambda Architektur λ

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

!

📕

Big Game Data - Volker Janz 44

Lambda Architektur λ

" Datenquellen

Batch Layer

Speed Layer

Serving Layer Query

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&

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

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

47

λ

Kestrel Query

HDFS MapReduce / Spark

Storm-YARN

HOYAHue /

Apache Twill / Apache

Slider

Big Game Data - Volker Janz

Hadoop 2 / YARN

Lambda Architektur

48

λ

Query

HDFS MapReduce / Spark

Storm-YARN HOYA

HDFS

Apache Mesos

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

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

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 λ

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 λ

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 λ

'Mark Twain

If the only tool you have is a hammer, everything

looks like a nail.

2012

'

2014

Big Game Data - Volker Janz 57

! @prenomenon " 0

VIELEN DANK(

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

Backup Folien

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

Big Game Data - Volker Janz60

Events ⚡

💻Client

" Hadoop

$ GameServer

💻Client

$ GameServer

💻Client

$ GameServer

📈

👤

💻

Client Side Tracking

Game Backend Tracking

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

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)); } }

}

Big Game Data - Volker Janz 63

Storm ⚡

public

collector } }

}

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

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); }

}

Big Game Data - Volker Janz 65

Storm ⚡

public

collector }

collector }

}

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

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();}

Big Game Data - Volker Janz 67

Storm ⚡

Worker NodeWorker Prozess

Executor

Task⚙

Task

Task⚙

Task

image

Nimbus

ZK

Big Game Data - Volker Janz 68

Storm ⚡

Alternativen?

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

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

'Albert Einstein

Not everything that can be counted counts. Not everything that

counts can be counted.

top related