read

Matrix Server is a project I initially developed from 2010-2012 designed to easily distribute large applications over an arbitrary number of servers. Based on my interpretation of a matrix - a large number of points with numerous interconnecting parts - the system is designed to allow a developer to write their app as if everything was running in the same process, and allow the system to dynamically scale over available host hardware. This was particularly inspired by EVE Online's server network, which relies on hundreds of servers to host a single cohesive world.

Consequently this project has also been called OneWorld server at various points in time.

First Implementation

My initial implementation was in C# and was designed with ease of use in mind. Nodes are individual worker instances that could be hosted on any available server. Nodes can interact with each other via proxy classes, based on interfaces.

A developer could define a node as an interface:

public interface IMyNode : IRMIInterface
{
    public string DoSomething(int myInt);
}

Then grab a reference to another node, regardless of its type or location (could be operating in another process or even on another machine):

var myNode = portal.GetNodeProxy<IMyNode>();
var result = myNode.DoSomething(5);

The system creates a proxy class based on the interface. Every call to the instanciated proxy class is intercepted, translated into a network message, and routed through the network via any available connections to the target machine and target node. The result is then synchronously returned to the same thread and execution continues.

Implementation Flaws:

  • At the time of development I was very new to C#.
  • The concept is sound, but implementation somewhat clunky and unreliable.
  • Very little fault protection, lazy serialization of messages.
  • Not very efficient connection structure and no true p2p nature of the network (still have a master server).

Source on GitHub

Conclusion

I plan to revisit this project in the future, and implement it as I had originally designed. Made properly, it could be a great new way to write distributed applications over a unknown amount of available hardware.

Blog Logo

Christian Stewart


Published

comments powered by Disqus
Image

Christian Stewart

Also known as Quantum and Paralin.

Back to Overview