The tuple space coordination model, originally introduced in the LINDA programming language [2], uses a shared memory object called a tuple space to support coordination that is decoupled both in time - processes do not have to be active at the same time - and space - processes do not need to know each others' addresses. The tuple space can be considered to be a kind of storage that stores tuples, i.e. finite sequences of values. The operations supported are essentially three: inserting a tuple in the space, reading a tuple from the space and removing a tuple from the space. In this paper we propose an efficient Byzantine fault-tolerant implementation of a tuple space called LBTS (Linearizable Byzantine Tuple Space). LBTS is implemented by a set of distributed servers and behaves according to its specification if up to a number of these servers fail in a Byzantine way. Moreover, LBTS also tolerates accidental and malicious faults in an unbounded number of the clients that use its services and satisfies two important properties: linearizability and wait-freedom (with respect to client failures). In LBTS, most operations on the tuple space are implemented by pure Byzantine quorum protocols [3,4]. However, since a tuple space is a shared memory object with consensus number 2, it cannot be implemented using only quorum protocols. In this paper we identify the tuple space operations that require stronger protocols, and show how to implement them using a modified Byzantine Paxos consensus protocol [1]. The philosophy behind our design is that simple operations are implemented by "cheap" quorum-based protocols, while stronger operations are implemented by more expensive protocols based on consensus.
展开▼