Dazo-org/zerovm — Issue #15: Clustering (initial implementation)
Author: camuel
Created: 2011-11-30 13:55:55+00:00
State: open
Labels: DESIGN, FEATURE, MAJOR, REQUIRES_SWIFT_CHANGE

In order to support segmented objects in swift we need some simple form of clustering in ZeroVM. I think the best we can make is an initial implementation of our ZMQ based clustering design. We would not be able to test it with large number of servers currently but we could test it with a few nodes easily. Also we can limit segment number of object for which we support querying. Like we could query up to 25 first segments of segmented object.

The design is already properly described. In a nutshell, NEXE can send/receive messages to/from other NEXE. NEXE is addressed by arbitrary identificator which it gets before it runs. So before NEXE is run it is already decided to which other NEXE it can send/receive messages. ZeroVM has a static table that maps these identificators to network addresses (IP/port pair for IP-based network). Message is just a blob of data similar to the result current NEXE can produce.

To implement this feature it is needed to link ZeroVM with the ZeroMQ library, pre-open and pre-establish the connections and add zvm_send and zvm_recv methods as new zvmsyscalls. Another option, and as far as I concerned more clean and preferable, is just re-use zvm_read and zvm_write methods where instead of input/output descriptor, network descriptor is used.

This topic is deep and more details is provided in the design documentation.