1. Выбор темы
Проект кликер на мобильные устройства
Оценка скачиваний по статистике гугл-плей
- 10 млн
- 1 млн
- 1 млн
- 1 млн
- 10 тыс
- 10 тыс
- 500 тыс
- 1 млн
- 100 тыс
- 10 млн
Итог: 2.461 млн * 2 (iOS) = 5 млн скачиваний
2. Определение возможного диапазона нагрузок подобного проекта
3. Выбор планируемой нагрузки (например 30% доля рынка в России)
Предположим, что постоянно играет 10 % аудитории = 5 млн * 10% = [500 тыс онлайн]
4. Логическая схема базы данных (без выбора СУБД)
Данные пользователя: ~ 100 Б Данные на 1 игру ~ 1-2 кБ
5. Физическая системы хранения (конкретные СУБД, шардинг, расчет нагрузки, обоснование реализуемости на основе результатов нагрузочного тестирования)
Требуемое время ответа: 70 мс Время связи с игровым сервером (пинг): 50 мс Время серверу на формирование ответа: 20 мс
Ограничивающий фактор - производительность Redis на чтение при одновременной записи
Ориентировочная производительность 20 к. запросов/с Redis. (уточнение после нагрузочного)
-> 500к / 20к = 25 шардов Redis.
Количество соединений которые могут держать шарды Reids: 20000 * 25 = 500000 соед.
Производительность сервера Go больше производительность Redis -> оцениваем количество бэков по числу шардов Redis -> 25 бэков.
выбор прочих технологий: языки программирования, фреймфорки, протоколы взаимодействия, веб-сервера и т.д. (с обоcнованием выбора)
расчет нагрузки и потребного оборудования
выбор хостинга / облачного провайдера и расположения серверов
схема балансировки нагрузки (входящего трафика и внутрипроектного, терминация SSL)
обеспечение отказоустойчивости