We may earn an affiliate commission when you visit our partners.
NewTechWays - Anurag Yadav

The best way to learn software development is to write code. The best way to learn software architecture is to build and run a system. This is exactly what you are going to do as part of this course.

This course is the next in the series of Developer to Architect courses. The previous course 'Software Architecture & Technology of Large-Scale Systems' was focused on the concepts and principles of software architecture that govern modern large-scale systems.

Read more

The best way to learn software development is to write code. The best way to learn software architecture is to build and run a system. This is exactly what you are going to do as part of this course.

This course is the next in the series of Developer to Architect courses. The previous course 'Software Architecture & Technology of Large-Scale Systems' was focused on the concepts and principles of software architecture that govern modern large-scale systems.

This course 'Hands-On Implementation of Large-Scale Software Architecture', is focused on implementing those software and solution architecture principles in a mock large-scale system (mini system or simply minisys) by using open source technologies.

It starts with a downloadable code base of a mini system. We evolve this mini system into a full-fledged large-scale system implementation as we move along with the course. Our goal is to learn the typical architectural challenges that are faced by any large-scale system and solve these challenges using modern tools, technologies, and methods.

You can learn about these challenges and their solutions by actually working on a live system. For the same, you can download a mini system code-base provided by NewTechWays on Bitbucket or Github. You can follow the instructions to download, build and run this codebase. Although the instructions and code automation is platform-agnostic, this course will make use of Google Cloud Platform using a Linux machine as our test environment for building and running the system. Later we will put our system in a Production kind of environment using Kubernetes on Google Cloud Platform.   

As we move along with this course we will cover the following architectural challenges and use the following technologies as their solutions:

  • 3 Tier Application

    • Webapp – Python Django

    • RESTful Service – Java Spring Boot

    • Database – PostgreSQL & Cassandra

    • SPA - ReactJS

  • Containerization of System

    • Docker Containers

    • Docker Compose

  • Request Routing in Microservices

    • Discovery – Netflix Eureka

    • Gateway – Netflix Zuul

    • Client-Side Load Balancer – Ribbon

    • Server-Side Load Balancer - Nginx

  • System Observability

    • Logging – Elasticsearch, Fluent, Kibana

    • Tracing - Jaeger

    • Monitoring & Alerts – Prometheus

  • Large-scale Data Management

    • Caching - Redis

    • Asynchronous Processing - RabbitMQ

    • Horizontal Data Partitioning - Cassandra

  • Production Deployment

    • Cloud Deployment – Kubernetes on GCP

    • Auto-scaling – Kubernetes

    • High Availability - Kubernetes

    • Rolling Upgrades - Kubernetes

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Learning objectives

  • Understand through code, the architectural challenges of developing large-scale systems - scalability, reliability, deployment, observability
  • Code implementation of various tools and technologies used for making large-scale systems - redis, rabbitmq, netflix, fluentd, elasticsearch, kubernetes & more
  • Downloadable code along with configuration, scripts and instructions to run a mini system on your laptop and on a cloud environment
  • A practical demonstration of how systems are scaled and operated on both on-premises environment and in cloud environments

Syllabus

Course Overview
Introduction
Course Content Pdf
Work Environment Setup
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Uses Python Django, Java SpringBoot, and ReactJS, which are valuable for full-stack developers aiming to build scalable web applications
Employs Docker and Kubernetes, which are essential skills for deploying and managing containerized applications in modern cloud environments
Explores system observability with Elasticsearch, Fluentd, Kibana (EFK), Jaeger, and Prometheus, which are critical for monitoring and troubleshooting large-scale systems
Covers data management with Redis, RabbitMQ, and Cassandra, which are useful for handling caching, asynchronous processing, and horizontal data partitioning
Requires using Google Cloud Platform and a Linux machine, which may present a barrier to learners unfamiliar with these environments
Relies on Netflix Eureka and Zuul, which, while functional, are no longer under active development by Netflix, potentially posing maintainability challenges

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Practical large-scale system architecture implementation

According to learners, this course provides a highly practical approach to understanding and implementing software architecture for large-scale systems. It offers hands-on experience by building a mini-system and tackling typical architectural challenges using a wide range of modern technologies like Docker, Kubernetes, and the EFK stack. While the downloadable codebase and clear instructions are helpful, some learners may find the environment setup complex or require prior foundational knowledge in architecture or specific technologies to fully benefit from the implementation details.
Builds on prior architecture knowledge.
"I benefited greatly from having taken the previous course."
"Recommend having some basic dev/ops experience beforehand."
"This course is likely not for absolute beginners to system architecture."
A provided code base aids learning.
"Having the minisys code available made following along easy."
"The provided code was a great starting point for the labs."
"Could focus on architecture rather than writing boilerplate code."
Wide array of modern tools are covered.
"It was great to see Docker, K8s, Redis, and RabbitMQ integrated."
"Exposed me to technologies I'll likely encounter in production."
"A good overview of a typical large-scale tech stack was provided."
Learn by building and running a system.
"Building and running the mini-system was crucial to understanding."
"The practical exercises reinforced architectural concepts effectively."
"This hands-on approach is much better than just theoretical learning."
Setting up the necessary environment can be difficult.
"I struggled quite a bit with the initial VM and tool installations."
"Getting all the dependencies configured correctly took significant time."
"Requires careful attention and troubleshooting during setup."

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 Implementing Software Architecture of a Large-Scale System with these activities:
Brush up on Docker fundamentals
Reviewing Docker concepts will help you understand the containerization aspects of the course.
Browse courses on Docker
Show steps
  • Complete a Docker tutorial.
  • Practice building and running simple containers.
Review Spring Boot basics
Refreshing your knowledge of Spring Boot will make it easier to follow the service implementation sections.
Browse courses on Spring Boot
Show steps
  • Read the Spring Boot documentation.
  • Build a simple REST API with Spring Boot.
Read 'Building Microservices' by Sam Newman
Reading this book will provide a deeper understanding of the microservices concepts covered in the course.
Show steps
  • Read the book chapter by chapter.
  • Take notes on key concepts and examples.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Implement a simple microservice
Building a microservice will help you solidify your understanding of the concepts taught in the course.
Browse courses on Microservices
Show steps
  • Design a simple API.
  • Implement the API using Spring Boot or a similar framework.
  • Deploy the microservice to a container.
Document the architecture of the mini system
Documenting the architecture will force you to deeply understand the system's design and components.
Browse courses on Software Architecture
Show steps
  • Explore the mini system code base.
  • Create diagrams illustrating the system architecture.
  • Write a document describing the components and their interactions.
Read 'Kubernetes in Action' by Marko Lukša
Reading this book will provide a deeper understanding of Kubernetes and its role in deploying large-scale systems.
Show steps
  • Read the book chapter by chapter.
  • Experiment with the examples provided in the book.
Create a monitoring dashboard
Creating a monitoring dashboard will help you understand how to observe and manage a large-scale system.
Browse courses on Prometheus
Show steps
  • Set up Prometheus to collect metrics from the mini system.
  • Configure Grafana to visualize the metrics.
  • Create a dashboard that shows key performance indicators.
Contribute to an open-source project
Contributing to an open-source project will give you practical experience working on a real-world system.
Browse courses on Open Source
Show steps
  • Find an open-source project that uses the technologies covered in the course.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.

Career center

Learners who complete Implementing Software Architecture of a Large-Scale System will develop knowledge and skills that may be useful to these careers:
Software Architect
A Software Architect designs the structure of software systems, ensuring they meet functional and non-functional requirements. This course directly aligns with that role, as it emphasizes the hands-on implementation of software architecture principles in a mock large-scale system. The course explores architectural challenges and their solutions using modern tools, technologies, and methods, which is precisely what a Software Architect does. The practical experience of working with a live system, containerizing applications with Docker, dealing with microservices, and implementing distributed systems using Kubernetes, all build toward the skills one needs to be an effective Software Architect.
Cloud Solutions Architect
Cloud Solutions Architects design and implement cloud-based solutions. This course provides practical skills necessary to succeed in that role by working with Google Cloud Platform, demonstrating cloud deployment with Kubernetes, and highlighting auto-scaling and high-availability principles. The hands-on experience of building and running a system in the cloud, combined with the exploration of technologies such as Docker, Elasticsearch, and Prometheus, makes this course highly relevant for anyone looking to become a Cloud Solutions Architect. The focus on production deployment using Kubernetes further enhances a learner's readiness for the field.
DevOps Engineer
DevOps Engineers focus on automating and streamlining software development and deployment processes. This course is exceptionally useful for this role because it provides hands-on experience with containerization using Docker, managing microservices, setting up continuous integration/continuous deployment pipelines with Kubernetes, and implementing system observability with tools like Elasticsearch, Fluentd, and Kibana. Practical experience with the deployment of tools, services, and databases is extremely beneficial for a DevOps Engineer, learning how to manage large scale systems efficiently. The course provides skills to manage systems on both on-premise and cloud environments.
Systems Engineer
Systems Engineers work on the overall architecture and performance of computer systems. This course provides a hands-on approach, allowing participants to understand system components, architecture, and technology choices. It covers challenges related to scaling, reliability, and observability, which are core concerns for a Systems Engineer. The course's focus on containers, Kubernetes, and monitoring tools like Prometheus and Jaeger provides practical skills to resolve these issues. The process of building and running a live system from the code level is paramount and necessary knowledge for a Systems Engineer.
Backend Developer
Backend Developers build and manage the server-side logic of applications. This course is very useful since it deals directly with the technologies that a backend developer uses, especially those working with large, distributed systems. The course involves developing RESTful services with Java Spring Boot, using databases like PostgreSQL and Cassandra, and implementing asynchronous processing with RabbitMQ. The hands-on exploration of containerization, microservices, and data management is invaluable for any Backend Developer. The course helps build a foundation for understanding, building, and maintaining the back-end of large-scale systems.
Software Engineer
Software Engineers develop, test, and maintain software systems. This course offers practical experience in the full software development lifecycle, from initial code through deployment and monitoring. The course helps improve a Software Engineer's skill set with hands-on implementation of a mini system and addressing architectural challenges. The course covers a wide array of technologies like Python, Java, React, Docker, and Kubernetes are essential for a Software Engineer, especially for those involved in the development of large-scale systems. A course like this is crucial for any Software Engineer seeking practical, hands-on knowledge.
Solutions Engineer
Solutions Engineers work to understand and solve the technical challenges that customers face, which often includes implementing and deploying software. This course may help a Solutions Engineer, by providing in-depth, practical knowledge of building and deploying large-scale systems. The course covers a number of technologies that a Solutions Engineer would assist customers with, like Docker, Kubernetes, and cloud deployment on Google Cloud Platform. The hands-on approach to implementing all of these technologies, would help them more effectively communicate their value to end users.
Data Engineer
Data Engineers design, build, and maintain data pipelines and infrastructure. This course may be useful for a Data Engineer, by demonstrating a variety of data management techniques, particularly those relevant to large-scale systems. Data Engineers will learn how to manage data with Cassandra, how to cache with Redis, and how to implement asynchronous processing with RabbitMQ. This practical, hands-on experience with these technologies is valuable for any Data Engineer who needs to manage large amounts of data or needs to process streams of data efficiently.
Technical Lead
Technical Leads are responsible for guiding development teams and making key technical decisions. This course may be useful for a Technical Lead as it covers a wide range of technologies used in modern large-scale systems. The course provides practical experience in implementing architectural principles, dealing with microservices, and deploying systems using Kubernetes, which enhances their perspective. This course can help a Technical Lead to better understand and manage the teams they oversee. Working with a live system will deepen their knowledge.
Database Administrator
Database Administrators maintain and optimize database systems. This course may be useful for a Database Administrator because it explores database technologies like PostgreSQL and Cassandra, as well as caching with Redis. The course teaches about database schema, partitioning, and running highly available, distributed data clusters. While the course doesn't focus solely on administration, the hands-on experience with these databases is beneficial for a Database Administrator who wants to expand their skillset beyond just traditional relational databases.
Network Engineer
Network Engineers design and maintain computer networks. This course may be useful for a Network Engineer who wants to learn more about the technologies used in modern, large-scale software systems. The course introduces concepts such as request routing in microservices, load balancing, and service discovery. Additionally, the use of Kubernetes for deployment and networking provides relevant context. While not directly focused on networking, the course's coverage of network and distributed systems concepts would be a valuable complement to any Network Engineer's skillset.
IT Manager
IT Managers oversee an organization's technology infrastructure and operations. This course may be useful for an IT Manager, even if they aren't hands-on. The course provides a practical understanding of the technologies that form modern large-scale systems, such as cloud deployment, Kubernetes, and containerization with Docker. This general understanding will aid them in making better decisions regarding their organization's infrastructure. The course may not make them a technical expert, but will improve their understanding and insight into the systems their team runs.
Technical Project Manager
Technical Project Managers oversee and coordinate technology projects. This course may be useful to a Technical Project Manager, as it exposes them to the various challenges and technologies involved in developing large-scale systems. Although not directly relevant for day-to-day tasks, the practical experience with deployment, containerization, and other technologies will give them an understanding of the technical challenges that their teams are facing. This insight can help them better manage technical deadlines, and effectively communicate with team members.
Quality Assurance Engineer
Quality Assurance Engineers are responsible for testing software and ensuring its quality. This course may be useful to a Quality Assurance Engineer interested in understanding the complexities of large-scale systems, and how to test their performance. Testing large systems requires a broad and deep understanding of the components and architectural choices that go into their creation. This course would help a Quality Assurance Engineer gain that understanding by focusing on the hands-on aspects of implementation.
Business Analyst
Business Analysts analyze processes, systems, and data to improve organizational efficiency. This course may still be useful for a Business Analyst who works in a tech-heavy environment, especially if they want to better understand the technical challenges that their teams address. Though this course is highly technical, understanding all of the technologies that go into building a complex system will allow them to communicate more effectively with other members of the organization. The practical skills learned here may help them with this endeavor.

Reading list

We've selected two 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 Implementing Software Architecture of a Large-Scale System.
Provides a comprehensive guide to Kubernetes, covering everything from basic concepts to advanced deployment strategies. It is particularly useful for understanding the production deployment aspects of the course. This book is commonly used as a textbook at academic institutions and by industry professionals. It adds more depth to the Kubernetes section of the course.
Provides a comprehensive overview of microservices architecture, covering design principles, communication patterns, and deployment strategies. It offers valuable insights into the challenges and solutions discussed in the course. This book is highly recommended for anyone looking to deepen their understanding of microservices and their implementation in large-scale systems. It is commonly used as a reference by industry professionals.

Share

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

Similar courses

Similar courses are unavailable at this time. Please try again later.
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 - 2025 OpenCourser