eonblast an erlang game stack erlang user conference 2012 h. diedrich lua + erlang + voltdb

66
An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Upload: griselda-gibson

Post on 11-Jan-2016

247 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

An Erlang Game Stack

Erlang User Conference 2012H. Diedrich

Lua + Erlang + VoltDB

Page 2: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Henning Diedrich

• Maintainer Emysql, Erlvolt, Erlualib• Eonblast: game + film• NewTracks: game + music• Bricks and mortar• Insurance tariff language

Octocat says: try markedoc!

Page 3: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Eonblast

QuickTime™ and aTIFF (LZW) decompressor

are needed to see this picture.

Page 4: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

This Talk

• A game server architecture

• Its components

• Their interfaces

Page 5: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

This Talk

• Work in progress

• Unproven concepts

• Lies, conjecture

• 3 genius tools

• 10,000 lines of code

Page 6: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Questions

Please throw them in like Torben.Mail me at [email protected].

Erlang Mailing List.

Page 7: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Erlang Game Servers

Page 8: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Erlang + MySQL

http://eonblast.github.com/Emysql

Page 9: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

The Hurt

• Leaks, Deadlocks• Bad Productivity• Game Design Language Gap

• Less Features• Less Players• Lesser Product

Page 10: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Target

„The perfect game server“(makes no sense)

Page 11: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Generals’ Problem

State

Page 12: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Generals’ Problem

State

Page 13: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Generals’ Problem

State

Page 14: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Generals’ Problem

State

Page 15: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Generals’ Problem

State

Page 16: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Byzantine Generals

State

Page 17: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

The Hunt

Server Stack

• Language

• Database

• Protocol

• Game Logic

Page 18: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Spec

“Table Game”

• 1 million active players• 1 million transactions per

second• 1 second latency• Linear scale• 100% data integrity

Page 19: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Client Architecture

• Fat JavaScript Browser Client

• COMET

Page 20: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Language

Wishlist• Robustness• Deadlock-free• Multi-core• Linear Scale

er?

Page 21: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Database

CAP• Distributed• Consistent• Highly-available• Partition-

tolerantAll of it!

Page 22: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Database

ACID• Atomicity• Consistency• Integrity• DurabilityFor Granted

Page 23: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Database

Double Bookkeeping• Not every game needs it• Require ACID

Transactions• Neigh impossible to

emulate• Impossible with BASE /

Eventual Consistency

Page 24: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

DatabaseUpcoming Blog Post

• Looking at 12 databases• Riak, Cassandra, Membase, H Base, Voldemort, MySQL, MySQL Cluster,

Redis, Redis Cluster, Tokyo Cabinet, Memcached, CouchDB, Couchbase, VoltDB, MongoDB

• In the light of what games need

• „Unbiased comparison“• Twitter @hdiedrich

Page 25: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Protocol

Wishlist• Small footprint• Fast to encode• Human-

readable

Page 26: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Logic

Wishlist• Human

Readable• Stable• Fast• Concise• Small Footprint

Page 27: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

The Answers

• Client

• Protocol

• Server

• Logic

• Data

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 28: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

“Embeddable scripting language”

Page 29: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua

„Lua is strange.“R. Virding

Page 30: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua

a = “Roberto”

if a ~= nil then

print “Hello ” .. a .. “!”

end

Page 31: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua

• Created 1993• Simple, imperative syntax • Stable syntax, stable VMs• Two main VMs: ISO C, JIT• Game scripting champion• Open Source, 100%

dictatorial**benevolent, of course

Site: http://www.lua.org List: [email protected]

Page 32: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua

• Made for non-programmers - imperative syntax

• Powerful for programmers - Scheme semantics

• Made for DSLs - extensible semantics• Made to be extended - simple C API• Made to be embedded - small VM footprint

• Now with a native Erlang VM!

Page 33: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua Caveats

• Deceiving Looks• Encourages magic• Simple but not for

beginners• Syntax forked• Only one collection type

Page 34: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Lua VMs

• PUC Reference VMLua 5.2

• JIT VM remains at Lua 5.1adds extensions

• LuerlLua 5.2incomplete

pure ISO Csuper compatible

X86, ARM, PPC, MIPSsuper fast

native Erlang VMsuper stable

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“ benötigt.

Page 35: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Architecture

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 36: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Page 37: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

World State

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

State

Page 38: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

World State

State

State

State State State State

Page 39: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

World State

State

State

State State State State

Page 40: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

World State

State

State State State State

State

Page 41: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

World State

State

State State State StateState

Page 42: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

“High Velocity Database”

Page 43: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

VoltDB

• Created 2009• Simple SQL syntax • Stable 2.5• Commercial developer,

support• High Velocity Secret Tip• Open Source, 100%

dictatorial**benevolent, of course

Site: http://www.volt.com

Page 44: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

VoltDB

• ACID transactions – double bookkeeping• SQL – subset of '92• Linear scale - „unlimited“ data (but ...)• Made for OLTP - fast, cheap writes, high

throughput• “More SQL than SQL” – invites clean sep. of data• In-memory - 100x faster than MySQL• Replication, Snapshots – 'hot backup built in'

Page 45: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

VoltDB Caveats

• Less agile than MySQL/NoSQL• Need to understand partitions• Must program SPs in Java• Not elastic (yet)• No online schema change (yet)• There is always a bottleneck• Simple but not for beginners

Page 46: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Horizonzal Partitions

State#

Page 47: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Replication

State#

Page 48: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Actual Connections

State State State StateState

State

Page 49: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 50: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

ErlvoltErlvolt

FleeceFleece

ErlualibErlualib

Page 51: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

ErlvoltErlvolt

FleeceFleece

LuerlLuerl

Page 52: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

The Packages

ErlvoltErlvolt

FleeceFleece

ErlualibErlualib

LuerlLuerl

Lua to JSON

Lua port

Lua VM

VoltDB driver

• Protocol

• Logic

• Logic

• Data

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 53: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Erlualib

• Lua embedding library for Erlang

• Lua state in original PUC Lua VM• A fast way• A not secure way: can crash

Erlang

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 54: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Hello Erlualib

hello() ->% get handle of the Lua engine{ok, L} = lua:new_state(),

% put "print" global on top of stacklua:getfield(L, global, "print"),

% put hello on toplua:pushstring(L, "Hello from Lua!"),

% execute on top 2 values on stacklua:call(L, 1, 0).

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 55: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Hello Erlualib

hello() ->

{ok, L} = lua:new_state(),

lua:getfield(L, global, "print"),

lua:pushstring(L, "Hello from Lua!"),

lua:call(L, 1, 0).

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 56: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Luerl

• New Lua VM programmed in Erlang

• Perfectly secure way• Precompiled Chunks• Re-usable State• Work in progress

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 57: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Hello Luerl

hello() ->

L = luerl:init(),

luerl:do("print('Hello from Lua!')", L).

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 58: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Hello Luerl

hello() ->

L = luerl:init(), Chunk = luerl:eval("print('Hello from Lua!')",

L), luerl:call(Chunk, L)

% Chunk an L can be re-used.

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 59: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

BenchmarkLuerl vs Erlualib

Erlualib / PUC Luerl

270 µs state Init250 µs

10 µs parse 1 + 1 15 µs

(2.5 µs) execute 1 + 1 13 µs

23 µs parse formula 63 µs

2.5 µs execute formula 35 µs

2.5 µs call a function 28 µs

Formula: a = 7.33; b = 9000; c = (33 * a / b) ^ 15 * a + b

Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“

benötigt.

Page 60: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Page 61: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Fleece

•Fastest Lua JSON encoder•C + ASM or ISO C•Faster than Lua JIT•Faster than concat•10x faster than other fastest

Page 62: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Page 63: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Erlvolt

•Native Erlang VoltDB driver•Async parallel data shuffling•Coming next Quarter•Your help is wanted•Connect over github

Page 64: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Server Architecture

•Erlang•Lua• JSON•VoltDB

•Luerl•Erlualib•Fleece•Erlvolt

Page 65: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Invitation

• All at github• All w/samples & docs• All maintained by Eonblast• Luerl maintained by R.

Virding• Updates @hdiedrich,

@rvirding

Page 66: Eonblast An Erlang Game Stack Erlang User Conference 2012 H. Diedrich Lua + Erlang + VoltDB

Eonblast

An Erlang Game Stack

Questions

Mail: [email protected] Skype: eonblast

Twitter: @hdiedrich