Hey,
First, perhaps some of the stickies could be combined into one larger FAQ sticky? over half the first page are static topics…
Hello! My nick is ‘dormando’, and I work for a large website which makes interactive flash games as part of their business model Our primary platform is PHP, but the game server platform is Java. We’ve been through evaluating a large number of java ‘game’ server products, and all have been pretty darn miserable. We even tried developing one in-house, but that did not pan out as expected.
I’ve been playing with darkstar for a few days. Congrats on pushing this interesting piece of software from within Sun! I do have a number of concerns and questions though.
-
Feel free to tell me to FOAD and show up at JavaOne, since I plan on being at the darkstar sessions there.
-
Is there any measure, or public idea at all just how far along darkstar is development-wise? The site is very threadbare, and the most details I’ve seen out of the project was in an interview on LWN. None of the features discussed in the LWN interview are actually in the current 0.9.1 release.
-
It’s very interesting how the development model of Darkstar appears to be based around the threaded Software Transactional Memory ideal of atomicity. While this can make development easier, it’s not exactly proven yet. Under some circumstances, it might be more efficient to declare task locks or other similar constructs, vs tripping an STM-style transaction rollback often. Would this be possible with darkstar?
-
The way the storage system works tells me I’ll need to re-implement the whole thing myself, for a few reasons;
- How would one do reporting on stored objects? The current options for migration also appear painful.
- Our prodction servers don’t have local harddrives. Storage needs to use a remote system. I have hundreds of servers, ditching hds makes my life easier
- We’ll probably want to integrate a memcached cluster for higher speed distributed access to objects on read-only tasks.
-
The site and interview mention being able to ‘magically’ start and stop game applications within a cluster. Since this is not a feature in 0.9.1, can we expect this to be a usable feature after JavaOne? Will we be able to rely on the cluster not collapsing if someone uploads a faulty set of java classes? (this is a commonly-claimed feature, but never seems to actually work!)
-
I’m trying my darndest to not launch into implementation-specific questions! This isn’t a question, but a statement replacing one! Several!
-
Another issue with the STM-task oriented development model fitting into ours is the need to make many external calls. While a lot of work can be done by ManagedObjects, the games are augments to the rest of the site. Meaning we need to talk back to our PHP datastores to persist updates to their characters and load information related to the characters. Doing something like this from within a task pose two risks:
- Blocking IO!
- Since the STM machine can demolish a task at any point, a series of external calls could be aborted in the middle. Or a change could happen on the external end, then the task gets aborted before the local side ManagedObject gets updated. We would have to create a whole new system on our side to deal. Is there a better way to handle any of this? A service or somesuch?
-
The task-based development model bugs me a little. It’s too close to the awful way PHP handles requests; load all your info, set up your environment, handle the request, then throw everything away. This makes embedding a scripting engine have unusable performance since the interpreters aren’t Serializable (and even if they were, it’d be a TON of data). It’d be interesting to have a way to ‘cache’ certain things local to the server, so you only need to do heavyweight initialization once (or a few times) per game server, then load your scripts per-task. I’m left wondering how performance is affected in a lot of other areas as well…
-
Async IO support! You have a highly threaded task-based model, but no way to do async IO of any kind from within tasks, in any way?
-
Crosstalking. Channels, resource migration, all sound great until you get past a few dozen servers for one game instance, or you need to link together multiple datacenters. What can be done, if any, to direct traffic a little to avoid a mesh network scaleout issue, where all nodes get chatter from all other nodes and ultimately reduce effectiveness as you scale?
Sorry for the long post. I’m very interested in seeing where Darkstar goes, and plan on showing up to JavaOne to see exactly what it has to offer.