Chapter 8. Server-Side MOG Architecture
In-Memory States and Multi-Player Games
‘No Bugs’ Rule of Thumb for Multiplayer Games
Good for Us (as developers)
Exception: Stock Exchanges
NOT applicable to Single-Player Games
In-Memory Game World States: a Natural Fit for ‘No Bugs’ Rule of Thumb
On Data Consistency
In-Memory State Summary
On Scalability and Load Balancing
Scaling Up? No Way, Jose. Scaling Out!
Load Balancing
Load Balancing of Stateful Objects. Two flavors of Load Balancing
Deployment Architectures, Take 1
Don't Do It: Naïve Game Deployment Architecture
Semi-Naïve Deployment Architecture
Web-Based Game Deployment Architecture
Web-Based Deployment Architecture (Web Stack): How It Works
Caching, More Caching, and Even More Caching
Taming DB Load: Write-Back Caches and In-Memory States
Write-Back Caches: When to Write Back?
Write-Back Caches: Locking
Optimistic Locking
Pessimistic Locking
Caches and Transactions
Web-Based Deployment Architecture: Reactors
Web Deployment Architecture: Scaling and Load Balancing
On Specific Web Servers
Web-Based Deployment Architecture: Merits
Classical Game Deployment Architecture
Game Servers
Implementing Game Servers under Reactor-fest architecture
Minimal Reactor-fest
Logic Reactor
Reactors with External Interfaces
Logic Factory
Full-Scale Reactor-fest
TCP Sockets Reactors and TCP Accept Reactor
UDP-related Reactors
Websocket-related Reactors and HTTP-related Reactors (not shown)
GPGPU Reactor (not shown)
Simplifications
Reactor-Fest Architecture on the Server Side: Flexibility and Deployment-Time/Run-Tim
Threads and Processes
Underlying Communication Protocol as an Implementation Detail
Moving Game Worlds Around (at the cost of client reconnect)
Online Upgrades with (Almost-)Zero Downtime
On Importance of Flexibility
Classical Deployment Architecture: Scaling and Load Balancing
Scaling Game World Servers - Natural Linear Scalability (except for seamless MMOs)
MMOGs and Seamless Game World Servers
Moving Objects Around
Scaling Matchmaking Server
Scaling Other Game Servers
Regional Datacenters to Reduce Latencies
Load Balancing
Once again on hybrid Web-Based+Classical Architectures
Classical Game Deployment Architecture: Summary
Enter Front-End Servers
Front-End Servers as Concentrators
Front-End Servers: Benefits
Front-End Servers: Drawbacks and Issues to Solve
Latencies and Latency Differences
Discussion on Scalability of Front-End Servers and Dealing with “N-squared”. Server Gro
Game-Server-to-Front-End-Server Affinity
Front-End Servers: Implementation
Front-End Servers: Reactor-fest Implementation
Routing&Data Reactors
Routing&Data Factories
Routing&Data Reactors in Game Servers and Clients
Client Load Balancing
DNS Round-Robin
Client-Side Random Balancing
Client-Side Random Balancing: a Law of Large Numbers, and comparison with DNS Round-R
Server-Side Load Balancer Appliances
Load Balancing Summary
Front-End Servers as a kinda-CDN
Front-End Servers + Game Servers as a kinda-CDN
Front-End Servers Summary
DB Server
DB Server API
Meanwhile, at the King’s Castle… Implementing DB Server
Multi-Connection Basics
Multi-Connection DB Server implemented as DB Reactor
Single-connection DB Server as DB Reactor
Implementing DB Server: Bottom Line
DB Server Summary
MOG Server-Side. Eternal Linux-vs-Windows Debate
New Generation Chooses Cross-Platform! Well, at least it SHOULD...
Eternal Windows-vs-Linux Debate
Open-Source
Stability/Reliability
Security
Network Processing
Other Technical Differences (scheduler, IPC, file access, etc)
C++ Compilers
Is it Enough to Decide?
Free as in “Free Beer”
TCO wars
On ISPs and Windows-vs-Linux Cost
Time To Market: Familiarity to your Developers
It is All about Money (
DB Server Considerations
Mixed Bags
Linux-vs-Windows: Time to Decide
Things to Keep in Mind: Windows
Things to Keep in Mind: Linux
Things to Keep in Mind: Reactors
MOG Server-Side. Programming Languages
Going Cross-Platform
Cross-platform C++
Cross-platform Languages
Pros (compared to C++)
Cons (compared to C++)
Personal Preferences and Reactors
Scripting Languages
On Programming Languages as Such
Which Language is the Best? Or On Horses for Courses
On Programming Languages and Reactors
Supporting Multiple languages/compilers/JITs: Is It Worth the Trouble?
Supporting Different Programming Languages within the Same Project
Inter-Language Equivalence Testing: Yet Another Reactor Replay Benefit
Chapter 9. Fault Tolerance
Failure Modes & Effects
Communication Failures
Game Server Failures
Containment of Game World server failures
Server Fault Tolerance: King is Dead, Long Live the King!
Clusters: HA, not FT
Fault-Tolerant Servers: Damn Expensive
Fault-Tolerant VMs
Virtual Lockstep: Not Available Anymore?
Checkpoint-Based Fault Tolerance: Latencies and Even More Latencies (
DIY Fault-Tolerance in Reactor-fest architectures
DIY Virtual Lockstep
DIY N+1 Reactor-based Redundancy
DIY Fault Tolerance – Connections and IPs
DIY Fault Tolerance – What to Use
DIY Fault Tolerance in case of Almost-Determinism
DB Server Failures
It’s All about Numbers – and Nothing Else
Adding Fault Tolerance Can Make Your Numbers Worse
Exception – Stock Exchanges
/Implementing Fault Tolerance for DBs
Fault Tolerance – Failure Detection
Chapter 10. Pre-Coding Checklist: Things Everybody Hates, but Everybody Needs Them Too. From So
Source Control
Git
Git and unmergeable files
Git and 3rd-party Libraries
Git Flow
Protecting your Code
Reducing Chances: Firewalls & Antiviruses
Mitigating Impact from Compromises
Continuous Integration
3rd-party Libraries: Licensing
Development Process
Issue Tracking System
Issue Tracking: No Bypassing Allowed
Coding Guidelines
Naming Conventions
Project Peculiarities
Per-Subproject Guidelines
Enforcement and Static Analysis Tools