I had a weird idea, not sure it's viable, thought I'd throw it to the sharks and see if they bit.
Have any of you ever heard of the human genome project? Not sure how many have, but there was something they used to decode it that let multiple computers share the load of work, specifically it functioned by letting other computers become remote calculation devices linked to a centralized server(Or series of servers) while your computer was idle.
The point is, can't this work for an MMO? Of course, in the case of an MMO, a cloud computing (Not sure that's the right idea?) could greatly help to improve server stability and workload, if it could work properly (Which I have no earthly idea how to do =/)
It should be something important, but something that's minimally invasive, built into the MMO is a program that allocates a tiny bit of bandwidth and other resources to calculating something, it shouldn't be personally relevent to the character or player, this would make it breakable, but it should be something that causes stress on the server to deal with.
While I've been batting this around my head I've been pretty sure it's NOT possible, but maybe, maybe not. Perhaps someone knows something about this? I've shared virtually all I know about it.
This has been tried in some places- a central hub computer for the main worldspace, but when instances are launched, you have one of the instances' members' PC's become the "server" of that instance, reporting back the results.
Every example I have found has faltered at some level because it ignores one of one of the earliest rules of MMO development: NEVER trust the client.
- don't trust them to be stable: Clients PCs will pop off, ISP's often put in disruptions when they see data consumers become data producers.
- don't trust them to be truthful: when you have the code running on your PC, you can manipulate the results much more easily.
The Seti@home and human genome project worked because the distributed computing calculations they did could be interruptable and were not time-critical. the calculators could run (or not) when human activity was low, and crashes, shutdowns, or other interruptions were meaningless. The possibility of fraud was covered by multiple overlapping results from different users.
An MMO game server has at least four MAJOR roles:
- a chat server- distributing communication to all those that should be present in a given area/channel
- a spatial server- tracking the positioning data and animation state for each user & item in the world, validating that the spacial change data communicated by the client is valid (no "teleport hacks), communicating the necessary spatial data to the necessary viewers (possibly calculating "line of sight" to prevent "see through walls" hacks, possibly using path prediction to preload data in the direction most likely to be traveled)
- a game mechanics server- this does all calculation for game mechanics (hit, miss, damage, line of sight, range calculations, etc.
- an AI server- doing all the calculations for the AI behavior, both in combat and in "natural" state.
Each of these has a specific role that can be compromised in various ways if under a player's direct control, and the communication and time-sensitivity of each of these often makes having mirrored systems for fact-checking or auditing impossible. There just isn't enough time to vet the results sufficiently and re-issue new results if they're found to be problematic.
There are things you can design into the game- if you used the "instances are governed locally" (for example) this would certainly reduce bandwidth and CPU use, and if you required an "audit log" to the server and denied gameplay calculations outside of X norm, you could insulate some of the abuse from corrupting the persistent world. You could also have a different kind of "offline mode" play where progress & winnings are only available WHILE offline to prevent an abuser from corrupting the persistent game world with his false results. You could require the installation of invasive "monitoring programs" that try to detect and alert the game to memory-manipulation processes or source-file hacks. In the past, however, these oversight systems cut so deeply into the resources of the company, that any savings in load made by distributing to the client's computer are consumed by the oversight process needed to avoid abuse.
For quite a while, MMO servers have not necessarily been just one machine. They have been a collection of machines all linked together. And it is that *collective* that is called a server.
The only problem that I can see with the way in which you have suggested it, is that it *cannot* be used for time sensitive calculations. The reason why BOINC is used, is because it gives a *small piece* of information that needs something to be solved. It doesn't matter how long it takes... it just needs to be done.
An MMO though however *requires* results to be completed by X time. If it isnt completed by then, then strange things generally happen... the most typical result, is *lag*.
Also, you have to remember that information will be spread across numerous different nodes (computers here) in the world, and so you also have the inherent delay in the information going from one computer to another... once again, making it slower.
*edit*
Chase, you got there before me as I was distracted!
Ahh, I knew most of the work was split up between various linked servers. It makes quite a bit of sense based on all that you said. It's a shame that ISP's put interuptions like that in, as well as the inability to trust the players(Which I noted.) I can't really think of any server functions that could even be remotely designated, hense why I asked. I knew there were holes in my knowledge, so I just thought it would be a good idea to suggest it at least.
in this forum post: http://cityoftitans.com/comment/29083#comment-29083
i was brainstorming about decreasing the server(s) load. Its a mish mash, but ill give you +10 if you can read through all of it. ;D
Done! Just don't ask me to take a comprehension test ^_^ Send my points to Ravenclaw.
Foradain, Mage of Phoenix Rising.
[url=https://cityoftitans.com/forum/foradains-character-conclave]Foradain's Character Conclave[/url]
.
Avatar courtesy of [s]Satellite9[/s] [url=https://www.instagram.com/irezoomie/]Irezoomie[/url]
Oh that's a fantastic idea that's right in line with this idea(sorta). I must say that I'm a little murky about the three letter acronyms you used, but then again the last time I studied networking setting and protocol I was eleven. So, 15 years of rust.
If the local machines only handled trading back and forth appearance, you could even set the cache to dump when you switch servers or something like that. Plus, costume data, descriptions and power customization, it would create a little lag of 'shadow people' while loading or receiving new costumes, attack animations would/should be loaded by the time you get into combat, unless there's a PUP(Pick up Player?), not only that you could have a secondary cache of 'priority' characters, from supergroup or friends list.
I read that post, I've got a few MMO design books floating around here from a ways back, some of them more "anthologies" of whitepapers by various game designers. I'll try to find the book, but they included treamlining techniques that were often used to reduce data packets- they'd make json even look bloated in comparison.
-- A bit packet with NO variable vaue and no delimiter between variables-- its just known that the first x bits are the head definition, the next x bits are the torso, the next, etc, etc. If you need a new bit added to one of the ranges, you've got to find the parser to hardcode it to read the packet differently.
-- mapserver "path prediction" and "anomaly correction" that allow for up to 4 seconds of data interruption without either party realizing that the interruption happened, and that and differences between "predicted" behavior and what really happened are eased into place without any participant even aware of the correction.
-------------
I also don't want to over-state the risks of ISP's interrupting/throttling traffic. Just as I could run my own Neverwinter Nights worldspace for 20-40 people back in the day when bandwidth is a fraction of what it is now, some of this could be done. You'd want game mechanics that were less "twitch" and therefore more tolerant of traffic hiccups, a good prediction system, and a fault tolerant system that would 'rollover" to an alternate method in the event of a full disconnect.
The "never trust the client" portion is by far the most problematic. You'd need a very strong "check-in" mechanic that delayed any reward earned while in the "uncontrolled instance" to safely audit against exploits, an auditor that sees exactly how far the game's results deviated from similar server calculations, etc.
If I could use the analogy, as a teenager, we did marathon multi-night pen-n-paper RPG sessions, (usually scheduled when we'd managed to nab enough booze from various sources to make things more fun). When the GM got too tired (wasted) someone else would grab the notes and tag-team GM. Since that someone else also had a player character, it was amazing how much better the team performed under that other player's GM'ing. Every hidden treasure was found. Every good secret passage. Every trap was detected... well, as long as he was sober enough to read ahead, but I digress.... Point is that when the original GM got back in the GM chair, he often had to undo so much of the excesses of those that came before him.
We started learning that it was better to shift stories to entirely different characters in entirely diferent worlds when GM's passed out, rather than risk letting another GM derail the story and world with his... excesses.
That's what we'd risk with letting someone run much of the game mechanics in a distributed manner, and that's probalby the most reliable way to design a multiplayer game that did distribute the tasks. it'd be closer to the original NWN- local instances that tracked progress and reward, and that progress and reward was unique to that instance. A separate central instance that served for meeting, special events, etc, would be its own beast that wouldn't be poisoned by whatever excesses (hacks) occur in the distributed instances.
---
Off topic, but: By far, my favorite discovery in those books was about player-generated content-- from ascii art in biographies to Architect entertainment. The potential to abuse these were jokingly measured and rated by the "TTP" metric-- (Time to penis: the time it would take a player to make a penis out of the tools provided to them.) It was measured in Picoseconds. That's another part of the "never trust the client paranoia that we can talk about a separate day.
We can always log the days transactions, XP, In Game PlayTime, Enemies Defeated, etc... and run a nigtly Analytics to see if there are spikes in the averages. If they are outside of the bounds a Dev sets, that player is flaged for further Review. GOTCHA SUCKA! ;)
Sounds like the kind of had-written hand-optimized hard-to-extend stuff that protocol buffers were written to replace.
I've seen that kind of algorithm evidenced in CoX. The failure mode is snap lag: your client follows along the predicted paths for everything, but then a late update comes in and everything "snaps" back to near where it was with different predictions... ad nauseam...
[i]Has anyone seen my mind? It was right here...[/i]
It was the "not snapping" moments that drew my attention after I read that article.
Since my wife and I played in the same room and I could see her screen, I was surprised at how effectively CoH actually managed this and kept the illusion going.
- when I'd "Jump" on my screen, there was a notable delay before my jump began on hers, but I landed closer to the same time on both screens- the game accelerated the jump on her screen to account for the lag difference and bring us back in sync.
- when I'd fly past her- on my screen, i'd intentionally zip in and buzz her as close as possible. On her screen, I'd be quite a bit farther away. When I stopped more-or-less abruptly on my screen, on hers, I'd "drift' to my final (corrected) location. Somebody once explained to me that the game actually communicated locations with less precision when travel powers were enabled to reduce the data thoroughput in the updtes, but I'm not sure if that was fact or just conjecture.
- On my screen, an NPC ragdolls in a rather unfortunate pose straddling a railing. On hers, he just missed the railing and went over the edge. On my screen, the ragdoll slumps, slides, and eventualy ends in the same place as hers.
For all the "rubberbanding" that we DID notice- its remarkable at the range ot minor course corrections that go on that we don't notice.
Fortunately, these are all built-in to the modern multiplayer gaming engine, so our devs can spend their time on other things.