Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як грубо оцінити навантаження й ресурси системи (back-of-the-envelope)?

Оцінка «на серветці» - швидкий розрахунок порядків величин до проєктування: скільки запитів на секунду, скільки даних, скільки серверів. Мета - не точність, а розуміння, чи це задача для одного сервера чи для розподіленої системи.

Приклад: сервіс коротких посилань.

1. Припущення:

  • 1 млн нових посилань на день;
  • переходів у 100 разів більше - 100 млн на день;
  • один запис - ~500 байтів (URL, код, метадані).

2. Запити на секунду (у добі ~86 400 с, для простоти ~100 000):

  • записи: 1 млн / 100 000 ≈ 10 на секунду;
  • читання: 100 млн / 100 000 ≈ 1000 на секунду;
  • піки - у 3-5 разів вище середнього: до 5000 читань на секунду.

3. Сховище:

  • 1 млн × 500 байтів = 500 МБ на день;
  • × 365 × 5 років ≈ ~1 ТБ за п'ять років.

4. Висновки:

  • 10 записів на секунду - тривіально для однієї бази;
  • 5000 читань на секунду на простий пошук за ключем - під силу одній базі з індексом, але кеш (Redis) перед нею майже повністю прибере навантаження: популярні посилання - мала частка всіх;
  • 1 ТБ за 5 років - одна база, без шардингу.

Корисні числа, які варто пам'ятати (порядки):

Операція Порядок
читання з пам'яті наносекунди
запит до Redis у тій самій мережі ~0,5-1 мс
простий запит до бази за індексом ~1 мс
запит між дата-центрами десятки мс
процес PHP на запит десятки мс і МБ пам'яті

Чому це цінно на співбесіді: показує, що архітектурні рішення спираються на цифри. Часто розрахунок доводить, що «складна розподілена система» не потрібна - вистачить одного сервера з кешем.

Типові помилки: не враховувати піки (середнє оманливе), забувати про репліки й бекапи в обсязі сховища, ігнорувати співвідношення читань і записів.

Докладніше в документації: System Design Primer: оцінки

Схожі питання