You might remember my more optimistic part 1 post.
Well, I’m about 300ish hours into my MMO development (part time over the past year or so) and the other day I decided to finally do some performance testing… way too late to be doing this sort of thing btw. I didn’t think too much of it before because the GG engines are touted for their networking layer, so I figured it should be able to handle the tiny packets that I was sending back and forth with no problem.
I started my testing with what I thought was a modest number of players for an MMO… 1000. Not too high, not too low. The server grinded to a halt! and suddenly I got that ‘Oh shit! What have I done?!’ feeling. So just to get a better measurement, I dropped it to 500, then 100 and finally to 50 before things started to perform normally. Ouch! Now, I’m not trying to get EVE Online numbers, but 50?!?! My stomach sank a little as I thought about all of the wasted work and all of the work I would have to do to rewrite the server.
How could something awarded for its networking ability come up so short? Well, it wasn’t the networking causing the bottleneck at all. What I failed to consider was not networking, but the processing cycles needed. Apparently, TGB doesn’t make the greatest server for a synchronous MMO. The inherently single-threaded processing and the speed of torque-script were drastically overestimated on my part.
I can probably performance tune the TGB server more and move some things into native C++, but in the end I decided it would be easier to rewrite the whole server in Java which is my native language While most people still have a negative impression of Java performance-wise, 1.6 is quite fast and it can usually be further performance tuned.
Moral of the story: performance test early so that you can change technologies if necessary and not have to rewrite a ton of code.
I haven’t finished writing the server yet, but I will post an update once I do some early performance testing.