Introduction

A distributed system is a system composed of group(s) of processes that coordinate their activities by exchanging messages over a network. For such systems, pair-wise exchange of messages need not be the most efficient or reliable way to communicate. Multicast is an operation that sends a message from one process to a group of processes. This is typically achieved without the sending process having explicit knowledge of the group members. Common applications include, but are not limited to:

A middleware is a software layer that abstracts and hides the heterogeneity of underlying networks, operating systems and programming languages. Examples include CORBA [DS4,5,20] and Java RMI [DS:5.5], although the latter merely supports a single programming language. In addition to solving the heterogeneity problem, a middleware provides a model for distributed communication, e.g., remote method invocation and remote event notification. CORBA and Java RMI implement the former approach, i.e., a program can invoke a method in an object located on another computer.

The goal of this project is to design and implement GCom, a middleware for group communication. The middleware must be provided as an API to be used by programmers to development applications that makes use of reliable messaging. GCom must support various types of multicast, guarantee different types of message ordering and handle group membership issues. The middleware need however not support more than one programming language.

Group membership management is a complicated problem and has been the focus of much research. For this project, we will accept simplified solutions to the group membership problem and instead focus on the multicast types and message ordering algorithms.

The project must be solved individually by groups of two students.

Purpose

The overall aim of this project is to increase your knowledge of distributed systems and distributed programming. More specific goals include:

Description

The GCom middleware consists of three (logical) modules, the group management module, the communication module and the message ordering module. These are, respectively, responsible for handling group membership issues, communication message exchange semantics and message (re)ordering issues. All of these modules need to function properly in order for your system to ensure correct message delivery semantics.

Group management module

In order to send messages to the processes in a group, GCom must keep track of the members of a group. This can be done either statically or dynamically. In a static group, no new members can join once the group is established. The group management module must however be able to handle that members may leave static groups at any time (due to crashes). In dynamic groups, members may join and leave the group at any time. The four main tasks of the group management module is: