Windows Server 2003 - обработка сотен одновременных загрузок
На данный момент у меня есть один сервер с 4 жесткими дисками по 1 ТБ, ежедневно я загружаю более 150 музыкальных файлов MP3 (около 80 МБ каждый).
В периоды занятости более 300 человек одновременно скачивают / скачивают эти миксы, 75% активности выполняется на самом последнем загруженном материале, который находится на одном жестком диске.
Мои скорости чтения на жестком диске очень низкие из-за такой высокой активности, как 200+ операций чтения, происходящих одновременно на одном жестком диске (некоторые тесты проводились с HDTach).
Что было бы логичным решением для решения этой проблемы, у меня было несколько идей:
- Балансировка нагрузки с другим сервером
- Установите более быстрые жесткие диски (что лучше в наши дни? SCSI / SATA)
- Распределите наиболее часто используемые файлы на 4-х дисках, чтобы распределить нагрузку между всеми 4-мя дисками, а не всеми наиболее часто используемыми (самыми последними) на последнем установленном диске.
Очевидно, что балансировка нагрузки - самый дорогой вариант, но сильно ли он поможет?
Некоторая помощь в этой ситуации была бы отличной!
4 ответа
Здесь вы можете масштабировать в нескольких направлениях, в зависимости от вашего бюджета и доступности оборудования. Рассмотрим эти шаги, вероятно, в следующем порядке, но все, что подходит вашей ситуации:
Повторно установите диски в чередующийся RAID-массив, чтобы повысить производительность диска. Это будет означать резервное копирование файлов с дисков, создание массива, а затем перемещение данных обратно на полосу. Если вы можете позволить себе потерять часть емкости ради большей отказоустойчивости, выберите полосатый и зеркальный массив, который выдержит сбой диска
Добавьте выделенный набор дисков RAID для хранения файлов страниц / временных файлов сервера. Сделайте это быстрой настройкой RAID0 с акцентом на производительность. Убедитесь, что ваше приложение выбрасывает файлы в память при их обслуживании, и что файл подкачки достаточно велик для размещения файлов. Это довольно дешевое, прямое улучшение.
Добавьте больше оперативной памяти на сервер (в настоящее время это относительно дешевый материал) с акцентом на общий объем оперативной памяти, а не на чистую производительность. Сервер, вероятно, может обрабатывать несколько разных скоростей оперативной памяти - и более медленные вещи могут быть дешевле на Гб. - Вам действительно не нужна сверхвысокая производительность ОЗУ, скорее, вам нужно много.
Переместите уровень приложения так, чтобы файлы обслуживались с выделенного хоста, а остальная часть трафика и обработки веб / базы данных обрабатывались отдельной машиной. Это оставит один сервер выделенным для обслуживания файлов, и вы получите выигрыш в производительности от этого.
Укажите уровень своего хранилища и добавьте быструю полосу дисков для обслуживания новейших MP3-файлов. Переместите файлы в более медленное хранилище, как только спрос исчезнет. Осуществимость этого подхода зависит от усилий, связанных с регулярным перемещением файлов, и от того, сколько из них вы можете автоматизировать в своем приложении.
Добавьте массив SSD-дисков для обслуживания новейших файлов.
В конечном итоге вы можете выбрать одноуровневое решение для хранения данных, которое складывается следующим образом, чтобы быстрее и медленнее: - ОЗУ - Pagefile - SSD - Быстрая полоса SATA/SAS - Массовый дисковый массив
Лучше всего будет получить какую-то настройку RAID, чтобы нагрузка распределялась по нескольким жестким дискам. Также это позволит вам пережить сбой одного из дисков в массиве RAID без потери данных.
Исходя из того, что вы сказали, массив RAID 5 с 4 дисками должен нормально работать, поскольку большая часть данных считывается.
Итак, вам нужен балансировщик нагрузки, чтобы гарантировать, что обе машины могут обслуживать запросы, если это необходимо, и RAID для повышения надежности и балансировки чтения / записи файлов на свои диски. Да, и инструмент типа rsync для обеспечения синхронизации файлов.
Что касается того, стоят ли различные части этого, того стоит, вместо того, чтобы гадать, вам нужно провести мониторинг производительности, чтобы увидеть узкие места. Если дисковая память определенно является проблемой, то RAID того стоит. Если обслуживание сетевых запросов является проблемой, то балансировка нагрузки на сервере - ваш друг.
Сколько памяти у вас на сервере? Возможно использование ramdisk - вариант, если система предназначена для обслуживания файлов. В противном случае следите за счетчиками кэша файлов в perfmon, такими как Cache - Cache Read Hit%, и счетчиками дисков (в частности, длина очереди диска avg, как правило, должна быть около 3 или меньше).
Вот документ, который имеет несколько оптимизаций, которые могут помочь.