System Design for Interviews and Beyond

40 участников

О чём курс

Вам нужно спроектировать отказоустойчивую распределенную систему, которая выдержит миллионы запросов, но вы не знаете, с чего начать выбор архитектурных решений. Курс превращает абстрактные требования к системе в конкретные технические инструменты.

Внутри разбираются:

  • Фундаментальные показатели: от обеспечения высокой доступности и масштабируемости до правильного распределения данных через партиционирование.
  • Работа с данными: внутреннее устройство БД, сравнение LSM-деревьев и B-деревьев, использование индексов и кэширования.
  • Сетевые протоколы и коммуникация: выбор между синхронным и асинхронным взаимодействием, стратегии push/pull и реализация CDN.
  • Надежность и масштабируемость: обработка сбоев, стратегии повторных запросов, гарантии доставки сообщений и ребалансировка партиций.

Материал ориентирован на разработчиков, готовящихся к System Design интервью, и тех, кто хочет глубже понимать принципы построения высоконагруженных систем. Итогом станет понимание того, как выбирать архитектуру под конкретные бизнес-задачи и обосновывать каждое техническое решение.

Программа обучения

    1. Introduction
    • 1.1. Course introduction
    • 1.2. Who will benefit from the course and how
    • 1.3. Course overview
    1. How to define system requirements
    • 2.1. System requirements
    • 2.2. Functional requirements
    • 2.3. High availability
    • 2.4. Fault tolerance, resilience, reliability
    • 2.5. Scalability
    • 2.6. Performance
    • 2.7. Durability
    • 2.8. Consistency
    • 2.9. Maintainability, security, cost
    • 2.10. Summary of system requirements
    1. How to achieve certain system qualities with the help of hardware
    • 3.1. Regions, availability zones, data centers, racks, servers
    • 3.2. Physical servers, virtual machines, containers, serverless
    • 3.3. Fundamentals of reliable, scalable, and fast communication
    • 3.4. Synchronous vs asynchronous communication
    • 3.5. Asynchronous messaging patterns
    • 3.6. Network protocols
    • 3.7. Blocking vs non-blocking I/O
    • 3.8. Data encoding formats
    • 3.9. Message acknowledgment
    1. How to improve system performance with caching
    • 4.1. Deduplication cache
    • 4.2. Metadata cache
    1. The importance of queues in distributed systems
    • 5.1. Queue
    • 5.2. Full and empty queue problems
    • 5.3. Start with something simple
    • 5.4. Blocking queue and producer-consumer pattern
    • 5.5. Thread pool
    • 5.6. Big compute architecture
    1. Data store internals
    • 6.1. Log
    • 6.2. Index
    • 6.3. Time series data
    • 6.4. Simple key-value database
    • 6.5. B-tree index
    • 6.6. Embedded database
    • 6.7. RocksDB
    • 6.8. LSM-tree vs B-tree
    • 6.9. Page cache
    1. How to build efficient communication in distributed systems
    • 7.1. Push vs pull
    • 7.2. Host discovery
    • 7.3. Service discovery
    • 7.4. Peer discovery
    • 7.5. How to choose a network protocol
    • 7.6. Network protocols in real-life systems
    • 7.7. Video over HTTP
    • 7.8. CDN
    • 7.9. Push and pull technologies
    • 7.10. Push and pull technologies in real-life systems
    • 7.11. Large-scale push architectures
    1. How to deliver data reliably
    • 8.1. What else to know to build reliable, scalable, and fast systems
    • 8.2. Timeouts
    • 8.3. What to do with failed requests
    • 8.4. When to retry
    • 8.5. How to retry
    • 8.6. Message delivery guarantees
    • 8.7. Consumer offsets
    1. How to deliver data quickly
    • 9.1. Batching
    • 9.2. Compression
    1. How to deliver data at large scale
    • 10.1. How to scale message consumption
    • 10.2. Partitioning in real-life systems
    • 10.3. Partitioning strategies
    • 10.4. Request routing
    • 10.5. Rebalancing partitions
    • 10.6. Consistent hashing
Складчина создана 10 января 2023 г. · описание обновлено 23 марта 2026 г.
362 ₽ 6 193 ₽