Many applications rely on timely dissemination of critical information to a large number of distributed users. Examples of such applications range from traffic information dissemination to rapid response to emergency situations. In this project, you will learn how to construct such distributed applications. Although you will be using message passing, the style of communication you use will often parallel the remote procedure call abstraction that we have studied in class. You will not only program the application but will also be required to evaluate the performance and scalability of your implementation.
The basic idea of the project is as follows. You will model sensors that generate new data by n processes that potentially run on different nodes of a distributed system. The number of clients that are interested in information created by the sensors in m where m >> n. However, in a test program you can use small values (e.g., n=2 and m=10). The problem is that the sensor data, which is generated at unpredictable intervals, must be made available to clients as and when they need it. You will explore the following solutions for making this information available to the clients.
Obviously, you need to use a reliable message delivery substrate to disseminate updates from sensors to client nodes. You will use datagram sockets that provide best effort delivery. You will need to implement implicit or explicit acknowledgements and retransmissions to provide reliable delivery and ordering. In your design, you should have a communication thread in each process that implements the communication protocol, including retransmissions when necessary.
The specific details of what data is disseminated are left to you. For example, a sensor’s data may include a timestamp, a road segment and current speed at which traffic is moving. You can look at the Georgia Navigator to see what kind of information should be disseminated. You should clearly show when and what data is sent and received by the processes by generating suitable output from your program.
You need to evaluate your implementation carefully. In the central server case, we want to study the scalability of the server. This can be done by measuring response time of a pull style request from a client that is processed by the server. You can plot the response time with increasing number of clients and see if the response time degrades with the number of clients. In the second case, a sensor may not be able to disseminate data quickly if there are a large number of interested clients and new data is produced rapidly. In this case, a metric could be the rate at which new sensor data can be generated and disseminated which could be plotted against the number of clients supported by a sensor. Clearly, you need to define you metric, design the experiment that you run, and discuss the results that are obtained by you.
A brief write-up that lists assumptions made by you, design decisions, message types and formats and other interesting aspects of your implementations should be submitted with the code files.
There are numerous details that are not specified here. You should make reasonable assumptions and make appropriate design decisions. The evaluation of the project will be based on the following criteria: