Deployment

ActiveSpaces is a peer-to-peer distributed in-memory tuple space. This means that the tuples are stored in the memory of a cluster of machines working together to offer the storage of tuples. There is no central server used for the coordination of operations, but rather any number of peers working together to offer a common service.

To store tuples, ActiveSpaces uses a distributed hashing algorithm applied on the values of the key fields of the tuple to distribute the seeding of the tuples as evenly as possible (that is, their storing and management) over a set of peers. This means that:

  • Given the current set of seeders (any process joined to a particular space as a seeder), any participating member of the space knows where to find the tuple associated with a particular set of key field values.
  • The more seeders there are for a space, the larger the amount of data that can be stored in that space.
  • There has to be at least one seeder joined to a space in order for the space to be functional. A space with no seeders joined to it does not contain any data and can not have any tuple put into it until at least one seeder has joined it.

By specifying its role as a seeder, a process indicates its willingness to lend some of its resources—memory, CPU, and network resources—to the storing of tuples in the space. This is the means by which a space is scaled up. ActiveSpaces also allows applications to use spaces as leeches, which means that, while retaining full access to the service provided by the seeders, the application is not willing to lend any of its resources to the storing of tuples in the space. Adding or removing seeders from a space can incur performance costs by necessitating redistribution of the entries in the space, while leeches can join and leave spaces without impacting performance.

Before being able to join spaces, applications must first connect to a metaspace, which is an administrative domain in which users can create and use any number of spaces, but which also represents the cluster of machines and applications being able to communicate with each other.

Related reference