an erlang game stack
DESCRIPTION
Erlang User Conference 2012 H. Diedrich. Lua + Erlang + VoltDB. 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!. Eonblast. This Talk. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/1.jpg)
Eonblast
An Erlang Game Stack
An Erlang Game Stack
Erlang User Conference 2012H. Diedrich
Lua + Erlang + VoltDB
![Page 2: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/2.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/3.jpg)
Eonblast
An Erlang Game Stack
Eonblast
QuickTime™ and aTIFF (LZW) decompressor
are needed to see this picture.
![Page 4: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/4.jpg)
Eonblast
An Erlang Game Stack
This Talk
• A game server architecture
• Its components
• Their interfaces
![Page 5: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/5.jpg)
Eonblast
An Erlang Game Stack
This Talk
• Work in progress
• Unproven concepts
• Lies, conjecture
• 3 genius tools
• 10,000 lines of code
![Page 6: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/6.jpg)
Eonblast
An Erlang Game Stack
Questions
Please throw them in like Torben.Mail me at [email protected].
Erlang Mailing List.
![Page 7: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/7.jpg)
Eonblast
An Erlang Game Stack
Erlang Game Servers
![Page 8: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/8.jpg)
Eonblast
An Erlang Game Stack
Erlang + MySQL
http://eonblast.github.com/Emysql
![Page 9: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/9.jpg)
Eonblast
An Erlang Game Stack
The Hurt
• Leaks, Deadlocks• Bad Productivity• Game Design Language Gap
• Less Features• Less Players• Lesser Product
![Page 10: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/10.jpg)
Eonblast
An Erlang Game Stack
Target
„The perfect game server“(makes no sense)
![Page 11: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/11.jpg)
Eonblast
An Erlang Game Stack
Generals’ Problem
State
![Page 12: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/12.jpg)
Eonblast
An Erlang Game Stack
Generals’ Problem
State
![Page 13: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/13.jpg)
Eonblast
An Erlang Game Stack
Generals’ Problem
State
![Page 14: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/14.jpg)
Eonblast
An Erlang Game Stack
Generals’ Problem
State
![Page 15: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/15.jpg)
Eonblast
An Erlang Game Stack
Generals’ Problem
State
![Page 16: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/16.jpg)
Eonblast
An Erlang Game Stack
Byzantine Generals
State
![Page 17: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/17.jpg)
Eonblast
An Erlang Game Stack
The Hunt
Server Stack
• Language
• Database
• Protocol
• Game Logic
![Page 18: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/18.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/19.jpg)
Eonblast
An Erlang Game Stack
Client Architecture
• Fat JavaScript Browser Client
• COMET
![Page 20: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/20.jpg)
Eonblast
An Erlang Game Stack
Language
Wishlist• Robustness• Deadlock-free• Multi-core• Linear Scale
er?
![Page 21: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/21.jpg)
Eonblast
An Erlang Game Stack
Database
CAP• Distributed• Consistent• Highly-available• Partition-
tolerantAll of it!
![Page 22: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/22.jpg)
Eonblast
An Erlang Game Stack
Database
ACID• Atomicity• Consistency• Integrity• DurabilityFor Granted
![Page 23: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/23.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/24.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/25.jpg)
Eonblast
An Erlang Game Stack
Protocol
Wishlist• Small footprint• Fast to encode• Human-
readable
![Page 26: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/26.jpg)
Eonblast
An Erlang Game Stack
Logic
Wishlist• Human
Readable• Stable• Fast• Concise• Small Footprint
![Page 27: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/27.jpg)
Eonblast
An Erlang Game Stack
The Answers
• Client
• Protocol
• Server
• Logic
• Data
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“
benötigt.
![Page 28: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/28.jpg)
Eonblast
An Erlang Game Stack
“Embeddable scripting language”
![Page 29: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/29.jpg)
Eonblast
An Erlang Game Stack
Lua
„Lua is strange.“R. Virding
![Page 30: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/30.jpg)
Eonblast
An Erlang Game Stack
Lua
a = “Roberto”
if a ~= nil then
print “Hello ” .. a .. “!”
end
![Page 31: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/31.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/32.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/33.jpg)
Eonblast
An Erlang Game Stack
Lua Caveats
• Deceiving Looks• Encourages magic• Simple but not for
beginners• Syntax forked• Only one collection type
![Page 34: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/34.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/35.jpg)
Eonblast
An Erlang Game Stack
Architecture
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“
benötigt.
![Page 36: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/36.jpg)
Eonblast
An Erlang Game Stack
![Page 37: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/37.jpg)
Eonblast
An Erlang Game Stack
World State
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (Unkomprimiert)“
benötigt.
State
![Page 38: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/38.jpg)
Eonblast
An Erlang Game Stack
World State
State
State
State State State State
![Page 39: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/39.jpg)
Eonblast
An Erlang Game Stack
World State
State
State
State State State State
![Page 40: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/40.jpg)
Eonblast
An Erlang Game Stack
World State
State
State State State State
State
![Page 41: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/41.jpg)
Eonblast
An Erlang Game Stack
World State
State
State State State StateState
![Page 42: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/42.jpg)
Eonblast
An Erlang Game Stack
“High Velocity Database”
![Page 43: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/43.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/44.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/45.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/46.jpg)
Eonblast
An Erlang Game Stack
Horizonzal Partitions
State#
![Page 47: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/47.jpg)
Eonblast
An Erlang Game Stack
Replication
State#
![Page 48: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/48.jpg)
Eonblast
An Erlang Game Stack
Actual Connections
State State State StateState
State
![Page 49: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/49.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/50.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/51.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/52.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/53.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/54.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/55.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/56.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/57.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/58.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/59.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/60.jpg)
Eonblast
An Erlang Game Stack
![Page 61: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/61.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/62.jpg)
Eonblast
An Erlang Game Stack
![Page 63: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/63.jpg)
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: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/64.jpg)
Eonblast
An Erlang Game Stack
Server Architecture
•Erlang•Lua• JSON•VoltDB
•Luerl•Erlualib•Fleece•Erlvolt
![Page 65: An Erlang Game Stack](https://reader037.vdocuments.mx/reader037/viewer/2022110213/568143f6550346895db0818f/html5/thumbnails/65.jpg)
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