This repository contains my work for the course Distributed Systems for Information Systems Management (95-702), taken at Carnegie Mellon University. In this course, I learned the principles underlying distributed computing and the design of distributed systems, and exercised these principles in the context of real applications by using technologies such as XML, SOAP, Web services, and JEE-based application servers. Additionally, I was able to gain hands-on experience with JEE frameworks, Hadoop and Spark, and Android.
This course covered distributed computing principles such as P2P, client server, inter-process communication, distributed objects and remote invocation, naming and name services, time and global state management, transactions and concurrency control, and distributed transactions. Additionally, the course focused on internet-enabled distributed computing technologies such as application server architectures (JEE), XML and SOAP, and http-based RPC combined with standards for interface definition and naming. The prerequisite for this course was 95-712 Object-oriented Programming and Design.
During this course, I completed several projects and assignments that included topics such as:
- Designing and implementing distributed systems
- Understanding the function and interplay of network protocols from ARP to application protocols
- Programming solutions to run on all ranges of devices
- Understanding the Network File System (NFS), the Andrew File System (AFS), and the Hadoop Distributed File System (HDFS)
- Understanding the challenge of time in a distributed system
- Implementing a two phase commit protocol
- Describing the difference and similarities between symmetric key and asymmetric key cryptography
- Describing the reasoning behind each step of several cryptographic protocols including variations on Kerberos and SSL
- Deploying containers to cloud infrastructure
- Understanding the problem of distributed consensus and designing solutions
Through this course, I have gained the following skills:
- Understanding the principles underlying distributed computing and the design of distributed systems
- Real-world application of distributed systems technologies such as XML, SOAP, Web services, and JEE-based application servers
- Hands-on experience with JEE frameworks, Hadoop, Spark, and Android
- Ability to code solutions with core networking protocols
- Understanding of the Network File System (NFS), the Andrew File System (AFS), and the Hadoop Distributed File System (HDFS)
- Understanding of transactions and implementation of a two phase commit protocol
- Knowledge of symmetric key and asymmetric key cryptography
- Ability to deploy containers to cloud infrastructure
- Ability to design solutions for distributed consensus