{"id":1111,"date":"2015-06-11T17:04:35","date_gmt":"2015-06-12T00:04:35","guid":{"rendered":"http:\/\/silkgames.com\/blog\/?p=1111"},"modified":"2015-06-11T17:04:35","modified_gmt":"2015-06-12T00:04:35","slug":"bolstering-the-capacity-of-nestalgia-servers","status":"publish","type":"post","link":"http:\/\/silkgames.com\/blog\/2015\/06\/bolstering-the-capacity-of-nestalgia-servers\/","title":{"rendered":"Bolstering the Capacity of NEStalgia Servers"},"content":{"rendered":"<p>Wouldn&#8217;t it be great if you could play NEStalgia on much larger servers? If population surges didn&#8217;t mean lots of new servers and inevitable server merges?<\/p>\n<p>This week&#8217;s\u00a0update probably isn&#8217;t a super fun\u00a0read, but it heralds a major\u00a0change that should significantly\u00a0improve the NEStalgia experience. Hopefully when the <a href=\"http:\/\/silkgames.com\/blog\/category\/key-of-the-exiles\/\">Key of the Exiles expansion<\/a> goes live, instead of worrying about which official server you and your friends are playing on, you&#8217;ll instead be able to focus\u00a0on saving up gold to purchase some\u00a0<a href=\"http:\/\/silkgames.com\/blog\/2015\/06\/player-ships-in-key-of-the-exiles\/\">sweet ship upgrades<\/a>.<\/p>\n<p>Before I get started, I&#8217;ll just quickly note that\u00a0<a href=\"http:\/\/store.steampowered.com\/app\/249550\/\">NEStalgia is currently available at a huge discount<\/a> as part of the <a href=\"http:\/\/store.steampowered.com\/\">Steam Summer Sale<\/a>. Check it out!<\/p>\n<h5>The\u00a0Indie MMO Problem<\/h5>\n<figure id=\"attachment_1117\" aria-describedby=\"caption-attachment-1117\" style=\"width: 304px\" class=\"wp-caption alignright\"><a href=\"http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/nes_cluster1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-1117 size-full\" src=\"http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/nes_cluster1.png\" alt=\"\" width=\"304\" height=\"240\" srcset=\"http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/nes_cluster1.png 608w, http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/nes_cluster1-300x237.png 300w\" sizes=\"(max-width: 304px) 100vw, 304px\" \/><\/a><figcaption id=\"caption-attachment-1117\" class=\"wp-caption-text\">I apparently missed the memo about\u00a0not developing an MMO style game unless you have\u00a0access to MMO style resources.<\/figcaption><\/figure>\n<p>The core of NEStalgia&#8217;s server system is the common\u00a0&#8220;island server&#8221; design where each named server\u00a0is basically a separate instance of the game running off of its own\u00a0savefile database. That&#8217;s why your characters tied to the Malice server can&#8217;t be used on Midgard unless someone\u00a0manually transfers your savefile. It&#8217;s also why each server has separate guild registries and market place listings. This would all be fine and good if the game\u00a0didn&#8217;t have so many players; when I was originally developing NEStalgia\u00a0I didn&#8217;t expect that the game would find such a large audience. It&#8217;s a good problem to have, but a problem nonetheless.<\/p>\n<p>Right now a single NEStalgia server can accommodate 50 or so players online at once before lag starts to become an issue; usually each server caps at about 70 players online. This active player\u00a0limit isn&#8217;t a glaring deficit in and of itself, and is actually pretty high compared to most indie games.\u00a0The difference\u00a0is that most other multiplayer indie games aren&#8217;t MORPGs, and thus they aren&#8217;t as reliant on\u00a0maintaining balanced population equilibrium between servers, nor do they have to be 24\/7 persistent worlds. For example, you\u00a0usually play games like Terraria on small private servers with friends.\u00a0In games like DayZ you play on larger public servers, but because each play session of the game is generally self contained, switching to a different server and starting over isn&#8217;t all that painful.<\/p>\n<h5>How We&#8217;ve Been Coping<\/h5>\n<p>Whenever NEStalgia has received\u00a0a large influx of new or returning players, we&#8217;ve opened up\u00a0new official servers to accommodate the population load, and then merged\u00a0those servers into each other as the populations recedes. It&#8217;s hard to time these merges so that\u00a0every single\u00a0server maintains a\u00a0satisfactory active population level, and it can also lead to players being isolated from their friends on a more popular server.<\/p>\n<p>All of those factors are why\u00a0<strong>server management has easily been the biggest source of frustration both for players and the dev team<\/strong>. As a player it&#8217;s not fun to see your server go into decline after a population surge, and as a developer it&#8217;s a huge time suck trying to stay on top of server expansions, merges and transfers. On several occasions we&#8217;ve had to open 16+ official servers at once just to\u00a0accommodate demand&#8230; but even the smaller population surges tend to\u00a0tangle us up in server and savefile management nightmares that\u00a0bring actual NEStalgia development to a grinding halt.<\/p>\n<p>From here I could \u00a0probably write a few more\u00a0paragraphs about the challenges involved in\u00a0finding\u00a0a solution that is a good fit for NEStalgia. However, I&#8217;m fairly certain that most of you don&#8217;t care about the drawbacks of client side saving or headaches\u00a0with online shared savefile databases, so let&#8217;s skip right to what\u00a0I&#8217;ve actually\u00a0come up with&#8230;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1115\" src=\"http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/server_cluster_diagram.png\" alt=\"Server Cluster Diagram\" width=\"640\" height=\"300\" srcset=\"http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/server_cluster_diagram.png 640w, http:\/\/silkgames.com\/blog\/wp-content\/uploads\/2015\/06\/server_cluster_diagram-300x141.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<h5>The New Solution<\/h5>\n<p>The v1.70.0 update should keep NEStalgia&#8217;s core &#8220;island server&#8221; design\u00a0intact while still\u00a0allowing us to accommodate many more players on what is technically a single server. Instead of having every single instance of a server store\u00a0its own savefile database, official servers will now operate in clusters of server instances that share savefiles. Each of the\u00a0servers in these server\u00a0clusters\u00a0will operate under the same server name, but can have\u00a0additional\u00a0instances opened to\u00a0accommodate demand. Ex: There might\u00a0be a Midgard Cluster, with open server instances\u00a0<em>Midgard (1)<\/em>, <em>Midgard (2)<\/em>, <em>Midgard (3)<\/em>, and so on.<\/p>\n<p>Like the current named servers, each server instance is its own separate world. You won&#8217;t see or directly interact with players logged in to\u00a0other server instances, though you can\u00a0come and go\u00a0as you please between instances. For example, if\u00a0the first server instance the Midgard Cluster &#8211;\u00a0<em>Midgard (1)<\/em>\u00a0&#8211; fills up, you can simply log off and join the second instance <em>Midgard (2)<\/em> to pick up right where you left off. The same things goes if your friends are\u00a0playing on <em>Midgard (3)<\/em> and you&#8217;re currently logged into <em>Midgard (1)<\/em> &#8211; you just need to join <em>Midgard (3)<\/em> in order to play with them.<\/p>\n<p>The different server instances in each cluster share the same guild registry and marketplace database. That means that if \u00a0you make a change to your guild cape or recruit a new member\u00a0on <em>Midgard (1)<\/em>, the change\u00a0will automatically be registered on <em>Midgard (2)<\/em> and <em>Midgard (3)<\/em>. The marketplace communicates between server instances as well &#8211; every instance of the server sees the same market listings, and purchasing an item on one instance will instantly take it off the market on all other server instances.<\/p>\n<p>Don&#8217;t be concerned if all this\u00a0talk of &#8220;clusters&#8221; and &#8220;instances&#8221; has your head spinning. All that you need to know is that you&#8217;re going to be able to play the game the same way as before, minus concerns about over\/underpopulated servers. In practice all of this should be fairly intuitive even to first time players.<\/p>\n<h5>Making the Transition<\/h5>\n<p>If all goes well, I hope to get v1.70.0 and the server clusters up and running in the next week or so. The biggest concern is dealing with players who still have savefiles on multiple servers, mostly\u00a0in\u00a0regards to\u00a0merging files and\/or\u00a0dealing with excess characters that can&#8217;t be merged. There&#8217;s no perfect solution to that issue and it&#8217;s probably going to eat up a ton of time, so bear with me as I get it sorted out.<\/p>\n<p>Between all four of the current named servers we&#8217;re talking about 30,000 savefiles &#8211; and that&#8217;s after previously setting aside 50,000+ &#8220;legacy&#8221; savefiles back in December. Because of the sheer number of savefiles we&#8217;ll probably end up with two different server clusters, but\u00a0I can&#8217;t say for sure yet. If that&#8217;s the case then we&#8217;ll only need one server instance per cluster at the moment, so you\u00a0probably\u00a0won&#8217;t\u00a0need to even think about instancing for awhile.<\/p>\n<p>I&#8217;m sure that some of you have questions, so feel free to ask away. Thanks for reading!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wouldn&#8217;t it be great if you could play NEStalgia on much larger servers? If population surges didn&#8217;t mean lots of new servers and inevitable server merges? This week&#8217;s\u00a0update probably isn&#8217;t a super fun\u00a0read, but it heralds a major\u00a0change that should significantly\u00a0improve the NEStalgia experience. Hopefully when the Key of the Exiles expansion goes live, instead [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,17],"tags":[],"_links":{"self":[{"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/posts\/1111"}],"collection":[{"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/comments?post=1111"}],"version-history":[{"count":5,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/posts\/1111\/revisions"}],"predecessor-version":[{"id":1119,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/posts\/1111\/revisions\/1119"}],"wp:attachment":[{"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/media?parent=1111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/categories?post=1111"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/silkgames.com\/blog\/wp-json\/wp\/v2\/tags?post=1111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}