We may earn an affiliate commission when you visit our partners.
Course image
Indranil Gupta

Cloud computing systems today, whether open-source or used inside companies, are built using a common set of core techniques, algorithms, and design philosophies – all centered around distributed systems. Learn about such fundamental distributed computing "concepts" for cloud computing.

Read more

Cloud computing systems today, whether open-source or used inside companies, are built using a common set of core techniques, algorithms, and design philosophies – all centered around distributed systems. Learn about such fundamental distributed computing "concepts" for cloud computing.

Some of these concepts include: clouds, MapReduce, key-value/NoSQL stores, classical distributed algorithms, widely-used distributed algorithms, scalability, trending areas, and much, much more!

Know how these systems work from the inside out. Get your hands dirty using these concepts with provided homework exercises. In the programming assignments, implement some of these concepts in template code (programs) provided in the C++ programming language. Prior experience with C++ is required.

The course also features interviews with leading researchers and managers, from both industry and academia.

Enroll now

What's inside

Syllabus

Week 1: Orientation, Introduction to Clouds, MapReduce
This course is oriented towards learners with similar backgrounds as juniors and seniors in a CS undergraduate curriculum. Since learners come from various backgrounds, it is critical you view this lecture AND pass the prerequisite test. This will ensure you have many of the assumed prerequisite pieces of knowledge required to enjoy this course.
Read more
Week 2: Gossip, Membership, and Grids
Lesson 1: This module teaches how the multicast problem is solved by using epidemic/gossip protocols. It also teaches analysis of such protocols. Lesson 2: This module covers the design of failure detectors, a key component in any distributed system. Membership protocols, which use failure detectors as components, are also covered. Lesson 3: This module covers Grid computing, an important precursor to cloud computing.
Week 3: P2P Systems
P2P systems: This module teaches the detailed design of two classes of peer to peer systems: (a) popular ones including Napster, Gnutella, FastTrack, and BitTorrent; and (b) efficient ones including distributed hash tables (Chord, Pastry, and Kelips). Besides focusing on design, the module also analyzes these systems in detail.
Week 4: Key-Value Stores, Time, and Ordering
Lesson 1: This module motivates and teaches the design of key-value/NoSQL storage/database systems. We cover the design of two major industry systems: Apache Cassandra and HBase. We also cover the famous CAP theorem. Lesson 2: Distributed systems are asynchronous, which makes clocks at different machines hard to synchronize. This module first covers various clock synchronization algorithms, and then covers ways of tagging events with causal timestamps that avoid synchronizing clocks. These classical algorithms were invented decades ago, yet are used widely in today’s cloud systems.
Week 5: Classical Distributed Algorithms
Lesson 1: This module covers how to calculate a distributed snapshot, leveraging causality again to circumvent the synchronization problem. Lesson 2: This lecture teaches how to order multicasts in any distributed system. Algorithms for assigning timestamp tags to multicasts using various flavors of ordering – FIFO, Causal, and Total – are covered. The module also covers virtual synchrony, a paradigm that combines reliable multicasts with membership views. Lesson 3: Consensus is one of the most important problems in a distributed system, enabling multiple machines to agree. This module uses Paxos, one of the most popular consensus solutions used in the industry today. Paxos is not perfect because consensus cannot be solved completely – an optional lecture presents the famous FLP proof of impossibility of consensus.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Explores distributed systems' key concepts, which are foundational for cloud computing
Features interviews with renowned researchers and executives from academia and industry
Structured for learners at a junior or senior undergraduate level in computer science
Utilizes C++ programming language in assignments, requiring prior experience
Advises learners to have foundational knowledge in prerequisite topics

Save this course

Save Cloud Computing Concepts, Part 1 to your list so you can find it easily later:
Save

Reviews summary

Mixed reviews: basic cloud concepts

Learners say that Cloud Computing Concepts, Part 1 is a stimulating course that covers a lot of ground in a short time. While some students appreciate the difficult programming assignments, others find them complex and difficult to understand. The course is not recommended for students who are looking for a simple introduction to cloud computing. According to learners, the course materials are coherent and the lectures are clear and informative. However, some students find the tone of the narrated lectures to be plain and the resources to be outdated.
Lectures are clear and informative.
"The lectures are clear and informative."
"The quizes pose the right amount of challenge."
"The template code provided for the programming assignment is terrible, but the assignment itself is not that complex and quite doable for most people with object oriented programming experience."
Good course overall, especially for beginners.
"This course is worthwhile to take as it's one of the only distributed computing courses I found that gives overview of cloud technology."
"Though plain narrated tone and a little out-dated resource, this course is by far the most accessible online course."
"Programming assignment is very fun as well, which require enough effort to finish."
Resources provided are slightly outdated.
"Though plain narrated tone and a little out-dated resource, this course is by far the most accessible online course."
MP and HW assignments are very complex and difficult.
"Worst course I have ever took. Assignment are very complex and no clear instruction."
"You need to know C++ very well for MP and HW assignment is too difficult."
"Instructor is just giving very simple examples in video, you have to spend lot hours outside to understand and do the homework."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Cloud Computing Concepts, Part 1 with these activities:
Review Basic Data Structures and Algorithms
Ensure you have a strong foundation by reviewing basic data structures and algorithms, which are essential for distributed systems.
Browse courses on Data Structures
Show steps
  • Revisit concepts like arrays, linked lists, stacks, and queues
  • Practice implementing basic sorting and searching algorithms
Review Lecture Notes and Quizzes
Ensure that you have a strong understanding of the fundamental concepts covered in the course by reviewing lecture notes and quizzes.
Browse courses on Distributed Systems
Show steps
  • Gather all lecture notes, assignments, quizzes, and exams
  • Review and summarize key concepts from each lecture
  • Complete practice quizzes and review your answers
Participate in a Study Group
Enhance your learning by discussing concepts, solving problems, and sharing insights with peers in a study group.
Browse courses on Distributed Systems
Show steps
  • Find or form a study group with fellow students
  • Set regular meeting times and discuss course topics
  • Work on assignments or projects together
Six other activities
Expand to see all activities and additional details
Show all nine activities
Explore Cloud Computing Platforms
Expand your knowledge of cloud computing by exploring popular platforms like AWS or GCP through tutorials.
Browse courses on Cloud Computing
Show steps
  • Choose a cloud computing platform to explore
  • Find tutorials or documentation on the platform's website
  • Follow the tutorials to create a simple project or application
  • Experiment with different services and features offered by the platform
Implement Key-Value Store in C++
Solidify your understanding of key-value stores and gain practical experience by implementing one in C++.
Browse courses on Key-Value Stores
Show steps
  • Review the design of key-value stores
  • Set up a development environment with C++
  • Implement a simple key-value store using a hash table
  • Test and debug your implementation
Attend a Cloud Computing Workshop
Gain practical insights and hands-on experience by attending a cloud computing workshop led by industry experts.
Browse courses on Cloud Computing
Show steps
  • Research and find a relevant cloud computing workshop
  • Register and attend the workshop
  • Actively participate in discussions and hands-on activities
Read 'Designing Data-Intensive Applications'
Deepen your understanding of designing and building scalable, distributed systems by reading this highly acclaimed book.
View Secret Colors on Amazon
Show steps
  • Obtain a copy of the book
  • Read and summarize key chapters related to distributed systems design
  • Complete exercises or projects from the book to apply concepts
Develop a Cloud-Based Application Prototype
Apply your knowledge by creating a working prototype of a cloud-based application, showcasing your understanding of distributed systems and cloud technologies.
Browse courses on Cloud Computing
Show steps
  • Identify a problem or opportunity that can be addressed with a cloud-based application
  • Design and plan the architecture of your application
  • Implement the application using cloud services and technologies
  • Test and refine your prototype
Contribute to an Open-Source Cloud Computing Project
Enhance your understanding by contributing to an open-source cloud computing project, gaining practical experience and insights from the community.
Browse courses on Cloud Computing
Show steps
  • Identify an open-source cloud computing project that aligns with your interests
  • Review the project's documentation and codebase
  • Make contributions such as bug fixes, feature enhancements, or documentation improvements

Career center

Learners who complete Cloud Computing Concepts, Part 1 will develop knowledge and skills that may be useful to these careers:
Cloud Architect
As a Cloud Architect, you will design, build, and maintain cloud computing systems. You will need to understand the core concepts of cloud computing, including distributed systems, scalability, and reliability. This course will give you a strong foundation in these concepts, and will help you to develop the skills you need to be successful in this role.
Software Engineer
As a Software Engineer, you will develop, test, and maintain software applications. You will need to have a strong understanding of computer science fundamentals, including data structures, algorithms, and design patterns. This course will help you to develop these skills, and will also introduce you to the specific challenges of developing software for cloud computing systems.
Data Scientist
As a Data Scientist, you will use data to solve business problems. You will need to have a strong understanding of statistics, machine learning, and data mining. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with data in cloud computing systems.
DevOps Engineer
As a DevOps Engineer, you will work to bridge the gap between development and operations teams. You will need to have a strong understanding of both software development and system administration. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with cloud computing systems.
Systems Administrator
As a Systems Administrator, you will manage and maintain computer systems. You will need to have a strong understanding of operating systems, networking, and security. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with cloud computing systems.
Network Engineer
As a Network Engineer, you will design, build, and maintain computer networks. You will need to have a strong understanding of networking protocols, network security, and network management. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with cloud computing systems.
Security Engineer
As a Security Engineer, you will protect computer systems from unauthorized access, use, disclosure, disruption, modification, or destruction. You will need to have a strong understanding of security principles, security technologies, and security best practices. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with cloud computing systems.
Data Analyst
As a Data Analyst, you will collect, clean, and analyze data to identify trends and patterns. You will need to have a strong understanding of data analysis techniques, data visualization, and data management. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with data in cloud computing systems.
Database Administrator
As a Database Administrator, you will manage and maintain databases. You will need to have a strong understanding of database design, database management systems, and database security. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with databases in cloud computing systems.
Web Developer
As a Web Developer, you will design, build, and maintain websites. You will need to have a strong understanding of web development technologies, including HTML, CSS, JavaScript, and web servers. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with web applications in cloud computing systems.
Mobile Developer
As a Mobile Developer, you will design, build, and maintain mobile applications. You will need to have a strong understanding of mobile development technologies, including Android, iOS, and mobile web development. This course will help you to develop these skills, and will also introduce you to the specific challenges of working with mobile applications in cloud computing systems.
Cloud Sales Engineer
As a Cloud Sales Engineer, you will sell cloud computing solutions to businesses. You will need to have a strong understanding of cloud computing technology, as well as sales and marketing skills. This course will help you to develop these skills, and will also introduce you to the specific challenges of selling cloud computing solutions.
Cloud Consultant
As a Cloud Consultant, you will help businesses to adopt cloud computing technology. You will need to have a strong understanding of cloud computing technology, as well as consulting skills. This course will help you to develop these skills, and will also introduce you to the specific challenges of consulting on cloud computing solutions.
Technical Writer
As a Technical Writer, you will create documentation for cloud computing technology. You will need to have a strong understanding of cloud computing technology, as well as writing and editing skills. This course will help you to develop these skills, and will also introduce you to the specific challenges of writing documentation for cloud computing solutions.
Cloud Security Analyst
As a Cloud Security Analyst, you will assess and mitigate security risks in cloud computing systems. You will need to have a strong understanding of cloud computing technology, as well as security analysis skills. This course will help you to develop these skills, and will also introduce you to the specific challenges of security analysis in cloud computing systems.

Reading list

We've selected six books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Cloud Computing Concepts, Part 1.
This comprehensive textbook provides a solid foundation in the fundamental concepts and challenges of distributed systems. It covers topics such as concurrency, fault tolerance, and distributed algorithms, which are essential for understanding cloud computing systems.
Focuses on the architectural design of data-intensive applications, which are common in cloud computing environments. It covers topics such as data modeling, storage, processing, and analytics, providing valuable insights into modern data management practices.
Provides a visual and intuitive introduction to algorithms, which are essential building blocks for cloud computing systems. It uses simple language and clear illustrations to explain complex concepts, making it accessible to beginners.
Provides a practical guide to using Java technologies for big data analytics in cloud computing environments. It covers topics such as data ingestion, processing, and visualization, providing hands-on experience with popular frameworks.
Focuses on building cloud-native applications using the Spring Boot framework. It provides a comprehensive guide to developing, deploying, and managing cloud-native applications, including best practices and design patterns.
Provides a practical guide to cloud computing, covering its benefits, challenges, and best practices. It offers insights into cloud adoption, service models, and implementation strategies, providing valuable guidance for organizations.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Cloud Computing Concepts, Part 1.
Cloud Computing Concepts: Part 2
Most relevant
C Programming: Modular Programming and Memory Management ...
Most relevant
C Programming: Language Foundations - 2
Most relevant
Data Manipulation at Scale: Systems and Algorithms
Most relevant
Big Data Analysis with Scala and Spark
Big Data Analysis with Scala and Spark (Scala 2 version)
Introduction to High-Performance and Parallel Computing
Distributed Programming in Java
Introduction to Java Programming: Starting to code in Java
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser