[Moscow.pm] Как незаметно для других скушать дисковый ресурс других серверов?
Михаил Монашёв
postmaster на softsearch.ru
Сб Авг 4 08:33:21 PDT 2012
Здравствуйте.
Есть 10 серверов. На каждом сервере запускается один и mysql-сервер и
100 экземпляров одного перлового скрипта (с минимальным приоритетом,
чтобы им оставалось только неизрасходованное процессорное время) . Это
скрипт пишет очень много данных на все сервера в mysql-и. Диски
перестают справляться с запросами на запись и все другие процессы,
которые читают или пишут в те же mysql-и начинают тормозить. Т.е. надо
придумать, как отдавать этому скрипту только свободный дисковый ресурс
другого сервера, да так, чтобы другие более важные процессы,
обращающиеся к этим же mysql-ям, не тормозили.
Основная проблема в том,
что нагрузку на одном сервере создаёт процесс с другого и из-за этого
приходится мониторить нагрузку периодически, а не постоянно. А она
меняется с момента измерения. Кроме того, в зависимости от самой
нагрузки приходится выставлять разные границы, когда нагрузка
считается высокой. В качестве показателя дисковой нагрузки я использую
время выполнения одной операции чтения/записи. Чтобы гасить нагрузку я
делаю Time::HiRes::sleep($timeout) и меняя этот $timeout пытаюсь
адаптироваться под текущую нагрузку.
Операционка FreeBSD 8.X.
Сейчас зашёл в тупик, ибо нифига не выходит сделать адаптирующиеся под
текущую нагрузку алгоритм. Всегда выходит две крайности: или много
неоправданного простоя или диски перегружены и всё тормозит.
--
С уважением,
Михаил mailto:postmaster на softsearch.ru
Подробная информация о списке рассылки Moscow-pm