Завдання №1
Конструювання програмного забезпечення
Мета
Сформулювати вимоги до власного сервісу, оцінити навантаження на нього та розрахувати вартість інфраструктури на горизонті 5 років.
Цю систему ви розвиватимете в наступних завданнях (бази даних, масштабування, кеш), тож обирайте ту, яка вам справді цікава.
Вибір системи
Оберіть сервіс, який ми не розбирали на лекції та занятті (сервіс коротких посилань, хостинг текстів, автодоповнення, хмарний диск, Instagram, Telegram, Twitter, Netflix, пошук ресторанів і таксі, онлайн-магазин). Наприклад:
- трекінг посилок служби доставки;
- продаж квитків на потяги чи концерти;
- доставка їжі;
- стрімінг музики;
- онлайн-навчання з відеокурсами;
- електронна черга до лікаря;
- мобільний банкінг;
- бронювання житла.
Орієнтири для розрахунків
Якщо у вас немає точніших даних, користуйтеся орієнтирами з лекції:
| Величина | Орієнтир |
|---|---|
| Доба | 86 400 с ≈ 105 с |
| 5 років | 1 825 днів ≈ 2 тис. днів |
| Байти й біти | 1 байт = 8 біт, тому 1 ГБ/с ≈ 8 Gbps |
| Мережа | 1 Gbps ≈ 10 ТБ на день ≈ 20 PB за 5 років |
| Ціна трафіку | вихідний ≈ $0.1 за 1 ГБ, вхідний зазвичай безкоштовний |
| Обчислення (одна машина в хмарі) | 100k RPS тексту, 10k RPS читань або 1k RPS записів у БД |
| Сховище | HDD ≈ $30/ТБ, SSD ≈ $300/ТБ, RAM ≈ $10 000/ТБ |
| Одна машина | 1 ТБ RAM, 50 ТБ SSD або 200 ТБ HDD |
| Пікове навантаження | у 2–3 рази більше за середнє |
| Реплікація | кожен об’єкт зберігається у 3 копіях |
| Одночасні користувачі (CCU) | DAU × середня тривалість сесії / 86 400 с |
| Відмови дисків | AFR ≈ 1–2% дисків на рік |
Розминка: знайдіть помилки 🕵️
Студент оцінює сервіс оголошень із фото. Його припущення:
- 20 млн DAU;
- кожен користувач переглядає 50 оголошень на день, в оголошенні 5 фото по 200 кБ;
- щодня додається 1 млн нових оголошень.
Його розрахунок:
- Читання: 20 млн × 50 / 86 400 с ≈ 11.6 тис. RPS.
- Мережа: 11.6 тис. RPS × 5 × 200 кБ ≈ 11.6 ГБ/с ≈ 11.6 Gbps.
- Сховище: 1 млн × 5 × 200 кБ = 1 ТБ на день, за 5 років — 1 ТБ × 30 × 5 = 150 ТБ.
- Вартість трафіку: завантаження фото — 150 ТБ × $0.1/ГБ = $15 тис.
У трьох рядках є помилки. Знайдіть їх, перш ніж відкривати відповідь.
- ✅ Правильно. Але це середнє навантаження: для пікового закладайте у 2–3 рази більше.
- ❌ 11.6 ГБ/с — це гігабайти за секунду, а пропускну здатність вимірюють у гігабітах: 11.6 × 8 ≈ 93 Gbps.
- ❌ 30 — це кількість днів у місяці, а не в році. За 5 років: 1 ТБ × 1 825 днів ≈ 1.8 PB, а з реплікацією ×3 — ≈ 5.5 PB.
- ❌ Вхідний трафік зазвичай безкоштовний, платимо за вихідний, тобто за перегляди: 20 млн × 50 × 5 × 200 кБ = 1 PB на день, за 5 років ≈ 1.8 EB, тобто ≈ $180 млн за прайсом $0.1/ГБ. Саме тому фото роздають через CDN, а в списку оголошень показують зменшені прев’ю.
Етапи
1. Межі системи
- Опишіть сервіс у 2–3 реченнях: для кого він і яку проблему розв’язує.
- Явно вкажіть, що не входить у проєкт (наприклад, для онлайн-магазину — доставка та логістика).
2. Функціональні вимоги
- Випишіть 4–6 основних можливостей системи й упорядкуйте їх за важливістю.
- Окремо перелічіть можливості, які свідомо винесено за межі першої версії, і поясніть чому.
3. Нефункціональні вимоги
- Сформулюйте їх так, щоб їх можна було перевірити: не «система працює швидко», а «сторінка товару відкривається не довше ніж за 200 мс для 99% запитів».
- Для 2–3 ключових операцій (наприклад, оплата і перегляд каталогу) визначте, що важливіше під час збою мережі — консистентність чи доступність, і поясніть вибір через CAP-теорему.
4. Припущення про трафік
- Визначте MAU, DAU, скільки і яких об’єктів (повідомлень, фото, замовлень) один користувач створює та переглядає за день, їхній середній розмір і співвідношення читання до запису.
- Обґрунтуйте кожне припущення: метрики конкурентів (наприклад, Similarweb), відкрита статистика або логічна оцінка.
- 🔮 Спершу вгадайте: до розрахунків запишіть, скільки, на вашу думку, коштуватиме система за 5 років і яка стаття витрат буде найбільшою.
5. Оцінка навантаження
Заповніть таблицю. Для кожного значення покажіть формулу, а не лише результат:
| Показник | Формула | Значення |
|---|---|---|
| Запис, RPS (середнє / пік) | ||
| Читання, RPS (середнє / пік) | ||
| Одночасні користувачі (CCU) | ||
| Вхідний трафік, Gbps | ||
| Вихідний трафік, Gbps | ||
| Приріст даних на день | ||
| Сховище за 5 років із реплікацією |
6. Залізо
- Порахуйте кількість серверів окремо для обчислень, сховища та мережі.
- Розраховуйте на пікове навантаження і закладіть запас на вихід із ладу хоча б одного сервера.
7. Вартість на 5 років
- Трафік: лише вихідний.
- Сховище: з урахуванням реплікації.
- Сервери: за прайсом обраного хмарного провайдера (наприклад, AWS EC2) або за вартістю власного заліза. Вкажіть джерело ціни.
8. Висновки
- Яка стаття витрат найбільша і як її зменшити (CDN, стиснення, прев’ю замість оригіналів, дешевше сховище для старих даних)?
- Наскільки результат відрізняється від вашої оцінки з етапу 4? Яке припущення вплинуло на нього найбільше?
Що здати
- Звіт з усіма етапами: межі системи, вимоги, припущення, таблиця розрахунків, залізо, вартість і висновки.
- Коротку презентацію для обговорення на занятті. Порівнюватимемо припущення, підходи до оцінки навантаження та найбільші статті витрат у різних системах.