Below is a selection of projects related to JavaGroups. Each project can be done by a 1-4
person group. Please contact me if you are
interested, or need more information.
Implement a total order protocol based on token-passing. Algorithms described in "The
Totem Single-Ring Ordering and Membership Protocol" (Amir, Moser, Melliar-Smith,
Agarwal, Cirafella)
Based on the sequencer algorithm: any member that wants to send a multicast message to
the group, contacts a coordinator (or sequencer). The coordinator multicasts on
behalf of that member, guaranteeing ordered messages (receivers have to provide FIFO
ordering on coordinator's messages). A special protocol has to be executed when the
sequencer crashes (will be detected by failure detection layer, FD).
Based on static or dynamic 'sliding window's for receivers and senders. Receiver sends
message to receiver when window is full and sends another message when window was emptied
below a certain threshold. Project involves studying literature on flow-control (e.g.
TCP).
Implemented using vector clocks. Description in Tanenbaum (Operating Systems) and
"Lightweight Causal and Atomic Group Multicast" (Birman, Schiper,
Stevenson)
Guarantees that - if a message is delivered at 1 non-faulty member - it will eventually
be delivered at all non-faulty members. Partially implemented
(JavaGroups/JavaStack/Protocols/SAFE.java)
Keeps track of primary views in the event of partitions. Only members in primary views
can make progress (i.e., modify their state etc.) When views of the same group merge, the
state of the pimary view is accepted by all non-primary members. "Building
Reliable Interoperable Distributed Objects with the Maestro Tools" [Vaysburd,
1998] describes one possible approach to implement primary partitions.
Garbage collects messages that have been received by all members (periodically).
Implementation of PBCAST protocol as defined by Birman/Hayden and Birman/Xiao/Hayden et
al.
Combines multiple messages into a single one. Collects messages within a certain time
period. Sends a combined message when time period is over and messages are available
(period ~ 10ms). Important messages are sent right away (possibly together with others).
Debugging/trace protocol wrapped around the layer(s) to be inspected. This could be 1 single layer, or an entire stack. GUI displays messages traveling up/down the stack. 'Step mode' enables single stepping through protocol stack. Filters define what types of events/messages are displayed. Possibility to set breakpoint, based on logical assertion. Possibility to reorder events, delete events, or inject new events into the stack.
The TUNNEL layer allows traffic to pass through firewalls. A JRouter process is started
outside the firewall. Every channel has a TUNNEL layer as bottommost layer, replacing the
UDP layer. It is configured with the TCP address of the JRouter (parameters of TUNNEL).
When started, TUNNEL established a TCP connection to JRouter, over which it sends all
outgoing traffic. Incoming traffic is also send via this connection by JRouter.
The problem with such a solution is that JRouter is a centralized single point of failure.
This project would modifyJRouter as follows: the connection between a channel behind the
firewall and JRouter outside the firewall is via TCP, but JRouter uses IP multicast to
re-cast outgoing traffic to its destination channels. When incoming IP multicasts are
received, they are sent via TCP to the channel. Thus, every firewall would use 1 JRouter
for tunneling, and then re-multicasting the outgoing traffic.
Design and implementation of an example network. Simulate partitioning of the network
and its consequences on JavaGroups' GMS layer.