What technologies exist for application-level clustering?

Let's say I have an application that guarantees suppression of a single server even after optimization. Is there a technology that allows you to split a web application into multiple servers while maintaining its state?

Take, for example, a multiplayer online game. Usually in World of War there are several servers, each of which has its own game state. What I'm looking for is what will allow this state of the game to be shared among several servers.

EDIT: The platform is not a big deal as it is for a web application, so the backend is not a big deal. However, Rails and Java are features.

In addition, WoW was just an example, I'm just interested in such a technology; a great game would be a good app for her.

+4
source share
4 answers

In fact, there is nothing good for low-latency, high-bandwidth applications such as real-time online games, at least not as part of arbitrary middleware.

The Darkstar project made a remarkable attempt on this side of convenience and complexity, but found (not surprisingly) that it does not scale.

Ultimately, this is a complex (although not intractable) problem when there is no solution that is almost universally applicable. In particular, you probably have a compromise between the need to act using outdated game data, on the one hand, from the need to constantly exchange common data, on the other hand. Lack of correctness and an exponential increase in complexity ... choose your poison.

It is worth noting - especially if your application domain is not real-time games - that you often do not mind if you are working with outdated data, if it will be soon enough. In such cases, simple caching systems like memcache are great. Similarly, if you need a better job, but don’t need to worry about bandwidth, something like Hazelcast (mentioned in another answer) may be great, but for most online games that are large enough to require load balancing "thousands of operations / sec" is simply not enough.

Some MMO technologies attempt to distribute the application by breaking it down geographically, which means that there really is not a lot of general condition, and this requires that this scheme make sense in the game world and fiction.

Another approach is to share it by service and implement most of the services with your favorite off-the-shelf RPC approach. This allows you to scale quite easily if your services are independent, but any dependencies between services bring you back to square.

+2
source

Take a look at the Hazelcast . It is a highly open and scalable platform for Java. Hazelcast offers a distributed card that will be shared by cluster members. You can easily store your data in it. It is super super easy to use. Just add hazelcast.jar to your classpath. No need to install a server.

+1
source

I use Microsoft HPC , but not for games. Pretty easy to set up and use.

0
source

You do not mention your platform. For java there terracotta

0
source

Source: https://habr.com/ru/post/1312876/


All Articles