System Design Interview part 0

У цій частині я коротко розповім про найважливіше, що треба знати перед проходженням інтерв’ю з системного дизайну.

1. Числа та терміни

Почнемо з основного які числа треба знати (̶о̶ ̶н̶і̶ ̶з̶н̶о̶в̶у̶ ̶м̶а̶т̶а̶н̶)̶

📏 Одиниці виміру даних

Назва

Скорочення

Формула

У байтах

Байт

B

1 B

Кілобайт

KB

1 KB = 1024 B

1,024 B

Мегабайт

MB

1 MB = 1024 KB

1,048,576 B

Гігабайт

GB

1 GB = 1024 MB

1,073,741,824 B

Терабайт

TB

1 TB = 1024 GB

1,099,511,627,776 B

⏱ Latency Numbers

Операція

Приблизна затримка

🧮 CPU L1 cache access

0.5 ns

🧮 CPU L2 cache access

7 ns

🧠 Main memory (RAM) access

100 ns

🔁 Mutex lock/unlock (в одному треді)

25 ns – 1 µs

📦 SSD I/O (NVMe, local)

10–100 µs

🧳 SSD I/O (SATA)

100–500 µs

💽 HDD I/O (seek)

~10 ms

🔌 Network: 1 Gbps (loopback)

~0.5 ms

🌐 Data center to same-region server (ping)

0.5–1 ms

🌍 Data center to another region (US–EU)

70–150 ms

✈️ Transcontinental RTT

~150–250 ms

☁️ Lambda cold start

~100 ms – few sec

⏱ Context switch (kernel ↔ user)

~1 µs – 5 µs

💬 Redis read (local network)

~1 ms

💾 DB query (simple SELECT, indexed)

~1–10 ms

📤 Kafka publish (no replication, async)

~1 ms

💡 Висновки:

  • Пам’ять — дуже швидка, диск — дуже повільний.

  • Уникай доступів до диска без потреби.

  • Стискай дані перед передачею.

  • Міжрегіональна передача — дорога по часу.

✅ Таблиця доступності (SLA)

SLA (доступність)

Дозволений час простою на рік

На місяць

На тиждень

На день

90.0% ("одна дев’ятка")

~36.5 днів

~72 год

~16.8 год

~2.4 год

99.0%

~3.65 днів

~7.2 год

~1.68 год

~14.4 хв

99.9% ("три дев’ятки")

~8.76 год

~43.8 хв

~10.1 хв

~1.44 хв

99.99% ("чотири дев’ятки")

~52.6 хв

~4.4 хв

~1 хв

~8.6 сек

99.999% ("п’ять дев’яток")

~5.26 хв

~26.3 сек

~6 сек

~0.86 сек

99.9999% ("шість дев’яток")

~31.5 сек

~2.6 сек

~0.6 сек

~0.086 сек

SLA до 99.0%

(до ~3.5 днів простою на рік)
Підійде для внутрішніх систем, MVP або некритичних сервісів.

  • Один інстанс сервісу

  • Проста БД без реплікації

  • Резервне копіювання (раз на добу або тиждень)

  • Мінімальний моніторинг (health-check)

SLA 99.9% (три дев’ятки)

(~9 год на рік простою)
Підходить для SaaS, мобільних застосунків, бізнес-критичних API.

  • Горизонтальне масштабування (щонайменше 2 інстанси)

  • Load Balancer (наприклад, NGINX, ALB)

  • Високодоступна БД: реплікація, автоматичне відновлення (RDS Multi-AZ, Mongo ReplicaSet)

  • Моніторинг та алертинг (Prometheus, Grafana, PagerDuty)

  • Zero-downtime деплой (blue/green, canary)

SLA 99.99% і вище

(<1 год простою на рік)
Вимагається у банківських, медичних системах, хмарних платформах, біржах.

  • Мультирегіональна розгорнута інфраструктура

  • Автоматичне виявлення збоїв + самовідновлення

  • Розподілені черги (Kafka, SQS) + ретраї

  • DB Failover + шардінг

  • Кешування для захисту від “thundering herd” (Redis, CDN)

  • Chaos Engineering: імітація відмов для тестування стійкості (Netflix's Simian Army)

  • Бізнес-логіка, що вміє "гречно падати" (graceful degradation)

  • SLO/SLA дашборди + регулярний аудит доступності

🔤 Популярні терміни

  • QPS — queries per second

  • DAU — daily active users

  • SLA — service level agreement

  • RPS — requests per second

2. Інструменти для малювання архітектури

Де б̶л̶*̶ть̶ малювати? 👀
  • Excalidraw — рекомендую. Простий, з готовими бібліотеками (System Design Components → Browse Libraries. Або просто пере ходиш за цим посиланням 🙂).

  • Draw.io

  • Miro

  • Figma

3. Етапи інтерв’ю

  1. 📋 Знайомство з задачею

  2. 🔍 Збір вимог (функціональні й нефункціональні)

  3. 🧱 Високорівневе проєктування

  4. 🔬 Занурення у складні компоненти

  5. 📑 Перевірка сценаріїв

  6. Q&A по схемі

  7. Фіналізація

Зазвичай інтерв’ювер дає якесь абстрактне завдання наприклад імплементуй твітер. Твоє завдання на цьому етапі це зібрати функціональні та нефункціональні вимоги.

Наприклад

Функціональні вимоги:

  1. Постити твіти

  2. Читати твіти

На цьому функціональні вимоги не закінчуються потрібно дізнатися скільки постів буде робити людина в день, яка кількість активних користувачів, який розмір твіта, як довго потрібно зберігати твіти?

Нефукціональні вимоги:

  1. Доступність або консистентність? Я думаю ти здогадався що в цьому випадку краще мати високу доступність а ніж консистентність. Нічого страшного якщо Іван отримає твіт через 5 хвилин а Сергій через 5 секунд.

  2. Продуктивність - яка має бути API latency?

  3. Масштабованість - скількох активних юзерів має підтримувати система?

  4. Надійність - тут можна запитати про репліку, підтримка failover короче наш SLA

Коли ти це все зібрав можна зробити оцінку та почати малювати схему.

4. Типові помилки на інтерв’ю

1. ⚠️ Зібрав вимоги — і забув про них

Кандидати часто задають правильні питання: про навантаження, обсяг даних, SLA. Але після цього — жодного використання зібраної інформації.

Наприклад: кандидат питає, скільки буде RPS на читання і на запис. Якщо відповідь: читання — 10k RPS, запис — 100 RPS, то логічно проєктувати окремі entry points, кешування на читання, пріоритетність ресурсів, можливо навіть відмовитися від синхронного запису. Якщо ж ці цифри не використовуються — питання було даремним.

Навіть запит типу: «Який час життя даних?» може дати багато: якщо дані можна видаляти через 30 днів — це знімає частину обов’язків зі зберігання. Якщо можна втрачати дані — можлива агресивніша оптимізація. Ігнорування таких відповідей призводить до архітектури, що не відповідає задачі.

2. 🤯 Намагання зробити все і одразу

Стрибки від теми до теми, надмірне говоріння, відсутність структури. Без чіткого плану кандидат "захлинається" в деталях. Тож дотримуйся структури інтерв’ю.

3. 🚀 Розширення меж системи без потреби

Іноді кандидат вирішує: "О, я знаю як зробити ще краще!" — і починає проектувати фічі, про які не йшлося у вимогах. Це розфокусовує. Краще зосередитися на вирішенні поточної задачі, а додаткові ідеї — записати в окремий список «на потім». Це дозволяє показати широту мислення без шкоди глибині рішення.

4. 🚫 2 RPS

Бізнес не завжди потребує гугл-архітектури. Часто — це MVP або модульний моноліт, що росте поступово. Якщо проектувати систему одразу як "мільярдний" продукт — це показує нерозуміння еволюційної природи систем.

5. 🤔 Цитування книжок без розуміння

Фрази типу: "використаємо консистентне хешування" — але без здатності пояснити, як воно працює. Оперуй знаннями якими володієш.

6. ❌ Втрата даних між системами

Якщо сервіси спілкуються напряму або черги додані без гарантій — є ризик втратити події. Варто одразу продумати ідентіфікатори, ідемпотентність, логування, підтвердження доставки.

7. 📃 Довгострокове зберігання

Через роки система буде містити архіви, логи, старі записи. Без плану архівації, розділення гарячих/холодних даних — система перестане масштабуватись. Шардування, cold storage, lifecycle policy — необхідні речі.

8. 📁 База даних — для всього

PostgreSQL не має зберігати зображення, обробляти повнотекстовий пошук і ще бути основною OLTP системою. Кожен інструмент має своє призначення. Наприклад: зображення краще зберігати через CDN (S3 + CloudFront), для пошуку використати Elasticsearch або OpenSearch, для черг — Kafka або RabbitMQ. Не зловживати універсальністю — обирайте інструмент за потребою.

9. ⚖️ Абстрактні компоненти

Система наче складається з "сервісів", але де вони будуть запущені? У хмарі? У Kubernetes? Bare metal? Який CI/CD, як деплоїти, які залежності? Інтерв'юер хоче бачити реалізовувану архітектуру.

10. ❗️Тільки технічний моніторинг

Моніторити CPU — це добре. Але користувачу байдуже. Треба бачити кількість твіти, які не дійшли, або час реакції на натискання кнопки. Важливі метрики — продуктові.

11. 🔢 Рішення у лоб

"Так, тут Redis, тут Kafka, тут Postgres, і все працює" — ок. А чому Redis, а не Memcached? Чому Kafka, а не SQS? Відсутність порівнянь і trade-offs — це мінус. Очікується аналітичне мислення, оцінка варіантів.

Підписуйся на мене і ми разом пройдемо еволюцію від цього:

До цього:

Мені було ліньки малювати щось більше :) в наступних статтях намалюю краще

Хочеш мене підтримати підписуйся на мій патреон:

Список джерел
  1. Alex Xu, System Design
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Сергій Барабаш
Сергій Барабаш@sbarabash

89Прочитань
1Автори
2Читачі
На Друкарні з 30 березня

Більше від автора

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається