big game data - event tracking mit storm, kestrel und der lambda architektur - code.talks 2014
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
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? "
Volume
Big Game Data - Volker Janz 9
Was ist Big Data? "
Variety
Big Game Data - Volker Janz 10
Was ist Big Data? "
Velocity
Big Game Data - Volker Janz 11
Was ist Big Data? "
Big Game Data - Volker Janz 12
⚡ Events
Keynote Template
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.
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.
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
Big Game Data - Volker Janz 16
Events ⚡
Big Game Data - Volker Janz 17
Events ⚡
prog/build
prog/fight
set/change
soci/invite
soci/message
Big Game Data - Volker Janz 18
Events ⚡
250M90G2700G
Events / Tag
Daten / Tag
Daten / Monat
Big Game Data - Volker Janz 19
Events ⚡
" GameServer
# Hadoop
" GameServer
" GameServer
" GameServer
" GameServer
" GameServer
" GameServer
" GameServer
" GameServer
📈
👤
💻
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
Big Game Data - Volker Janz 21
% Event Tracking
Keynote Template
Big Game Data - Volker Janz 22
Event Tracking %
Aller Anfang ist schwer
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)
Big Game Data - Volker Janz 24
'Gateway
*Queue
💻Client
+Consumer
Twitter Kestrel
Apache Storm
Perl Script
REST API mit Dropwizard
Event Tracking %
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
Big Game Data - Volker Janz 26
* Kestrel
Keynote Template
https://github.com/twitter/kestrel
Big Game Data - Volker Janz 27
Kestrel *
Einfache, verteile Message queue
Big Game Data - Volker Janz 28
Kestrel *
Persistent Hält Messages im Speicher für Speed
Schreibt in Journal Dateien für Persistenz
Big Game Data - Volker Janz 29
Kestrel *
Zuverlässig Clients können Messages „vorläufig“ lesen Bei Abbruch wird Message „zurückgelegt“
Big Game Data - Volker Janz 30
Kestrel *
Flexibel memcache Protokoll
Einfaches text Protokoll Apache Thrift
Big Game Data - Volker Janz 31
💻
Kestrel *
*geordnet
*geordnet
*locker geordnet
Big Game Data - Volker Janz 32
💻
Kestrel *
*events_queue
*events_queue+fanout💻
Client 1
Client 2
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 }}
Big Game Data - Volker Janz 34
Kestrel *
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
Big Game Data - Volker Janz 36
⚡ Storm
Keynote Template
https://github.com/apache/storm
Big Game Data - Volker Janz 37
Storm ⚡
Apache™ Storm is a distributed real-time computation system for processing fast, large
streams of data.
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
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
Big Game Data - Volker Janz 40
Storm ⚡
Spout
Quelle von Datenströmen
Big Game Data - Volker Janz 41
Storm ⚡
Verarbeitung von Tupeln
Bolt
Big Game Data - Volker Janz 42
Storm ⚡
In Datenbank schreiben
Big Game Data - Volker Janz 43
Storm ⚡
Aus Datenbank lesen
Big Game Data - Volker Janz 44
Storm ⚡
Optional weitere Tupel / Datenströme erzeugen
Big Game Data - Volker Janz 45
Storm ⚡
Eine Topologie ist ein gerichteter azyklischer Graph und eine
Komposition aus Spouts und Bolts
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
Big Game Data - Volker Janz 47
Storm ⚡
Worker NodeWorker Prozess
Executor
⚙
Task⚙
Task
⚙
Task⚙
Task
image
Nimbus
ZK
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)); } }
}
Big Game Data - Volker Janz 49
Storm ⚡
public
collector } }
}
Kestrel Spout https://github.com/nathanmarz/storm-kestrel
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); }
}
Big Game Data - Volker Janz 51
Storm ⚡
public
collector }
collector }
}
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
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();}
Big Game Data - Volker Janz 53
λ Lambda Architektur
Keynote Template
Big Game Data - Volker Janz 54
Lambda Architektur λ
Abstrakte Architektur für die Realisierung von skalierbaren
Echtzeitsystemen
Big Game Data - Volker Janz 55
Lambda Architektur λ
@nathanmarz http://manning.com/marz/
!
📕
Big Game Data - Volker Janz 56
Lambda Architektur λ
# Datenquellen
Batch Layer
Speed Layer
Serving Layer Query
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)
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
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
Big Game Data - Volker Janz
Hadoop 2 / YARN
Lambda Architektur
60
λ
Apache Kafka / Kestrel Query
HDFS MapReduce / Spark
Storm-YARN HOYA
HDFS
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 λ
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 λ
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 λ
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 λ
*Mark Twain
If the only tool you have is a hammer, everything
looks like a nail.
2012
*
2014
*Albert Einstein
Not everything that can be counted counts. Not everything that
counts can be counted.
Big Game Data - Volker Janz 69
! @prenomenon " 3
VIELEN DANK+
de.linkedin.com/in/vjanz/innogames.com jobs.innogames.com blog.innogames.com
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 ,