Оцінка «на серветці» - швидкий розрахунок порядків величин до проєктування: скільки запитів на секунду, скільки даних, скільки серверів. Мета - не точність, а розуміння, чи це задача для одного сервера чи для розподіленої системи.
Приклад: сервіс коротких посилань.
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 на запит | десятки мс і МБ пам'яті |
Чому це цінно на співбесіді: показує, що архітектурні рішення спираються на цифри. Часто розрахунок доводить, що «складна розподілена система» не потрібна - вистачить одного сервера з кешем.
Типові помилки: не враховувати піки (середнє оманливе), забувати про репліки й бекапи в обсязі сховища, ігнорувати співвідношення читань і записів.