E0 209 Principles of Distributed Software
January-April 2024, 2.00pm-3.30pm Mon Wed, Room 117 CSA
Instructor:
K. V. Raghavan
Teaching Assistants:
Rajanya Dasgupta (rajanyad), Anurag Kumar (anuragk), Rahul Singh (rahulsingh14)
Lecture slides
- Introduction,
Jan. 3rd
- OS-level virtualization and Docker, Jan. 8, 10.
A sample Spring and Docker project project; see the
associated instructions in the file docker-running.txt.
- HTTP,
SoA, SOAP, and REST , Jan. 15.
- Spring slides.
A sample
Spring Data JPA project. A video on Spring Data JPA
(accessible only via your IISc G-suite login). Jan. 17, 24, 29.
- Microservices,
Jan. 31, Feb. 5, 7
- Kubernetes, Feb. 9, 12.
Two minikube tutorials. A sample project that exhibits a
sample application accessing a separate database service, such that both
the application and the database service can be deployed as separate
services under minikube.
- Feb. 14, 19, 21, 26: Introduction to actor
model and Akka.
Akka-chatroom demo; to compile and run it,
please unzip, enter into the directory, and type "mvn compile; mvn exec:exec".
- Feb. 28, Mar. 4, 11: Akka
Cluster, and its applications such as cluster sharding, routers, and
distributed data.
Sharding demo;
to compile and run it,
please unzip, enter into the directory, and follow the instructions in the
README file.
- Mar. 13: BASE paper
- Mar. 15: Akka
Persistence.
Persistence
demo; to compile and run it,
please unzip, enter into the directory, and follow the instructions in the
README file.
- Mar. 18, 20: CRDT paper
- Mar. 22, 25, 27: stronger consistency notions
- April 1, 3, 8, 10: Map-reduce, Hadoop, Spark.
Motivation
Development of distributed software applications is a very important
activity, accelerated in recent years by the increasing predominance of
cloud computing. The typical requirements from a modern day distributed
application are continuous availability even in the presence of software
and hardware faults, ability to scale up or down on-the-fly based on input
load (i.e., elasticity), ease of development and maintenance, and ease of
continuous integration and deployment. This course will introduce the
principles and programming models and frameworks for distributed
applications that help meet these requirements. It will also cover
representative modern languages and technologies that are used to develop
and deploy such applications.
Syllabus
Introduction to distributed software and cloud computing. OS-level
virtualization, developing and deploying containers using Docker.
Services, statelessness and statefulness, Representational State Transfer
(REST). Basics of developing services and web applications using
SpringBoot. The microservices paradigm of distributed software development,
and common microservices architecture patterns. Useful attributes of
microservices paradigm such as scale in and out, fault tolerance, and
availability. Cluster management using Kubernetes. Introduction to actors
-- a message-driven programming model that enables large scale concurrency,
distribution, and fault tolerance. Programming actor-based systems using
the Akka toolkit. Achieving availability and elasticity by distributing
the application over multiple nodes using Akka Cluster. Introduction to
distributed data analytics -- batch architecture patterns, and introduction
to Spark. Consistency of data in distributed programs -- eventual
consistency.
Reading material