Programming models for distributed systems I

The development of distributed systems can of course be done directly using ones favourite programming language and API to whatever network protocol stack that is available. However, such an approach will be cumbersome and the result will probable not be very portable or reusable. In this and the following lecture, we look at different programming models for writing distributed systems. Today we start by considering the basic client-server model, followed a look at the remote method invocation (RMI) model (exemplified by JAVA RMI and .NET Remoting), that aims at allowing the programmer to write his/hers distributed system as an ordinary single machine application by hiding the message passing as ordinary method invocation. We shall argue why distributed objects is a good model for programming distributed systems. However, both using and implementing such a distributed object system is not as easy as one may think, as will be exemplified during the lecture.

Literature

[DS] Section 4.3-4.4, 5.1-5.2, 5.5. (4.4, 5.2.4, 5.2.5 are absolutely essential)
You might also consider reading [DS] chapter 3 to refresh what you learned in the networking course.

Supplementary literature:

Exercises

1. [DS] 4.20, 5.3, 5.4

2a .Java version: Read this document and solve the exercise found at the bottom of the tutorial. This tutorial and exercise has kindly been provided by Thomas Heide Clausen.

In case you are getting security errors, the following small hack should be able to deal with it:

grant

{

    permission java.security.AllPermission;

};



// usage: 

// java -Djava.security.policy=Grant.java 

// examples.rmi.RMIClient borg.cs.aau.dk

2b .NET version. (See .Net lecture)

3. [DS] 4.10, 5.12

4. If time permits  [DS] 4.8, 4.23