За последние 24 часа нас посетили 20040 программистов и 1722 робота. Сейчас ищут 1665 программистов ...

Распараллеливание выполнения скрипта

Тема в разделе "Вопросы от блондинок", создана пользователем Kugarda, 5 апр 2012.

  1. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    Всем привет, возник такой вопрос...
    Имеется ИИС на Вин2008, пхп запускается как ФастЦГИ (сорри, я могу печатать только на русском =)), есть скрипт пхп который выполняется от часа и дольше. Все бы ничего, но дикая буферизация в вебсервере не выдает вывод в браузер пока скрипт не отработает и пользователь сайта не видит сколько и что сейчас выполнено. При этом часто ИЕ8/9 выдают ошибку 500 примерно после часа работы (хотя скрипт продолжает работать), ФФ честно дожидается окончания работы. Потому у меня два варианта - победить буферизацию в контексте лишь моего скрипта (мой скрипт вызывается ЦМСкой, я не имею доступа к интерфейсу) не влияя на остальные скрипты, либо как-то распараллелить одно место в скрипте. Есть там цикл, каждый проход которого создается коннект к удаленному мсскл, там запускается дикая хранимая процедурка (время работы от 5 до 30 минут), результаты этих коннектов потом обрабатываются в скрипте. Вот набросал примерную схему: http://imageshack.us/f/215/graphic1ae.jpg/ , можно ли как-то переделать левую часть в правую? Вызвать каждый коннект в отдельном потоке, и потом ловить возврат управления в темнозеленом блоке ниже (последний отработавший поток и добьет основной скрипт до конца)? Я не могу разнести эту схему на несколько скриптов, меня вызывают только один раз и ожидают от меня результата.
    Либо, может кто подскажет как победить буферизацию в связке моего вебсервера не переделываю настройки всего сервера? Чую ИЕ вылетает потому что за час ему так и не вернулся хоть какой-то вывод, так бы скармливал потихоньку прогресс обновления и фиг с ними, полуторачасами работы.
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Код (PHP):
    1.     $process=$_POST['process']; // Параметр запуска и уникальное имя процесса
    2.     if (SingleProcess::getStatus($process)==SingleProcess::WORK_STATUS) { // Проверяем не запущен ли уже процесс    
    3.         return "{msg:'Уже работает', type:'err'}";
    4.     }
    5.     $fileAddr=str_replace("/","\\",SITEROOT); // перерабатываем слеши для cmd венды
    6.     pclose(popen("start /B php $fileAddr\\admin\\Run.php ".'"'.$process.'"', 'r')); // Запускаем скрипт отвязанный от текущего.
    7.  
    Правда тогда нужны права на запуск команд через cmd.
    Так же надо тогда задуматься над механизмом возврата данных из запущенных скриптов.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Часто pcntl_fork использую, работает как часы, правда винду с IIS придется выбросить фтопку.
     
  4. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    ИИС выкинуть нельзя, т.к. на нем корпоративные сервисы, сделал просто вызовы интерпритатора с отдельным скриптом коннекта к удаленному скулю, а в качестве возврата результата работы скрипта использовал временную таблицу в локальной базе, в межпроцессном взаимодействии заюзал скрипт отсюда http://habrahabr.ru/post/75454/ , самому мутить работу с именоваными каналами влом. Вроде работает
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем тогда пхп мучить? на винде своя экосистема не хуже.
     
  6. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    какая еще экосистема? на пхп написан внутрикорпоративный сайт по одному из сервисов обслуживания
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну и молодцы, че еще сказать.

    кстати бд с кроном решат как раз такую задачу в полпинка в лоб без изысков примерно по такой схеме:
    скрипт дергает другие скрипты и спит дальше.
    а те скрипты забирают себе часть строк и их насилуют.

    если это невозможно и нужен только один работающий скрипт, то стоит почесать репу на предмет оптимизации. У вас там все нужные индексы присутствуют? олчаса ворошить базу это плохой признак =)
     
  8. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    обновление должно происходить по требованию, а не кешироваться парой вызовов в сутки. "У нас там" все присутствует, просто базы от 10-20Гб, и хранимка ниэпическая. Сама она отрабатывает на удаленном сервере в среднем за 600-800 секунд (результат - 20к строк, по каждой дикие расчеты), серверов несколько (пока под десяток).
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    "20 гб" и "по требованию" это взаимоисключающие требования, если конечно вы не поставите себе 32 гига оперативки. =)
     
  10. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    А никто и не говорит про запуск скрипта любым пользователем и временем работы в 30 секунд. Эта операция может выполняться и раз в день, но лишь тогда, когда это нужно.
    ЗЫ сколько там стоит оперативки я не знаю, сервера типа HP DL360/380 модели G5 и выше, если это интересно :)

    Добавлено спустя 2 минуты 19 секунд:
    в любом случае скрипт переписан, и время работы "цикла" сократилось до времени работы самого тормозного сервера, а это уже меньше первоначального времени в 5-10 раз. Ну на память сервера с сайтом да, подействовало, скрипты жрут по 250-300Мб, но пофиг, там блейды, если мало - еще выделят ресурсов под станцию
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я не спец, но если идет чтение базы с харда, то это уже смерть =)

    так или иначе, надо приложить все усилия, чтобы все это дело происходило в оперативке, благо ща она дешевая. Но с другой стороны надо будет хорошенько озадачиться целостностью данных, ибо если питание вдруг пропадет - будет ой.
     
  12. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    Хоть бы глянул на модельки в яндексе :) Это промышленные сервера, БП 1+1, рейды с батарейкой, оперативка ЕСС, винты не десктопные (скази/сас), и все это питается от онлайновых ИБП стоимостью от 2к зелени :) Комплектующие в таком железе не берется на рынке, оно заказывается у НР, и есть жесткие правила совместимости (винт может не запуститься если не валидирован НР, к примеру) - это к слову о дешевой оперативке. При том при всем делаются бекапы и все такое.
    Ну потормозит сервер при выполнении такого редкого запроса, все остальные потерпят. Там вообще и без этой процедуры хватает нагрузки, особо не жалуются
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) бэкапы это хорошо.
     
  14. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Че? С ибея такое берется "на ура", расскажи тут о "заказывается у HP". Если денег хоть жопой жуй - то заказывай где угодно. То, что в странах снг подобное серверное железо - дефицит, это не значит, что за бугром его нет.

    Хотел так что-то умное сказать? Работает в сервере один блок, второй тупо сидит в "шахте" без дела. И будь там хоть 1+1, или 1 + 100500 - сервер от этого не становится на +100500% мощнее.

    О, да. 200 грн/36 гб scsi - в моей конторе, которая занимается комплектующими к серверам. С ибея за те же 200 грн можно пригнать винт на 72 гб.

    ... коробочка с наклейкой...
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    винты медленные по своей сути. ничего не попишешь.
     
  16. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    рассказываю про "че": берется винт валидный НР, без разницы где. Если берется любой винт с рынка - это вопрос о компетенции

    Да, причем я не только говорю - но и читаю, впредь рекомендую читать то, на что я отвечаю. В отцитированном мной сообщении совершенно ясно написано то, к чему я написал БП 1+1.

    В первую очередь - надежность. Во вторую очередь - интерфейс и контроллер (и его режимы работы). Опять таки - вопрос компетенции.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, не ясно. всё что ты написал - херня. =)
    там по существу осмыслена только одна ыраза про бэкапы.

    а сколько там ибп и бп у сервера - дело десятое. это снижает вероятность смерти, но не исключает её.

    если в оперативке сидит база в 20гиг с которой активно работают, то эти меры несомненно помогут спать спокойнее.
    но есть форс-мажорные обстоятельства - раз, два - человеческий фактор. это из серии пажара, наводнения или перепутали сервер =) когда отключали.

    так что стоит сильно озаботиться сохранностью, либо забить на ручной запуск и делать всё по уму.

    а харды 15к конечно тема пиздатая, только вот быстрее они не сильно тех же 5400 =) В разы. Даже не на порядок. Если головка дергается, то скорость падает колосально. если не приведи боже требуется чтение из разных мест или файл фрагментирован, или бд сочтет нужным читать файл несколько раз подряд, то в эти самые полчаса и выльются 20 гиг.

    ташта какие там пиздатые харды или блоки питания никого не ебет. пожары никто не отменял, дураков тоже. Если это важные данные, то исходить нужно из худшего сценария.

    дальнейшая беседа не имеет смысла. изначально ты пришел с проблемой, а потом вдруг сказал, что быстродействие тебя устраивает. Без понимания чего там за процедура и что она делает в процессе своей работы, говорить невозможно.
     
  18. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Так эти твои правила жесткие или не жесткие, я так и не понял? Если они такие жесткие, то чего винт может и запуститься? А может и нет. У меня вон сетевая плата к обычному пк в определенный слот не ставится, я тоже могу сказать в таком случае - что у моей ноунейм мат. платы и сетевой d-link - "жесткие" правила совместимости.
    Лишь бы приукрасить тот факт, что там серверные железяки, а не обычные десктопные. Не надо строить из этого "космос".

    Это вопрос бабла в кармане. Компетенция... Много компетенции нужно, чтобы сходить в сервисный и купить нужную запчасть. Типа, человек, покупающий аналогичное железо но на рынке (б.у.), сам не соображает, что он покупает. Ему не надо 3 года гарантии, красивой коробочки, службы поддержки и инструкцию к винту. Ему просто нужно недорогое решение, с гарантией в две недели.

    Типа, те, кто покупают вещи в бутике - компетентные люди, а те, кого не особо парит, что носить - покупают те же штаны с аналогичного материала на рынке - они некомпетентные.
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    )))
    Кстати, почему такае хрень? У моей материнской платы (Asus) такие же правила с разными сетевушками - например Accorp не работает в 1 PCI-слоте, а Realtek не помню куда втыкал, но с каком-то из портов тоже сперва не заработала, зато заработала в первом :D Правда сетевушки в неё я начал тыкать после того, как накрылась интегрированная после грозы...
     
  20. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Может, с прерываниями как-то связано.
    У меня там вообще прикол - сначала надо ставить дрова на нее, а потом только втыкать ее - иначе не определится.
    Я ж и говорю - "жесткая совместимость" на лицо тут.
     
  21. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    ок:
    так яснее? защита от некачественного питания - рейд с батарейкой, два БП, ИБП.

    ты мне сейчас чего хочешь рассказать? 15к - это скорость вращения шпинделя, не будь хомячком, почитай про то, чем отличаются скази от сата, какие контроллеры используются и как они умеют оптимизировать скорость на чтение. 15к - это к маркетологам



    Если у тебя возникают такие вопросы - значит ты не имел дело с этими серверами. "Не запустится" - это значит в массив контроллер его не поставит. А может поставит.

    Ты не читаешь и не думаешь. Речь не о том где покупать, а что покупать.

    Как тебе будет угодно, я не собираюсь переубеждать. Бабло так бабло, пожалуй закончим на этом?
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у моей видеокарты в прошлом компе менялся идентификатор (sic!) после чего она не дружила ни с какими дровами, т.к. в дровах такого железа не было упомянуто. Приходилось править файлик в дровах со списком железа.

    Мой прошлый монитор однажды был признан телевизором без поддержки защищенного HDMI и по этому поводу на него было наложено заклятье, которое рисовало черную рамку и размывало изображение. Я два дня думал, что он сломался! Я год жил потом со старыми дровами =) чтобы такого не было.

    Добавлено спустя 55 минут 6 секунд:
    ты реально тупишь. еще раз. техник может выдернуть питание, выключить/ребутнуть сервер. Может случиться пожар. Может потоп, ураган и прочее. Самолет может упасть на ДЦ. Просто это не твои данные, поэтому ты так халатно к этому вопросу подходишь. =) Еще раз: включи голову. Снижение вероятности сбоя в питании это полумера.

    смотрим среднее время доступа и не дрочим на скази. реальный стояк на этом фоне может вызвать среднее время доступа и количество IOPS у SSD если цена не пугает.

    Зачем ты вобще об этом пишешь?
     
  23. Kugarda

    Kugarda Активный пользователь

    С нами с:
    5 апр 2012
    Сообщения:
    15
    Симпатии:
    0
    Ты читаешь свои сообщения? Я довольно ясно объяснил тебе насчет пропадания питания и привел некоторые варианты при которых работа сервера не будет остановлена, а в случае пропадания питания на винтах - массив не уйдет в дегрейд. Если ты считаешь что бекапа достаточно - то это лишь говорит о твоем опыте, есть места где простОй сервера в течении часа стоит больше чем твоя зарплата за три месяца, и это не особо много. А потеря данных в интервалом м/у бекапами вообще в рабство загонит. Поэтому один бекап не решает.

    Велком в промышленные решения, промышленные задачи. Потом порассказывай про ИОПсы, ССД, и прочее.

    А зачем ты заговорил про сохранность данных при пропадании питания? Я на этом не специализируюсь, и то знаю побольше тебя, т.к. приходится этим заниматься иногда. Ты же, по всей видимости, в этой области яндекс-специалист.
     
  24. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Та да, не имел. Уже два года имея свой HP - я не имел с ними дела.

    и это твои "жесткие правила"?
    Кстати, а еще у серверов жесткие правила на электропитание - ему только 220 вольт надо. А вот обычным ПК и 380 подойдет. Таки да, ты прав тут.
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если человек на третий раз не может понять, что ему говорят, то наверное беседа зашла в тупик.

    про понты по поводу моей зарплаты. если фирме один час обходится в такую сумму, то стоит обзавестись парой десятков запасных серверов.

    но ты конечно можешь дальше бубнить про волшебные БП, ограждающие от "пьяных сантехников" и пожаров =)
    а бывали случаи, когда дц просто уходил в подполье молча и вдруг... какой бп защищает от такого, интересно =)