I was recently in Hamburg once again to deliver another IT training. This time around the topic was Java, a language I’ve long been familiar with.
But it wasn’t just plain old Java; the participants were already well-versed in that. Instead, they wanted to learn how to build distributed systems using Java. Not only that, but they had a few very specific interests, which you see in the list below.
Distributed systems is a challenging topic to teach, especially because it encompasses so much stuff and I had only two days to cover the requested material. Here’s what I managed to include:
Principles of networked and distributed systems
- Definitions
- Transparency
- Benefits and challenges
- Case study: The web
Distributed architecture and design patterns
- Layer paradigm
- Distributed operating systems
- Interprocess communication
- Remote invocation
- Models (client/server, peer-to-peerm multi-server, proxy, mobile variants, thin clients)
- Distributed design patterns
Threads
- Thread vs. processes
- Benefits and costs
- Server threading architectures
- Threads in Java
Lower-level concurrency mechanisms
- Thread interference
- Synchronising
Higher-level concurrency mechanisms
- Locks
- Executor, ExecutorService, ThreadPools
- Futures
- Concurrent collections
Sockets
- Addressing with sockets
- UDP
- TCP
Streams
- Input and output streams
- Stream readers and writers
- Streaming with sockets
- Streaming among multiple threads
- Multicast
Serialisation
- Serializable interface
- Serialisation with references
- Serialisation with inheritence
- Best practices
Remote Method Invocation
- Using the RMI registry
- Remote interface
- Creating a server
- Creating a client
Case study: CORBA
Distributed object persistence
- Java Persistence API
- Hadoop
- Distributed databases
- Special topic: Distributed cache using memcached
- Best practices for distributed caching