Description

This course conveys key concepts for designing and building distributed software systems.  The course is geared towards software engineers that work mostly at the application-level, but need to understand the features and limitations of existing middleware for distributed systems.  Additionally, the course covers some research topics related to currently open problems.  Specifically, the following topics will be covered:

·        Definition and scope of distribution: multiprocessing, LAN, Web, ubiquitous computing.

·        Communication

–        styles: request/response (RPC, RMI), non-blocking messages, data sharing (repository, streaming);

–        properties: hiding distribution, latency, fault tolerance…

–        implementation over the network layers.

·        Service discovery

–        scoping and selection mechanisms;

–        modeling and reasoning about quality of service and context.

·        Computation

–        concurrency, synchronization, and consistency;

–        modeling and reasoning about collaboration protocols;

·        Security

–        secure channels;

–        security management;

–        examples (Kerberos).

·        Adaptation

–        static versus dynamic distribution;

–        issues related to hardware mobility and software migration (mobile agents and data);

–        fault tolerance and opportunistic improvement.

·        Examples of infrastructures

–        distributed file systems (CODA);

–        object-based (CORBA, DCOM);

–        service-based (Service-Oriented Architectures, Web services);

–        activity-based (Aura).