Introduction: Goals, challenges, types of distributed systems. Architectures: centralized, decentralized and hybrid architectures, interceptors, self-management in distributed systems, server clusters, code migration. Communication: RPC/RMI, message-oriented, stream-oriented multicast. Naming: Flat naming, structured naming and attribute-based naming. Synchronization: Physical clock, logical clocks: Scalar and vector clocks, mutual exclusion, leader election. Consistency and replication: Data-centric and client-centric consistency models, replica management. Fault tolerance: Process resilience, reliable unicast and multicast communication, distributed commit,checkpointing and recovery. Security: Threats, policies, mechanisms, secure channels, access control and security management. Case studies: Enterprise Java Beans, Globe distributed shared objects, NFS/DFS, Amoeba operating system, web server clusters.