Khoá học Scalability & System Design for Developers được soạn vô cùng chi tiết bởi Educative.io. Một nền tảng học lập trình Online rất chất lượng cho Developer hiện nay.
Khoá học gồm 5 phần, mỗi phần có các chủ đề tương ứng từ cơ bản đến nâng cao dành cho bất cứ ai muốn hiểu sâu về System Design.
Xem thêm: Có nên học lập trình trên Educative.io không?
Phần 1: Web Application & Software Architecture
1. Different Tiers in Software Architecture
- Introduction
- Single-Tier Applications
- Two-Tier Applications
- Three-Tier Applications
- N-Tier Applications
- Different Tiers in Software Architecture Quiz
2. Web Architecture
- What is Web Architecture?
- Client-Server Architecture
- Client
- Types of Clients
- Server
- Communication Between the Client and the Server
- Web Architecture Quiz – Part 1
- What is a REST API?
- HTTP Push and Pull – Introduction
- HTTP Pull – Polling With AJAX
- HTTP Push
- HTTP Push-Based Technologies
- Client-Side vs. Server-Side Rendering
- Web Architecture Quiz – Part 2
3. Scalability
- What is Scalability?
- Types of Scalability
- Which Scalability Approach is Right for our App?
- Primary Bottlenecks That Hurt the Scalability of our Application
- How to Improve and Test the Scalability of our Application?
- Scalability Quiz
4. High Availability
- What is High Availability?
- Reasons For System Failures
- Achieving High Availability – Fault Tolerance
- Redundancy
- Replication
- High Availability Clustering
- High Availability Quiz
5. Load Balancing
- Introduction to Load Balancing
- Understanding DNS – Part 1
- Understanding DNS – Part 2
- DNS Load Balancing
- Load Balancing Methods
- Load Balancing Quiz
6. Monolith & Microservices
- What is Monolithic Architecture?
- When should you pick a Monolithic Architecture?
- What is Microservice Architecture?
- When should you pick Microservices Architecture?
- Monolith and Microservices– Understanding the Trade-Offs – Part 1
- Monolith and Microservices– Understanding the Trade-Offs – Part 2
- Monolith and Microservices Quiz
7. Micro Frontends
- Introduction to Micro Frontends
- The Need For Micro Frontends
- Micro Frontends Integration
8. Database
- Introduction and Types of Data
- Relational Databases
- When should you pick a relational database?
- NoSQL Databases – Introduction
- Features of NoSQL Databases
- When to pick a NoSQL Database?
- Is NoSQL More Performant Than SQL?
- Database Quiz – Part 1
- Polyglot Persistence
- Multi-Model Databases
- Eventual Consistency
- Strong Consistency
- CAP Theorem
- Database Quiz – Part 2
- Types of Databases
- Document-Oriented Database
- Graph Database
- Key-Value Database
- Time Series Database
- Wide-Column Database
- Database Quiz – Part 3
9. Caching
- Introduction
- Do I Need A Cache?
- Reducing the Application Deployment Costs via Caching
- Caching Strategies
- Caching Quiz
10. Message Queue
- Introduction to Message Queues
- Publish-Subscribe Model
- Point-to-Point Model
- Notification Systems and Real-Time Feeds with Message Queues
- Handling Concurrent Requests with Message Queues
- Message Queue Quiz
11. Stream Processing
- Introduction
- Data Ingestion
- Different Ways of Ingesting Data and the Challenges Involved
- Data Ingestion Use Cases
- Data Pipelines
- Distributed Data Processing
- Lambda Architecture
- Kappa Architecture
- Stream Processing Quiz
12. More On Architecture
- Event-Driven Architecture – Part 1
- Event-Driven Architecture – Part 2
- Webhooks
- Shared-Nothing Architecture
- Hexagonal Architecture
- More on Architecture Quiz – Part 1
- Peer-to-Peer Architecture – Part 1
- Peer-to-Peer Architecture – Part 2
- Decentralized Social Networks
- Federated Architecture
- More on Architecture Quiz – Part 2
13. Picking the Right Technology
- How to Pick the Right Server-Side Technology?
- Key Things to Remember When Picking the Tech Stack
14. Case Studies
- A Web-Based Mapping Service Like Google Maps
- A Baseball Game Ticket Booking Web Portal
15. Mobile Apps
- Introduction
- Before You Design Your Mobile App
- Responsive Interfaces
- Types of Mobile Apps – Part 1
- Types of Mobile Apps – Part 2
- Choosing Between a Native and a Hybrid App
- Progressive Web Apps
- Mobile Backend as a Service
Phần 2: An Introduction to Microservice Principles and Concepts
1. Microservices
- Introduction
- Advantages
- Advantage: Continuous Delivery
- More on Advantages
- Tradeoffs, Prioritizing Advantages, & Levels
- Challenges
2. Micro and Macro Architecture
- Introduction
- Domain-Driven Design & Bounded Contexts
- Strategic Design & Common Patterns
- Architecture Decisions
- Operation: Micro or Macro Architecture?
- Give a Preference to Micro Architecture!
- Organizational Aspects
- Independent Systems Architecture Principles
- Variations
3. Migration
- Introduction
- Reasons for Migrating
- Typical Migration Strategies
- Alternative Strategies
- Build, Operation, and Organization
- Variations
4. Docker
- Introduction
- Docker for Microservices: Reasons
- Docker Basics
- Dockerfiles
- Docker Compose
- Variations
5. Technical Micro Architecture
- Introduction
- Requirements
- Reactive Programming
- Spring Boot
- Spring Boot Starter Web as Single Dependency
- Spring Boot for Microservices: Communication
- Other Communication APIs Supported by Spring
- Spring Boot for Microservices: Operation
- Spring Boot for Microservices: New Microservices & Resilience
- Go
- Go for Microservices?
- Variations
Phần 3: Microservice Architecture: Practical Implementation
1. Self-contained Systems
- Introduction
- Definition
- An Example
- SCSs and Microservices
- Challenges
- Benefits & Variations
2. Concept: Frontend Integration
- Introduction
- Frontend: Monolith or Modular?
- Options
- Resource-oriented Client Architecture (ROCA)
- Benefits of ROCA
- Challenges
- Benefits
- Variations
3. Recipe: Links and Client-side Integration
- Introduction
- Overview
- Integration in Assurance App
- Other Integration Methods
- Example
- Variations
- Experiments
4. Recipe: Server-side Integration using Edge Side Includes (ESI)
- Introduction
- Example
- Varnish
- ESI in Order & Common
- Variations
- Experiments
5. Concept: Asynchronous Microservices
- Introduction
- Definition
- Data Replication, Bounded Contexts, & Protocols
- Events
- Event Sourcing
- Challenges: Inconsistencies & CAP Theorem
- More on Inconsistencies
- Other Challenges
- Advantages & Variations
6. Recipe: Messaging and Kafka
- Introduction
- Message-oriented Middleware (MOM)
- The Architecture of Kafka
- More on The Architecture of Kafka
- Even More on The Architecture of Kafka
- Events with Kafka
- Example: Introduction
- Example: Data Model
- Example: Technical Structure & Live App
- Example: Topics & Partitions
- Example: Testing & Other Data Formats
- Variations & Experiments
7. Recipe: Asynchronous Communication with Atom and REST
- Introduction
- The Atom Format
- Atom Caching
- Example
- Variations
- Experiments
8. Concept: Synchronous Microservices
- Introduction
- Definition
- Example
- Benefits & Challenges
- Variations
9. Recipe: REST with the Netflix Stack
- Introduction
- Example
- Eureka: Service Discovery
- Router: Zuul
- Load Balancing: Ribbon
- Resilience: Hystrix
- Resilience: Hystrix Implementation
- Variations
- Experiments
10. Recipe: REST with Consul and Apache httpd
- Introduction
- Example
- Service Discovery
- Routing: Apache httpd
- Consul Template
- Consul and Spring Boot
- DNS and Registrator
- Variations
- Experiments
11. Concept: Microservices Platforms
- Introduction
- Definition
- Variations
12. Recipe: Docker Containers with Kubernetes
- Introduction
- The Example with Kubernetes
- The Example in Detail
- Additional Kubernetes Features
- Variations
- Experiments
13. Recipe: PaaS with Cloud Foundry
- Introduction
- PaaS: Definition
- Cloud Foundry
- The Example with Cloud Foundry
- Variations & Experiments
- Serverless
Phần 4: Grokking Modern System Design Interview
1. Introduction
- Introduction to Modern
- System Design
- Course Structure for Modern System Design
2. System Design Interviews
- What Is a System Design Interview?
- How to Prepare for Success
- How to Perform Well
3. Abstractions
- Why Are Abstractions Important?
- Network Abstractions: Remote Procedure Calls
- Spectrum of Consistency Models
- The Spectrum of Failure Models
4. Non-functional System Characteristics
- Availability
- Reliability
- Scalability
- Maintainability
- Fault Tolerance
5. Back-of-the-envelope Calculations
- Put Back-of-the-envelope
- Numbers in Perspective
- Examples of Resource Estimation
6. Building Blocks
- Introduction to Building Blocks for Modern System Design
7. Domain Name System
- Introduction to Domain Name System (DNS)
- How the Domain Name System Works
8. Load Balancers
- Introduction to Load Balancers
- Global and Local Load Balancing
- Advanced Details of Load Balancers
9. Databases
- Introduction to Databases
- Types of Databases
- Data Replication
- Data Partitioning
- Trade-offs in Databases
10. Key-value Store
- System Design: The Key-value Store
- Design of a Key-value Store
- Ensure Scalability and Replication
- Versioning Data and Achieving Configurability
- Enable Fault Tolerance and Failure Detection
11. Content Delivery Network (CDN)
- System Design: The Content Delivery Network (CDN)
- Introduction to a CDN
- Design of a CDN
- In-depth Investigation of CDN: Part 1
- In-depth Investigation of CDN: Part 2
- Evaluation of CDN’s Design
- Quiz on CDN’s Design
12. Sequencer
- System Design: Sequencer
- Design of a Unique ID Generator
- Unique IDs with Causality
13. Distributed Monitoring
- System Design: Distributed Monitoring
- Introduction to Distributed Monitoring
- Prerequisites of a Monitoring System
14. Monitor Server-side Errors
- Design of a Monitoring System
- Detailed Design of a Monitoring System
- Visualize Data in a Monitoring System
15. Monitor Client-side Errors
- Focus on Client-side Errors in a Monitoring System
- Design of a Client-side Monitoring System
16. Distributed Cache
- System Design: The Distributed Cache
- Background of Distributed Cache
- High-level Design of a Distributed Cache
- Detailed Design of a Distributed Cache
- Evaluation of a Distributed Cache’s Design
- Memcached versus Redis
17. Distributed Messaging Queue
- System Design: The Distributed Messaging Queue
- Requirements of a Distributed Messaging Queue’s Design
- Considerations of a Distributed Messaging Queue’s Design
- Design of a Distributed Messaging Queue: Part 1
- Design of a Distributed Messaging Queue: Part 2
- Evaluation of a Distributed Messaging Queue’s Design
- Quiz on the Distributed Messaging Queue’s Design
18. Pub-sub
- System Design: The Pub-sub Abstraction
- Introduction to Pub-sub
- Design of a Pub-sub System
19. Rate Limiter
- System Design: The Rate Limiter
- Requirements of a Rate Limiter’s Design
- Design of a Rate Limiter
- Rate Limiter Algorithms
- Quiz on the Rate Limiter’s Design
20. Blob Store
- System Design: A Blob Store
- Requirements of a Blob Store’s Design
- Design of a Blob Store
- Design Considerations of a Blob Store
- Evaluation of a Blob Store’s Design
- Quiz on the Blob Store’s Design
21. Distributed Search
- System Design: The Distributed Search
- Requirements of a Distributed Search System’s Design
- Indexing in a Distributed Search
- Design of a Distributed Search
- Scaling Search and Indexing
- Evaluation of a Distributed Search’s Design
22. Distributed Logging
- System Design: Distributed Logging
- Introduction to Distributed Logging
- Design of a Distributed Logging Service
23. Distributed Task Scheduler
- System Design: The Distributed Task Scheduler
- Requirements of a Distributed Task Scheduler’s Design
- Design of a Distributed Task Scheduler
- Design Considerations of a Distributed Task Scheduler
- Evaluation of a Distributed Task Scheduler’s Design
24. Sharded Counters
- System Design: The Sharded Counters
- High-level Design of Sharded Counters
- Detailed Design of Sharded Counters
- Quiz on the Sharded Counters’ Design
25. Concluding the Building Blocks Discussion
- Wrapping Up the Building Blocks Discussion
- The RESHADED Approach for System Design
26. Design YouTube
- System Design: YouTube
- Requirements of YouTube’s Design
- Design of YouTube
- Evaluation of YouTube’s Design
- The Reality Is More Complicated
- Quiz on YouTube’s Design
27. Design Quora
- System Design: Quora
- Requirements of Quora’s Design
- Initial Design of Quora
- Final Design of Quora
- Evaluation of Quora’s Design
28. Design Google Maps
- System Design: Google Maps
- Requirements of Google Maps’ Design
- Design of Google Maps
- Challenges of Google Maps’ Design
- Detailed Design of Google Maps
- Evaluation of Google Maps’ Design
29. Design a Proximity Service / Yelp
- System Design: Yelp
- Requirements of Yelp’s Design
- Design of Yelp
- Design Considerations of Yelp
- Quiz on Yelp’s Design
30. Design Uber
- System Design: Uber
- Requirements of Uber’s Design
- High-level Design of Uber
- Detailed Design of Uber
- Payment Service and Fraud Detection in Uber Design
- Evaluation of Uber’s Design
- Quiz on Uber’s Design
31. Design Twitter
- System Design: Twitter
- Requirements of Twitter’s Design
- High-level Design of Twitter
- Detailed Design of Twitter
- Client-side Load Balancer for Twitter
- Quiz on Twitter’s Design
32. Design Newsfeed System
- System Design: Newsfeed System
- Requirements of a Newsfeed System’s Design
- Design of a Newsfeed System
- Evaluation of a Newsfeed System’s Design
33. Design Instagram
- System Design: Instagram
- Requirements of Instagram’s Design
- Design of Instagram
- Detailed Design of Instagram
- Quiz on Instagram’s Design
34. Design a URL Shortening Service / TinyURL
- System Design: TinyURL
- Requirements of TinyURL’s Design
- Design and Deployment of TinyURL
- Encoder for TinyURL
- Evaluation of TinyURL’s Design
- Quiz on TinyURL’s Design
35. Design a Web Crawler
- System Design: Web Crawler
- Requirements of a Web Crawler’s Design
- Design of a Web Crawler
- Design Improvements of a Web Crawler
- Evaluation of Web Crawler’s Design
36. Design WhatsApp
- System Design: WhatsApp
- Requirements of WhatsApp’s Design
- High-level Design of WhatsApp
- Detailed Design of WhatsApp
- Evaluation of WhatsApp’s Design
- Quiz on WhatsApp’s Design
37. Design Typeahead Suggestion
- System Design: The Typeahead Suggestion
- SystemRequirements of the Typeahead Suggestion System’s Design
- High-level Design of the Typeahead Suggestion System
- Data Structure for Storing Prefixes
- Detailed Design of the Typeahead Suggestion System
- Evaluation of the Typeahead Suggestion System’s Design
- Quiz on the Typeahead Suggestion System’s Design
38. Design a Collaborative Document Editing Service / Google Docs
- System Design: Google Docs
- Requirements of Google Docs’ Design
- Design of Google Docs
- Concurrency in Collaborative Editing
- Evaluation of Google Docs’ Design
39. Spectacular Failures
- Introduction to Distributed System Failures
- Facebook, WhatsApp, Instagram, Oculus Outage
- AWS Kinesis Outage Affecting Many Organizations
- AWS Wide Spread Outage
40. Concluding Remarks
- Conclusions
Phần 5: The Good Parts of AWS: Cutting Through the Clutter
1. Part 1: The Good Parts
- The Default Heuristic
- Database: DynamoDB
- Storage: S3
- Compute: EC2
- Compute: EC2 Auto Scaling
- Compute: Lambda
- Networking & Content Delivery: ELB
- Networking & Content Delivery: Route 53
- Management & Governance: CloudFormation
- Application Integration: SQS
- Media Service: Kinesis
- Quiz – Basic AWS Services
2. Part 2: The Bootstrap Guide
- Starting from Scratch: Basic Web Application
- Starting from Scratch: Manual AWS Infrastructure
- Infrastructure as Code: Create CloudFormation Stack
- Infrastructure as Code: Deploy CloudFormation Stack
- Automatic Deployments: CodeBuild
- Automatic Deployments: Install CodeDeploy Agent on EC2
- Automatic Deployments: Create a CodePipeline
- Load Balancing: Add a second EC2 Instance
- Load Balancing: Add an Application Load Balancer
- Scaling: Add an Auto Scaling Group
- Scaling: Remove Instances
- Production: Add Stack Name to our Application
- Production: Create Staging Stack
- Production: Create Production Stack
- Custom Domains: Register Domain with Route 53
- Custom Domains: Map our Domain to Load Balancers
- HTTPS: Create a TLS Certificate
- HTTPS: Add an HTTPS Endpoint
- HTTPS: Make the Application Speak HTTPS
- Network Security: Set up SSM for SSH Access
- Network Security: Add Private Subnets with NAT Gateway
- Network Security: Enabling HTTPS port in Public Subnets
Nguồn nội dung bài học: Educative.io