Skip to content

Latest commit

 

History

History
217 lines (122 loc) · 11.5 KB

File metadata and controls

217 lines (122 loc) · 11.5 KB

Сбор нефункциональных требований

⚙️ Для сбора нефункциональных требований для приложения, можно воспользоваться следующим чек-листом, который будет включать следующие пункты:

Аудитория приложения

Количество пользователей

Пример вопроса: Какое количество пользователей (DAU / MAU) ожидается в будущем приложении, а также, как оно будет расти?

Пример ответа: 50 000 DAU.

Поведение пользователей

Пример вопроса: Сколько один пользователь в день будет, в среднем, создавать запросов к будущему приложению?

Пример ответа: Один пользователь, в среднем, будет делать 12 запросов в день к приложению.

Регионы использования приложения

Пример вопроса: На аудиторию каких регионов/стран будет запущено будущее приложение?

Пример ответа: Только на СНГ.

Особенности приложения

Сезонности в приложении

Пример вопроса: Будут ли сезонности, когда приложением в определенный период будут использовать большое количество пользователей?

Пример ответа: Да, сезоны осенних и предновогодних распродаж.

Условия хранения данных

Пример вопроса: Данные храним всегда, либо можно удалять/агрегировать какие-либо данные спустя какое-либо время?

Пример ответа: Храним всегда.

Лимиты и ограничения

Пример вопроса: Если делаем подписки, то какое максимальное количество подписчиков может быть у пользователя?

Пример ответа: 1 000 000 подписчиков.

Временные ограничения

Пример вопроса: За сколько письмо должно успевать доходить до адресата?

Пример ответа: Не более, чем за 5 секунд.

Доступность приложения

Пример вопроса: Сколько по времени приложение может быть недоступно за год?

Пример ответа: Не более, чем несколько часов простоя в год.

Оценка нагрузки

📝 Расчет RPS

Для расчета приблизительного усредненного RPS (запросов в секунду) по DAU (количество уникальных пользователей за сутки) нужно использовать следующую формулу:

RPS = dau * avg_requests_per_day_by_user / 86 400

Где:

avg_requests_per_day_by_user - среднее количество запросов, которые генерирует каждый пользователь за один день 86 400 - 24 часа * 60 минут * 60 секунд

Представим, что у нас в системе ожидается 10 000 000 DAU, каждый из которых будет в среднем делать 5 запросов в систему каждый день. Тогда для нашего примера получится следующая арифметика:

RPS = 10 000 000 * 5 / 86 400 = 578

Если вы не знаете DAU, но знаете MAU (количество уникальных пользователей за месяц), то можно приблизительно перевести MAU в DAU, разделив значение этой метрики на 30 (количество дней в месяце).

📝 Расчет трафика

Для расчета приблизительного усредненного трафика по RPS нужно использовать следующую формулу:

Traffic = rps * avg_request_size

Где:

avg_request_size - средний размер запроса в байтах

Представим, что у нас в системе ожидается 10 000 RPS, а средний размер запроса будет составлять 2КБ, тогда для нашего примера получится следующая арифметика:

Traffic = 10 000 * 2КБ = 20 000КБ/с

📝 Расчет одновременных соединений

Для расчета приблизительного усредненного количества одновременно-открытых соединений важно понимать, что их количество будет равно количеству пользователей, которые одновременной пользуются приложением (если пользователь открывает одно соединение с приложением). Число одновременных пользователей зависит от многих факторов, таких как активность пользователей, тип приложения и так далее. Однако, обычно принимают, что в среднем, общее число одновременных пользователей онлайн составляет около 10% от DAU, поэтому для расчета одновременных соединений нужно использовать следующую формулу:

Connections = dau * 0.1

Где:

0.1 - 10% от ежедневно активных пользователей

Представим, что у нас в системе ожидается 10 000 000 DAU, тогда для нашего примера получится следующая арифметика:

Connections = 10 000 000 * 0.1 = 1 000 000

Оценка дисков

Для расчета приблизительного количества дисков для хранения и обработки данных нужно учитывать объем, количество операции ввода-вывода (IOPS) и пропускную способность разных типов дисков. Ниже указаны усредненные показатели, но важно понимать, что диски есть абсолютно разные и показатели у них тоже будут из-за этого абсолютно разные.

HDD

SSD (SATA)

SSD (nVME)

Объем

до 32ТБ

до 100ТБ

до 30ТБ

Операции ввода-вывода в секунду

100

1 000

10 000

Пропускная способность

100 МБ/с

500 МБ/с

3 ГБ/с

Приблизительно оценить количество дисков можно, используя следующую формулу:

Disks_for_capacity = capacity / disk_capacity
Disks_for_throughput = traffic_per_second / disk_throughput
Disks_for_iops = iops / disk_iops
Disks = max(ceil(Disks_for_capacity), ceil(Disks_for_throughput), ceil(Disks_for_iops))

Где:

disk_capacity - объем одного диска 

capacity - суммарный объем данных, которое необходимо хранить 

traffic_per_second - суммарный трафик на запись/чтение в секунду 

disk_throughput - пропускная способность одного диска 

iops - суммарное количество запросов в секунду 

disk_iops - количество операций ввода-вывод диска в секунду 

ceil - функция округления вверх до целого числа

Какого типа выбирать диски?

Для выбора типа дисков (HDD/SSD) не существует какой-либо формулы или признака - как правило это компромисс между стоимостью и количеством дисков. То есть, первоначально нужно пробовать использовать самое дешевое оборудование, но если мы понимаем, что количество дешевых дисков слишком большое, то можно пробовать использовать немного дорогих дисков для того, чтобы конфигурация системы была проще. Также стоит не забывать о том, что если вы храните большие объемы даных на дешевых дисках, то в случае необходимости - процесс поднятия базы данных из бэкапа или разворачивания рядом дополнительной реплики будет заниматься много времени.

Какого объема выбирать диски?

Для выбора объема дисков не существует какой-либо формулы, но зато можно придерживаться следующих рекомендаций:

Если вам нужно хранить много данных, но трафик и количество операций ввода-вывода в секунду к данным небольшие, тогда следует выбирать конфигурацию в виде небольшого количества дисков с большим объемом.

Если вам нужно хранить немного данных, но трафик и количество операций ввода-вывода в секунду к данным большие, тогда следует выбирать конфигурацию в виде большого количество дисков с небольшим объемом.

Представим, что у нас в системе ожидается трафик в 110МБ/с и 300 IOPS - и представим, что нам нужно посчитать, сколько потребуется HDD дисков размером 2 ТБ на один год для обработки и хранения данных. Тогда для нашего примера получится следующая арифметика:

Сapacity = 100 МБ/с * 86 400 * 365 = 3 ТБ
Disks_for_capacity = 3 ТБ / 2 ТБ = 1.5
Disks_for_throughput = 110 МБ/с / 100 МБ/с = 1.1
Disks_for_iops = 300 / 100 = 3
Disks = max(ceil(1.5), ceil(1.1), ceil(3)) = 3

Где:

86 400 - 24 часа * 60 минут * 60 секунд 

365 - количество дней в году 

100 МБ/с - средняя пропускная способность HDD диска (смотреть таблицу выше) 

100 - средний IOPS HDD диска (смотреть таблицу выше)