Basic Concepts of Distributed Systems, Distributed Processing, Middleware and Middleware Services. Distributed Systems Organization (client-server model, P2P systems). Communication in Distributed Systems, Remote Procedure Call, Remote Objects, Remote Method Invocation, Message-oriented and Stream-oriented Communication. Ordering of Events, Synchronization, Logical Clocks, Leader Election Algorithms, Mutual Exclusion Algorithms, Distributed Transactions. Fault Tolerance, Failure Models, Failure Masking and Replication, Agreement in Faulty Systems, Distributed Commit, Recovery. Distributed File Systems, Naming and Directory Services. Introduction to Cloud Computing and Services (deployment models, service models, the MapReduce paradigm, etc.). Practice / lab assignments in: Internet domain sockets, Unix RPC, Java RMI, CORBA, XML RPC, Hadoop/MapReduce.