{"id":2518,"date":"2013-06-22T16:50:43","date_gmt":"2013-06-22T15:50:43","guid":{"rendered":"http:\/\/t-machine.org\/?p=2518"},"modified":"2013-06-22T16:54:22","modified_gmt":"2013-06-22T15:54:22","slug":"mmo-scalability-is-finally-irrelevant-for-indie-mmos","status":"publish","type":"post","link":"http:\/\/new.t-machine.org\/index.php\/2013\/06\/22\/mmo-scalability-is-finally-irrelevant-for-indie-mmos\/","title":{"rendered":"MMO scalability is finally irrelevant for Indie MMOs"},"content":{"rendered":"<p><a href=\"http:\/\/indiegames.com\/2013\/06\/two_guys_made_an_mmo_the_growt.html\">Here&#8217;s a great post-mortem on Growtopia (launched 2012, developed by a team of two)<\/a><\/p>\n<p>It&#8217;s slightly buried in there, but I spotted this:<br \/>\n<!--more--><\/p>\n<blockquote><p>\n&#8220;I had guessed conservatively, 600 players online would be our max.&#8221;\n<\/p><\/blockquote>\n<p><strong>(a sensible estimate, in 2000-2005, for an unoptimized, badly-written server where you threw it together quickly because it was more important to get your game launched than waste time on &#8220;beautiful code&#8221;)<\/strong><\/p>\n<blockquote><p>\nIn mid April we hit 2,000 concurrent users &#8230; our server began to buckle.  Round trip to punch something could take a full second and people were constantly being disconnected.\n<\/p><\/blockquote>\n<p><strong>(Both &#8220;1 second RTT&#8221; and &#8220;people being disconnected a lot&#8221; are classic signs of a server that is FUBAR and needs some emergency work to fix the scaling problems)<\/strong><\/p>\n<blockquote><p>\n&#8220;I would write a &#8220;V2 server&#8221; &#8230; that would [use] multiple cores;  it made no sense that our hardware had 16 cores and 32 threads but our entire Growtopia server process was run in a single thread.&#8221;\n<\/p><\/blockquote>\n<h3>Wait, &#8230; what? You&#8217;re single-threaded?<\/h3>\n<p>Everything I wrote above (about &#8220;normal&#8221; conservative estimates etc) was valid assuming you used multi-threaded code, that was badly written, that had poor synchronization design (it locked often because you&#8217;d been too lazy to think about your code carefully), etc.<\/p>\n<p>Growtopia isn&#8217;t unique &#8211; but I believe it&#8217;s symptomatic of what&#8217;s happened more widely. Off-the-shelf tech has reached the point that <em>Scalability is finally irrelevant<\/em> for Indie MMOs. Just write your code (badly) as multi-threaded, and you&#8217;ll be fine. (by &#8220;off the shelf&#8221; I mean: standard libraries + standard VM&#8217;s + standard hardware + standard OS&#8217;s)<\/p>\n<blockquote><p>\nYour assumption today &#8211; when you hack together version 0.1, quickly &#8211; should be &#8220;this should be OK for 5,000 concurrent users (pessimistically)&#8221;.\n<\/p><\/blockquote>\n<h3>Things have changed&#8230;<\/h3>\n<p>5k concurrent is somewhere between 100k and 200k actual users. If you&#8217;ve got 100k users and you&#8217;re not making a considerable chunk of money &#8230; you&#8217;re doing something very wrong with your business model :). By the time your scalability becomes an issue, you&#8217;ll have the cash to pay someone (maybe yourself) to write &#8220;version 1.0&#8221; of your server code.<\/p>\n<p>To be clear: Not &#8220;something amazing, highly optimized, super-slick and efficient&#8221;, but rather: &#8220;doesn&#8217;t suck&#8221;.<\/p>\n<p>When I started in online games \/ MMOs, scalability was a &#8220;mega-critical&#8221; issue. I did a lot of work on theory and application of server optimization (from the architecture design, through the choices of programming languages, to the usage of low-level calls on specific OS&#8217;s) &#8211; I even got a patent for my work, and wrote a chapter for the Game Programming Gems series.<\/p>\n<p>Today, there&#8217;s still a lot of FUD around scalability &#8211; and it&#8217;s made worse IMHO by the branding\/commercialization of scalability (cloud computing, noSQL etc are really marketing ideas from startups and corporates, *not* tech ideas). People are *afraid* of scaling.<\/p>\n<p>For a while, that was a good thing: there are many &#8220;failed&#8221; MMOs from the 2000&#8217;s (names omitted to protect the innocent) that were hurried along to their deaths by terrible, non-scalable, tech.<\/p>\n<p>But the world has moved on. Server speed tends to advance slower than client speed (compare servers to graphics cards&#8230;) &#8211; but we&#8217;re at the point now where your servers are so fast already that IT DOESN&#8217;T MATTER. Yay!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s a great post-mortem on Growtopia (launched 2012, developed by a team of two) It&#8217;s slightly buried in there, but I spotted this:<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,9,33,34,15,20,17,3],"tags":[],"_links":{"self":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/2518"}],"collection":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/comments?post=2518"}],"version-history":[{"count":3,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/2518\/revisions"}],"predecessor-version":[{"id":2520,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/2518\/revisions\/2520"}],"wp:attachment":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/media?parent=2518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/categories?post=2518"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/tags?post=2518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}