Distributed Systems and Applications
Module code: CO7090
Computer networks and distributed applications have a paramount role in everyday life. Nowadays, it is hard to imagine stand-alone systems or applications. Practically, any modern computing device offers the possibility of being connected with other devices. At a higher level, applications aim at exploiting networking capabilities of systems and tend to be more and more interconnected and communicating themselves.
Programming this kind of distributed application can be a hard task if not done at the appropriate level of abstraction. There are two main complex aspects to deal with: distributed systems are frequently made of heterogeneous devices and interact through different communication infrastructures, and modern distributed systems have different tiers (such as TCP/IP level, operating system or network system). Middlewares provide an abstraction of many low-level details of systems. They are meant to simplify software development and application integration by interfacing the application level with a lower tier of distributed systems so that programmers do not have to worry about implementation details. Also, middlewares allow programmers to integrate applications developed for different execution context and in different times.
In this module we will review some notions of concurrent and distributed programming (e.g. threads and RMI) and look at the main models and principles behind the middlewares which have been proposed by vendors such as Microsoft, IBM, Sun and Oracle. In fact, these proposals differ not only with respect to the technologies or architectures adopted, but also in the underlying coordination models. We will also examine some of the most common middlewares in the development of web-based and distributed applications.