General Information About Ensemble

What programming languages can talk to Ensemble?

Right now (November 2001) you can write applications in ML, C, C++, and Java (on Linux, Solaris, and NT). These interfaces will provide access to all the features of Ensemble.

What does Ensemble use for communication? What platforms does it run on?

Ensemble primarily uses UDP/IP sockets. It supports IP multicast, but does not require it. Supporting new communication transports is simple (the UDP transport is around 150 lines of ML).

Ensemble is written entirely in ML and should run on any platform that supports Objective Caml and sockets. In addition, we have ported a BSD socket library to Windows, so Ensemble also runs there. Ensemble has been run on Windows, SunOS4, Solaris, Linux, and RS6000-AIX.

How can I see what it does?

Ensemble comes with several demonstration applications, including a collaborative white board demo and remote process management demo (similar to rsh). For the white board demo you execute several instances. Anything drawn on one white board is replicated on the others. Each white board is assigned a color for its owner. When a new white board is added, it is assigned a color and the others automatically transfer their state to it. When a white board is killed, the others automatically reconfigure the system and reassign colors.

Ensemble, Caml/Tk, and the Web:

Ensemble applications can use Tcl/Tk through O'Caml's Tk interface.

What does Ensemble do that protocols like TCP/IP don't?

There is no answer to this question that is both short and complete. I'll give a short one here; for a longer answer you can read the Horus technical reports, or visit other sites related to group communication.

TCP/IP sockets work well for communication between pairs of processes. Ensemble can be viewed as a generalization of TCP communication to groups (i.e., one or more) of processes. TCP provides FIFO communication on point-to-point channels; Ensemble provides FIFO (and other more strongly ordered) channels between all members in a group. TCP alerts each endpoint when the other end has failed; Ensemble also detects failures and alerts all members of them (and guarantees that they all see the same set of failures).

Other issues arise when groups of processes communicate instead of just pairs. Ensemble provides solutions to many of these. For instance, network outages can cause groups to partition. Ensemble detects these partitions, splits the group up, and automatically heals the group when communication is restored. Also, it is often useful for a group to transfer state to new processes; Ensemble provides protocols for coordinating state transfers.

Distributed communication in ML!?!? It must be slow....

Actually, it isn't. With specially optimized protocols, Ensemble can be around 10% slower than raw UDP socket communication. (The version distributed contains these protocols, but they are not used by default.) With these protocols in use, the performance of Ensemble is comparable to other group communication systems written in C -- and faster than most. The use of ML has helped us evolve the system so that in the normal case Ensemble costs very little.

Ensemble support questions to Ohad Rodeh
Last modified: Tue Jul 23 09:20:44 Jerusalem Daylight Time 2002