Protocols and World of Warcraft

Looking through the talks from the Game Developer Conference 2013, aside from the new excitement about virtual reality (again) and several talks about cloud computing, there was this very technical talk by Joe Rumsey from Blizzard Entertainment about Network Serialization and Routing in World of Warcraft. Slides available from his blog. This talk goes through the issues of building a very large distributed server backend that necessarily supports a variety of protocols and where compression is a worry simply because of the scale of complexity involved and the need to communicate with clients.

The talk is a very good introduction to the topic that we get into in Chapter 7 of the book: Middle-Ware and Messaging Passing systems. At a low level, different processes must agree on message formats to communicate with. There are no standards for this for games that work outside of one piece of middleware. DIS is related to real-time virtual environments but has too much baggage for practical use outside of its original domain (military simulations). Unlike traditional Internet standards (e.g. ftp, SMTP, IMAP), your messages might change very rapidly. This is something that has plagued distributed systems research for a while, and virtual environments also. Although systems such as SOAP and Corba can be used for our purposes, they are very heavyweight and quite constraining to use.

While Rumsey talks about Blizzard's internal tool, he suggests that others look at technologies such as Google Protobuf. This, Apache AVRO and Apache Thrift are three competing technologies for the deceptively simple purpose of sending messages across a connection. They all have a message description language and deal with construction and parsing of messages. They provide language interoperability. AVRO we had been looking at anyway for a future project: it uses self-describing schema for its protocols. This article gives a good comparison of these three. I was particularly concerned about forwards and backwards compatibility between protocol versions and google found me this interesting analysis from Martin Kleppmann.