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.

This course builds on the material covered in the Cloud Computing Concepts, Part 1 course.

Enroll now

What's inside

Syllabus

Week 1: Course Orientation and Classical Distributed Algorithms Continued
Lesson 1: To coordinate machines in a distributed system, this module first looks at classical algorithms for electing a leader, including the Ring algorithm and Bully algorithm. We also cover how Google’s Chubby and Apache Zookeeper solve leader election. Lesson 2: This module covers solutions to the problem of mutual exclusion, which is important for correctness in distributed systems with shared resources. We cover classical algorithms, including Ricart-Agrawala’s algorithm and Maekawa’s algorithm. We also cover Google’s Chubby support for mutual exclusion.
Read more
Week 2: Concurrency and Replication Control
Lesson 1: Transactions are an important component of many cloud systems today. This module presents building blocks to ensure transactions work as intended, from Remote Procedure Calls (RPCs), to serial equivalence for transactions, to optimistic and pessimistic approaches to concurrency control, to deadlock avoidance/prevention. Lesson 2: This module covers how replication – maintaining copies of the same data at different locations – is used to provide many nines of availability in distributed systems, as well as different techniques for replication and for ensuring transactions commit correctly in spite of replication.
Week 3: Emerging Paradigms
Lesson 1: We study the emerging area of stream processing, touching on key design aspects of Apache Storm. Lesson 2: We study how enormous graphs can be processed in clouds. Lesson 3: We study various types of networks/graphs that are both natural and artificial, and their surprising commonalities. Lesson 4: This module presents classical scheduling algorithms that have been used in operating systems since the inception of computers. We then cover two popular scheduling algorithms for Hadoop.
Week 4: Classical Systems
Lesson 1: When files and directories are stored/accessed over the network, it is called a distributed file system. This module covers the working of distributed file systems like NFS and AFS. Lesson 2: This module covers Distributed Shared Memory systems, their techniques, and pros/cons. Lesson 3: This module looks at the area of sensor networks, starting from what’s inside a sensor mote and how networks of them work.
Week 5: Real-Life Behaviors
Lesson 1: This module is a primer on basic security concepts, not just applied to distributed systems, but also more generally. We study various policies and mechanisms, including encryption, authentication, and authorization. Lesson 2: This module presents case studies of real datacenter outages, and attempts to draw lessons on how to prevent them and how to better prepare for them.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Provides a strong foundation for practicing developers who already have experience developing systems using open source or commercial tools
Explores a myriad of core techniques, algorithms, and design philosophies for cloud computing systems, many of which are industry-standard
Primer on basic security concepts and mechanisms as they apply to distributed systems and cloud computing
In-depth study of a range of fundamental distributed computing concepts and their applications in cloud computing
Taught by a highly experienced instructor, Indranil Gupta, who is recognized for their work in the field of cloud computing
Provides opportunities for hands-on practice through exercises and programming assignments, which can enhance understanding and retention of concepts

Save this course

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

Reviews summary

Valuable cloud computing concepts

According to students, Cloud Computing Concepts: Part 2 is a great companion to Part 1. learners say this course increased their understanding of cloud computing trends, and the lectures and programming assignments were engaging and mind-opening. While prior knowledge of distributed systems may be helpful, the content is described as detailed enough to offer value to most students. However, some negative reviews mention low-quality template code and a programming assignment that was complicated and out-of-date.
Challenging but valuable programming assignment.
"Great to learning cloud computing concepts, and good exercise on programming assignment."
"I learning a lot through those two course"
"Be sure to check the forum for these missing specifications before starting."
Valuable, well-structured content.
"Contrast to Part 1, this course arrange as from deep to surface."
"The first two week class is still algorithm, then it's like application or introduce new area."
"The lecture slides are excellent."
"you can get through most of the course without having to watch the recordings."
Provided template code quality could be improved.
"the assignment is kind of out-of-date and looks no one is maintaining it."
"Also, the quality of the provided code is the worst I've ever seen in my 5 years of Software development."

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 2 with these activities:
Read 'Designing Data-Intensive Applications' by Martin Kleppmann
Gain a comprehensive understanding of the principles and best practices for designing and building data-intensive applications in cloud environments.
View Secret Colors on Amazon
Show steps
  • Read the book thoroughly, taking notes and highlighting key concepts.
  • Complete the exercises and projects provided in the book to reinforce your understanding.
  • Discuss the book's concepts with classmates or online forums to deepen your insights.
Review C++ basics
Refresh your understanding of C++ syntax and data structures to prepare for the programming assignments in this course.
Browse courses on C++
Show steps
  • Review online tutorials on C++ basics.
  • Complete practice problems on a coding platform like LeetCode or HackerRank.
  • Build a small C++ project to apply your refreshed skills.
Learn about MapReduce and key-value stores
Gain a deeper understanding of the fundamental concepts used in cloud computing systems.
Browse courses on MapReduce
Show steps
  • Follow online tutorials on MapReduce and key-value stores provided by cloud providers like AWS or Google Cloud.
  • Experiment with sample code and datasets to implement MapReduce and key-value store operations.
  • Attend webinars or workshops on these topics to enhance your learning.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Mentor other students in distributed systems
Enhance your understanding of distributed systems concepts by sharing your knowledge and helping others.
Browse courses on Distributed Systems
Show steps
  • Join online forums or discussion groups related to distributed systems.
  • Offer to answer questions and provide guidance to other students.
  • Organize study sessions or workshops to share your knowledge.
Implement distributed algorithms
Strengthen your understanding of how distributed algorithms work by implementing them in code.
Browse courses on Distributed Algorithms
Show steps
  • Work through practice problems on implementing distributed algorithms from textbooks or online resources.
  • Join online coding challenges or hackathons focused on distributed algorithms.
  • Contribute to open-source projects that implement distributed algorithms.
Contribute to open-source distributed systems projects
Gain practical experience in distributed systems by contributing to real-world projects.
Browse courses on Open Source
Show steps
  • Identify open-source projects related to distributed systems that interest you.
  • Review the project documentation and codebase.
  • Submit bug reports, feature requests, or code contributions to the project.
Build a prototype cloud application
Apply your knowledge of cloud computing concepts to design and build a real-world application.
Browse courses on Cloud Applications
Show steps
  • Identify a problem or need that a cloud application can address.
  • Design the architecture of your application, including the use of cloud services.
  • Develop and test your application using cloud development tools and platforms.
  • Deploy your application to the cloud and monitor its performance.

Career center

Learners who complete Cloud Computing Concepts: Part 2 will develop knowledge and skills that may be useful to these careers:
Research Scientist
Research Scientists conduct research in various scientific fields, including computer science. If your research focuses on distributed systems, this course will provide you with a strong theoretical foundation. The course covers advanced topics in distributed systems, such as consensus algorithms, distributed databases, and distributed file systems. This knowledge will enable you to make significant contributions to the field of distributed systems research.
Machine Learning Engineer
Machine Learning Engineers develop and deploy machine learning models. This course is highly relevant for Machine Learning Engineers who want to work on distributed machine learning systems. The course will provide you with a solid understanding of how distributed systems are used to train and deploy machine learning models at scale. This knowledge will be crucial for designing and implementing efficient and scalable machine learning systems.
Backend Developer
The role of Backend Developers is to build the server-side logic for web applications and services. This course is a great fit for current or aspiring Backend Developers who want to specialize in developing distributed systems. The course will enhance your understanding of how distributed systems handle data storage, replication, and communication, all of which are essential for building scalable and reliable applications.
Technical Writer
Technical Writers create documentation and training materials for software products. If you are a Technical Writer who wants to specialize in distributed systems, this course will provide you with the necessary knowledge. The course covers a wide range of topics in distributed systems, including architectures, protocols, and algorithms. This knowledge will enable you to effectively communicate the technical details of distributed systems to a wider audience.
Cloud Security Engineer
Cloud Security Engineers are responsible for securing cloud-based systems and data. This course is an excellent fit for those looking to specialize in cloud security. It provides a comprehensive overview of distributed systems, covering concepts such as encryption, authentication, and authorization. This knowledge will be invaluable as you design and implement security measures for distributed cloud systems.
Data Engineer
Data Engineers design and build pipelines to transform and analyze large datasets. This course will be immensely helpful to you as a Data Engineer, as it covers key concepts in distributed systems, which are essential for handling and processing vast amounts of data. Understanding how distributed systems handle data consistency, fault tolerance, and scalability will significantly enhance your ability to design and manage efficient data pipelines.
Software Architect
Software Architects design and develop software systems, often including distributed systems. This course is a valuable resource for Software Architects who want to specialize in distributed systems. It will provide you with a deep understanding of the principles of distributed systems, including topics like data consistency, fault tolerance, and scalability. This knowledge will arm you with the expertise to design and implement robust and scalable software systems.
Data Scientist
Data Scientists analyze data to extract insights and build predictive models. This course will provide valuable knowledge for Data Scientists who want to work in the field of distributed data processing, which is becoming increasingly common as data volumes grow. By understanding concepts like data consistency and fault tolerance in distributed systems, you will be well-equipped to handle and process large datasets effectively.
Product Manager
Product Managers are responsible for managing the development and launch of software products. For Product Managers who want to specialize in cloud-based products, this course will be beneficial. It will provide you with a deep understanding of the principles and practices of distributed systems, which are essential for building scalable and reliable cloud-based products.
Cloud Architect
Cloud Architects translate business requirements into secure, scalable, and high-performance cloud solutions. With a background in distributed systems, you can thrive in this role, where you will be designing and implementing solutions leveraging cloud computing concepts. This course will provide you with a better understanding of how distributed systems work.
DevOps Engineer
DevOps Engineers combine software development and IT operations to oversee the entire application lifecycle. This course helps you build a solid foundation in distributed systems, which is crucial for understanding the complexities of distributed applications. By learning about concepts like load balancing, fault tolerance, and scalability, you will be better equipped to manage and optimize distributed systems in a DevOps environment.
Network Engineer
Network Engineers design, implement, and maintain computer networks, including distributed networks. A strong grasp of distributed systems concepts is necessary to succeed in this role, and this course will provide you with just that. You will learn about concepts like network protocols, routing, and load balancing, which are essential for optimizing network performance and reliability.
Systems Administrator
Systems Administrators are responsible for managing and maintaining computer systems, including distributed systems. This course can be very useful for developing your understanding of distributed systems, which is crucial for managing their complexity and ensuring their reliable operation. The course will provide you with a solid foundation in distributed systems concepts, such as fault tolerance, load balancing, and scalability.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical models to analyze financial data. This course may be useful for Quantitative Analysts who want to develop expertise in the application of distributed systems to financial data analysis. The course covers topics such as parallel computing and distributed databases, which are becoming increasingly important in the field of financial data analysis.
Distributed Systems Engineer
Distributed Systems Engineers work in the trenches of scalability and availability. They work with high-load systems, ensuring performance, stability, and correctness. This course may be useful in helping you build a great foundation for the fundamentals of distributed systems, from consistency and fault tolerance to concurrency and replication, which are all critical concepts for this job.

Reading list

We've selected 12 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 2.
Provides a comprehensive overview of the principles and techniques involved in designing and building data-intensive applications.
Offers a comprehensive introduction to cloud computing concepts, architectures, and technologies.
Covers the fundamentals of distributed systems, including concepts like distributed computing models, interprocess communication, and distributed consensus algorithms.
Provides a comprehensive introduction to distributed algorithms, covering topics such as consensus, fault-tolerance, and distributed coordination.
Provides a practical introduction to cloud computing, covering topics such as cloud architecture, cloud services, and cloud security.
Provides a comprehensive introduction to cloud computing, covering topics such as cloud architectures, cloud services, and cloud security.
Provides a comprehensive overview of big data analytics, covering topics such as big data architectures, data mining techniques, and data visualization.
Provides a comprehensive overview of Apache Kafka, a distributed streaming platform.
Provides a comprehensive introduction to Apache Spark, a popular open-source distributed computing framework.

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 2.
Cloud Computing Concepts, Part 1
Most relevant
Distributed Systems & Cloud Computing with Java
Most relevant
Cloud Computing Applications, Part 2: Big Data and...
Modern Distributed Systems
Data Manipulation at Scale: Systems and Algorithms
Introduction to Microsoft Orleans
Blockchain Scalability and its Foundations in Distributed...
C Programming: Modular Programming and Memory Management ...
C Programming: Language Foundations - 2
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