Next:
1. Introduction
Up:
Distributed Systems Course Notes
Previous:
Distributed Systems Course Notes
Contents
1. Introduction
1.1 Aims and Learning Outcomes
1.2 Prerequisites
1.3 Teaching methods
1.4 Assessment
1.5 Course programme
1.6 Reading list
2. Lecture Notes
2.1 Introduction
2.1.1 Course Outline
2.1.2 What's a Distributed System
2.1.3 Example Distributed Systems
2.1.4 What do we want from a Distributed System?
2.1.5 Elements of a Distributed System
2.1.6 Conclusion
2.2 Bits and Bytes
2.2.1 Bits, Bytes, Integers etc
2.2.2 Prefices
2.2.3 Memory and Packets
2.2.4 Bit Manipulation
2.3 Foundations of Distributed Systems
2.3.1 Physical Concepts
2.3.2 Packets
2.3.3 Conclusion: Network Properties
2.4 Operating System Support
2.4.1 Protocols
2.4.2 Layering
2.4.3 Reliable Transmission: The Basic Techniques
2.4.4 Group Communication
2.4.5 Sockets
2.4.6 Request and Response
2.4.7 Conclusion
2.5 Remote Procedure Call (RPC)
2.5.1 Send/Receive
2.5.2 Message Styles
2.5.3 Remote Procedure Call
2.5.4 Cross domain communication
2.5.5 Problems with RPC
2.5.6 Summary
2.6 Distributed Objects: The Java Approach
2.6.1 What's an Object?
2.6.2 Why Distributed Objects?
2.6.3 How to build Distributed Object Systems
2.6.4 Objects and RPC systems
2.6.5 Java RMI
2.6.6 Summary
2.7 Enterprise computing and Corba
2.7.1 Computers in Business
2.7.2 Three Tier Models and the Web
2.7.3 CORBA
2.7.4 Web Services - Business to Business
2.7.5 Summary
2.8 Computer Security: Why you should never trust a computer system
2.8.1 Definitions
2.8.2 Authentication
2.8.3 Authentication in distributed systems: Private Key Encryption
2.8.4 Public Key Encryption
2.8.5 Secure Socket Layer
2.8.6 Authorisation
2.8.7 Enforcement
2.8.8 Trusted Computing Platform
2.8.9 Firewalls
2.8.10 Classes of security problems
2.8.11 Lessons
2.9 Names and Naming Services
2.9.1 Main Points
2.9.2 Why names?
2.9.3 What does one do with names?
2.9.4 What's a name?
2.9.5 Partitioned names
2.9.6 Descriptive names
2.9.7 Object Location from name - broadcast
2.9.8 Location through database
2.9.9 Distributed Name Servers
2.9.10 Availability and performance
2.9.11 Maintaining consistency for distributed name services
2.9.12 Client and Name server interaction.
2.9.13 Summary
2.10 Distributed File Systems
2.10.1 Main Points
2.10.2 Client Implementation
2.10.3 No Caching
2.10.4 NFS - Sun Network File System
2.10.5 Andrew File System
2.10.6 Summary
2.11 Peer to Peer (p2p) Services and Overlay Networks
2.11.1 Overlay Networks
2.11.2 Gnutella
2.11.3 Chord - A Distributed Hash Table Example
2.11.4 Current Research Challenges
2.11.5 Summary
2.12 Content Distribution Networks
2.12.1 Getting Content over a Network
2.12.2 Web Caches
2.12.3 Pre-fetching Data
2.12.4 Using your Peers: BitTorrent
2.12.5 Summary
2.13 Replication: Availability and Consistency
2.13.1 What is Replication?
2.13.2 Issues in Replication
2.13.3 Consistency
2.13.4 Updating Server state
2.13.5 Multicast and Process Groups
2.13.6 Message Ordering
2.13.7 Summary
2.14 Shared Data and Transactions
2.14.1 Servers and their state
2.14.2 Atomicity
2.14.3 Automatic Teller Machines and Bank accounts
2.14.4 Transactions
2.14.5 Serial Equivalence
2.14.6 Summary
2.15 Concurrency Control and Transactions
2.15.1 Why concurrency control?
2.15.2 Locking
2.15.3 Optimistic Concurrency Control
2.15.4 Timestamping
2.15.5 Summary
2.16 Distributed Transactions
2.16.1 Single Server Transactions
2.16.2 Distributed Transactions
2.16.3 Atomic Commit Protocols
2.16.4 Distributed Concurrency Control
2.16.5 Summary
2.17 Transactions: Coping with Failure
2.17.1 Failure Modes
2.17.2 Recovery
2.17.3 Network Partition
2.17.4 Summary
3. Exercises and answers
3.1 Exercises
3.1.1 Communication System Fundamentals
3.1.2 Devising a Routing Protocol
3.1.3 Layering
3.1.4 Serialization
3.1.5 Remote Procedure Call
3.1.6 Security
3.1.7 Names and distributed filing systems
3.1.8 Availability and Ordering
3.1.9 Transactions and Concurrency
3.1.10 Distributed Transactions
3.2 The Answers
3.2.1 Communication System Fundamentals
3.2.2 Devising a Routing Protocol
3.2.3 Layering
3.2.4 Serialization
3.2.5 Remote Procedure Call
3.2.6 Names and Distributed File Systems
3.2.7 Transactions and Concurrency
3.2.8 Distributed Transactions
4. Programming Exercises
4.1 Bit Manipulation and the Bitwise Operators
4.2 Datagram Sockets
4.2.1 Network Characteristics
4.2.2 Machine specific Addressing
4.2.3 UDP - User Datagram Protocol
4.2.4 Programming in UDP
4.2.5 Sockets
4.2.6 The Exercise
4.3 Multicast sockets
4.4 RMI
4.4.1 Constructing the Interface
4.4.2 The Server Implementation
4.4.3 The Client
4.4.4 Compiling and Running the code
4.5 Threads and Synchronization
4.5.1 Threads in Java
4.5.2 Java Threads and the Runnable Interface
4.5.3 Locks in Java
4.5.4 Locks, Objects and ``synchronized''
4.6 Testing file latency
4.7 HTTP and URLs in Java
4.7.1 The task
4.7.2 Parsing HTML
4.7.3 Using URLs and URLConnection
4.8 Transactions and locks
4.8.1 Introduction
4.8.2 The Exercise
4.9 Reflection in Java: Universal RMI
4.9.1 Reflection
4.9.2 The Task
5. Readings
5.1 Seminar Reading List
6. Assignments
6.1 Assignment 1: The design and implementation of an Event Notification System based on the publish/subscribe paradigm
6.1.1 Requirements
6.1.2 Reflections on performance and improvements
6.1.3 What can go wrong...
6.1.4 Where the marks go
6.1.5 Handin
6.1.6 A model answer
6.2 Assignment 2: The implementation of a simplified distributed hash table
6.2.1 Requirements
6.2.2 Where the marks go
6.2.3 Handin
6.3 PG Assignment : Design and Implementation of a Secure Chat Server and Client
6.3.1 Security Research
6.3.2 Requirements
6.3.3 Client Design and Implementation
6.3.4 Testing
6.3.5 What to present
7. Resources
7.1 Past Exams
7.2 Downloads
7.3 Mailing List
7.4 Miscellaneous links of interest
About this document ...
Next:
1. Introduction
Up:
Distributed Systems Course Notes
Previous:
Distributed Systems Course Notes
Ian Wakeman 2005-02-22