Nice way to cherry-pick a statement and completely ignore the entire schema....and it isn't grasping at straws either, but rather a more basic understanding of how it fits together.
I never said that currently logged in players don't count...I in fact stated they didn't have much impact to the login process, which was a documented problem, and is known to now be managed as a separate process via a separate service from the world service servers. Here is the quote:
The supporting statements to that effect are about the persistent connections (2 per player), and the examples about connection pools. Guessing you don't have much understanding of how that plays out...was really trying not to get deep in the weeds on the issue though. But, basically, database connections typically are not persistent but are frequently recycled. You connect, fetch/update, and when done discard. Even if it isn't done programatically, the pool itself will eventually drop the connection according to it's configuration--be that a hard aging-idle timeout, or garbage cleanup as the pool reaches a defined threshold and is approaching exhaustion. That is the beauty of using a pool to manage the connections (and can also be problematic too if developers are a bit too lazy)--you don't have to micromanage the connections because the servlet/server does it on the fly for you. Which brings it back to another point you seemed to have neglected.It's not that much of an issue managing all those that are already logged in, as they are running on their own separate pool from what the lobby/login process has to work with.
The connection pools for servers are vast. There is an insane global pool at the server level, that gets segmented out amongst services/applications running on it. Even FREE servlets and database engines will default to thousands of connections, with headroom to go into tens of thousands per connector. As noted... the most basic single instance of MS-SQL defaults to over 32k connections in the pool. You can see similar stats (or higher) for any number of other database engines out there, that was just an easy example because it is a known specification. And this system is NOT one instance of one database running on one CPU in a single blade server either. It is a pretty complex array of servers in play here. So, there is likely lots of headroom for connections across the backplanes of their infrastructure.
The problem is with the gating INTO the world services. And yes, I keep saying "world service" because that is what it is. It isn't one server per world...as Yoshi has stated, areas can be on seperate servers--so a world is actually a group of servers working together to make up the world environment. Also, note what I stated earlier. Balmung is one of 13 world services managed by ONE lobby service.... that is hosted on ONE IP address. Each of those world services we know for a fact can potentially be hosted to the public on up to 3 IP addresses (have seen 3 documented for Midgard alone). That means that one IP address and one lobby service is managing all the logins for all the players across 13 worlds, hosted on as little as 13 IP's or as many as 39 (or possibly more). Hands down, that is a recipe for some form of bottlenecking in and of itself.
This is where the queuing is taking place...concentrating your player data at the point of login and then switching you to your assigned IP for your world service. You can even see it happening while you are loading into the game. There is a brief moment after you commit to launching your character that the lobby connection ramps up, then the world's IP connects and both are throttled briefly, then the lobby connection slopes downward to it's keep-alive state, and eventually disconnects. It is because that service is managing your initial pull of data and forwarding you to your assigned IP address for your world service.
From that point on, you are consuming only 2 persistent connections to your world service. Everything else that happens in regards to your player data stored on the database server that has not been cached into the world service takes place within a separate connection pool dedicated to your world service and the assigned database service(s) used during gameplay. You are no longer directly competing with the pool used for the login process 100% at that point--logins take place across a connection pool set up between the lobby server and the backends and another pool between the lobby server and the world service. Granted, there may be some odd concurrency if data needs to be fetched/updated between the world service and the backend database periodically--but those moments are very brief and the connections are released to the pool once the snippets of data are sent/received.
And they are snippets of data by the way. You can pack a lot of data into 32 and 64 byte DWORD's.. especially if some of that data is using bitmasks. Watch your bytes sent/received or track it with a network monitoring tool while you are standing in an isolated area like your room. Swap gears and such and see just how little data is shuffled back and forth. In the speed and scope of these backend connections, it is less then the blink of an eye.



Reply With Quote




