1 of 11

Principles of Distributed Software

E0 209, January-April 2025

Komondoor V. Raghavan

2 of 11

Distributed computing

What is distributed computing?

  • A single application runs across multiple nodes/computers, which may be geographically dispersed, and which are connected to each other via networking
  • The application consists of a process or processes on each participating node

3 of 11

Why distributed computing

  • Scalability: Application may be able to scale up to using more nodes or down to using fewer nodes based on real-time load
  • Availability: If a node goes down, application still runs (with reduced scale or functionality)
  • Latency: If users are geographically dispersed, each user could be served by a node that is closer to them (hence, less latency of interaction)
  • Cost: A set of smaller/commodity nodes may be cheaper than a single powerful one with the same total power

Contrast with high-performance computing: single powerful node (multi core), or closely-coupled cluster/grid of nodes with almost no delay in communication.

4 of 11

Example domains where distributed computing is used

  • Online e-commerce, travel booking, banking, etc.
  • Mobile-based taxi hailing
  • Social-media apps
  • Multi player online games
  • Web-based collaboration software (e.g., web-based document or spreadsheet editing)
  • Large-scale data analytics, machine learning

Note

  • In some of the examples above the nodes are servers (i.e., very little client-side computing), while in other examples even clients play a role in computing and thus serve as nodes.
  • HPC has its own applications, mainly in scientific computing.

5 of 11

Cloud computing

  • Application runs on remotely based computers
  • Public cloud
    • Cloud “providers” provide nodes, storage disks, on rent.
    • One can scale up or scale down the number of nodes used dynamically, and pay accordingly.
    • No need to buy, maintain, and manage own computing hardware. No need to over-provision for peak load.
  • Private cloud
    • Large organizations/companies may run their own private cloud, which is used by different divisions (instead of each division maintaining its own computing). Otherwise similar to public cloud.
  • Distributed applications are often deployed on cloud
    • However, distributed applications can also be run on a locally managed cluster of computers
    • And non-distributed (i.e., normal single-site) programs can be run on a single node in the cloud

6 of 11

Very brief history of cloud computing

  • Initially popularized by companies like Google and Amazon, to run their internal applications (like e-commerce software, search engine, etc.)

  • Later, public clouds emerged when these same companies realized that they could rent out their compute resources to small businesses and companies, thus freeing them from maintaining their own compute infrastructure.

7 of 11

Focus of this course

Core content: Concepts, technologies, and frameworks, for developing and deploying distributed applications.

We will focus primarily on techniques useful for database-oriented enterprise applications (e.g., e-commerce, travel booking, social media, banking, etc.)

Topics we will cover:

  • Containers and virtualization
  • Services, microservices, architectural patterns for developing microservices
  • Microservice development and deployment using SpringBoot, Java, and Docker
  • Cluster management using Kubernetes
  • Event-based, actor-based programming using Akka
  • Eventual consistency of data in the presence of distributed updates
  • Programming for data analytics (MapReduce, Spark)

8 of 11

Focus of this course - II

  • Our focus is on distributed application development, not on the specifics of cloud deployment, cloud computing management, etc.

  • We will not focus on underlying distributed systems concepts such as consensus and leadership protocols, detection of network node outage and network partitioning, distributed databases, etc.,
    • We will frequently touch upon how we rely on these features while deploying distributed applications

9 of 11

Course workload

  • Two programming projects: (1) Spring, (2) Akka: 40%
  • Paper presentation: 10%
  • Midsem exam: 20%
  • Final exam: 30%

A necessary condition to obtain a passing grade: Minimum 35% marks in weighted sum of midsem and final marks

10 of 11

Misconduct policy

  • In project you can discuss/collaborate only with your team mate, and ask clarification questions publicly in class or on the class Team. No other discussions allowed.
  • Exams: no discussions or copying
  • Penalties: For each instance of a violation of above policy ⇒
    • Zero for the entire project/exam, plus one grade-point reduction in final grade
    • Grade-point reductions over multiple violations will accumulate.

11 of 11

Pre-requisites

Acknowledgment

  • Basic undergraduate-level data structures and algorithms
  • Basics of UG-level databases
  • Proficiency in programming
    • Programming will be in Java
    • If you don’t know Java, you would need to learn it in first 2-3 weeks
    • Willingness to learn about details of frameworks (such as Spring and Akka) from online resources. In class we will cover mainly concepts behind these frameworks.

Course contents designed with inputs from

Dr. Prasad Deshpande

Senior Staff Software Engineer, Databricks, and ACM Distinguished Scientist