Проектирование одновременных запросов к базе данных
После некоторых размышлений о том, как люди рассчитывают загрузку базы данных для целей планирования емкости. Я не указывал это на сбой сервера, потому что вопрос связан с измерением только приложения, а не с определением инфраструктуры. В этом случае беспокоиться об этом придется кому-то другому!
Я знаю, что здесь огромное количество переменных, но мне интересно, как другие воспринимают приблизительный порядок величин. Это просто упражнение с затратами на раннем этапе жизненного цикла проекта до создания какого-либо конкретного проекта, поэтому на этом этапе не нужно много информации.
Вопрос, который я поставил перед специалистами по инфраструктуре: "Сколько пользователей одновременно". Давайте не будем обсуждать обоснование поиска только этой фигуры; это именно то, о чем просили в этом случае!
Это веб-интерфейс SQL Server с достаточно фиксированной и легко поддающейся количественной оценке аудиторией. На мой взгляд, это очень грубо для реальных одновременных запросов, сводится к все более детальным единицам измерения:
- Общая аудитория
- Одновременные сессии
- Одновременные запросы
- Одновременные запросы к БД
Это не учитывает такие факторы, как кеширование веб-приложений, частичные запросы страниц, объем записей и т. Д., И существует некоторая творческая лицензия, необходимая для определения частоты запросов на пользователя и количества обращений к БД и времени выполнения, но это кажется разумной отправной точкой. Я также осознаю необходимость масштабирования для пиковой нагрузки, но это еще кое-что, что можно подключить к одновременным сеансам при необходимости.
Это, по общему признанию, очень простой, и я уверен, что есть более полное руководство. Если кто-то может поделиться своим подходом к этому упражнению или указать мне на другие ресурсы, которые могут сделать процесс немного менее специальным, это было бы здорово!
1 ответ
Я постараюсь, но, очевидно, не зная деталей, довольно сложно дать точный совет.
Прежде всего, ребята из инфраструктуры могли бы задать этот вопрос с точки зрения лицензирования (сервер SQL может быть лицензирован для каждого пользователя или для каждого процессора)
Теперь вернемся к вашему вопросу. "Общая аудитория" важна, если вы можете предсказать / определить это число. Это может дать вам наихудший сценарий, когда все пользователи одновременно обращаются к базе данных (например, 9:00, когда все входят в систему).
Если вы храните информацию о сеансе, вы, вероятно, будете иметь как минимум 2 соединения на пользователя (1 сеанс + 1 основная БД). Но это число может быть (иногда заметно) уменьшено путем объединения пулов (зависит от того, как вы подключаетесь к базе данных). Используйте наихудший сценарий - 50 системных подключений + 2 * количество пользователей.
Одновременные запросы / запросы зависят от характера приложения. Нужно больше деталей. Больше одновременных запросов (к вашему внешнему интерфейсу) не обязательно приведет к большему количеству запросов на внутреннем интерфейсе.
Сказав все это - для целей расчета стоимости вы должны сосредоточиться на более широкой картине.
Лицензия на сервер SQL (если мне не изменяет память) будет стоить ~128K AUD (двойной Xeon). Горячий / теплый режим ожидания? Удвойте стоимость.
Дисковое хранилище - сколько памяти вам понадобится? Диски относительно дешевые, но если вы собираетесь использовать SAN, стоимость может стать заметной. Кроме того, чем больше дисков, тем лучше с точки зрения производительности.