Управление Grid Computing использованием виртуальных сред - Часть 2
Введение
Я работаю в компании, где мы запускаем работу пакетной обработки миллионов записей данных каждый день, и я думал недавно обо всех машинах, которые сидят каждый день ничего не делать в течение нескольких часов. Не было бы хорошо, если мы могли бы использовать эти машины для укрепления вычислительной мощности наших систем? В этот набор статей я буду смотреть на потенциальные выгоды от использования офиса сетки использованием виртуализованных средах.
В части 1 я дал обзор системы и технологии, я буду использовать, а также обсуждались некоторые из потенциальных причин, почему вы хотели бы создать офис сетки.
Управление заданиями
Если вы собираетесь быть запущен рабочих мест, то вы будете нуждаться в какой-то способ управлять ими. Ваша задача системы управления (на вашу работу сервера) должен быть очень хорошо продуманы, прежде чем даже пытаться запустить офис сетки. Так во-первых, какие задачи для системы управления заданиями:
- Раздайте рабочих мест по просьбе работников
- Скажите, какой тип работников рабочих мест для запуска
- Трек рабочих мест
- Убедитесь, что задания выполняются только один раз
- Обеспечить работу данных для работников, или по крайней мере рассказать им, где можно получить ее
Система также должна быть расширяемой, решение, которое работает сейчас в одном случае может быть увеличена до запуска нескольких видов работ, как бизнес видит стоит в сетке решение. Например, рабочие места могут получить приоритеты, больше чем один тип задания могут существовать (то есть несколько баз код), в конечном итоге вы даже можете запустить несколько различных машин работника, которые оптимизированы для каждого типа задания (хотя это никак отойти от "общего работника "идея). Всегда стараюсь думать о будущем при разработке системы, краткий перспективе может привести к долгосрочным разочарования и увеличение времени развития.
Работа сервера
Мы собираемся нужно где-то контролировать нашу работу с, это должно быть единственной системой в сетку, которая имеет фиксированные локатор ресурса, в том, что адрес IP, имя хоста, адрес (с использованием внутреннего DNS) и т.д. Это происходит потому, работники должны знать, где искать работу, работникам необходимо найти работу системы управления (не система управления заданиями найти работников).
Работу самого сервера в действительности не имеют сложную задачу (в основной или иначе система), он должен хранить список заданий, раздавать рабочие места, получать результаты, а затем сохранять их для последующего использования. Как эти части (например, "руку Джобса) определены может быть очень простой. Позднее мы можем расширить системы включают административный интерфейс для добавления, редактирования, удаления, приостановить работу, но это выходит за эту работу.
Существует никаких оснований, то, что ваша работа сервера не может быть виртуальная машина работает в вашей основной сервер обработки условии, что она не сливает воду слишком много ресурсов из него. Работу сервера однако нуждается в высокой доступности, если она идет вниз в пятницу вечером вы будете терять все выходные обработки, потенциально стоить вам пару недель стоит времени обработки (по сравнению с вашей основной сервер обработки в одиночку) . Вы можете рассмотреть вопрос о создании работу сервера с балансировкой нагрузки среды для обеспечения высокой доступности.
Основная настройка
Основные установки для нашей работы сервера будет состоять из того, что я звоню одному из моих серверов LIMP (то есть Li NUX, м ySql, Р л.с.). Код, выполняемый на Thea работников действительно будет работать, какие работы он может работать, взаимодействуя с работой баз данных системы управления. Позже мы могли бы создать веб-сервис и фактически раздает рабочие места вместо того, работники делать тяжелую работу сами, но сейчас мы будем продолжать использовать принцип KISS (Keep It Simple, Stupid!).
Таким образом, позволяет создать три MySQL таблиц для решения рабочих мест. Это будут рабочие места ``, `jobRecords`, и `jobResults`.
Здесь я использую SQL Buddy большой небольшой альтернатива PhpMyAdmin только потому, что ее легче установить на CentOS (для других см.: 10 лучших альтернатив PhpMyAdmin )
Эта таблица состоит из 5 простых полей,
- ID: Уникально определить работу
- Название: Может быть клиентом ссылку, или любое количество других идентификаторов
- Статус: Вы должны знать, где работа на, например,
- 0: Не выполнено
- 1: Взял
- 2: Завершен
- started_by: Кто начал делать эту работу? Это не совсем требуется, но приятно иметь. Я предлагаю отслеживания рабочих по их IP-адреса в сети
- started_at: Когда работник начать работу? По отслеживания рабочих мест, которые еще не завершены в течение X количество раз, когда мы знаем, что необходимо подобрать работу еще раз и начать обработку другой работник. Рабочие могли остановить обработку / перехода в автономный режим для любого числа причин, сбой питания, сбой, потеря сети и т.д.
Легко, как эта таблица может быть расширена за счет нескольких дополнительных полей, чтобы для отслеживания статистики, колонки закончить вовремя, чтобы увидеть, как долго работу взяли, счетчик чтобы узнать, сколько рабочих взял работу (очевидно, это необходимо, как правило, 1), приоритет задания, список можно продолжать и продолжать. В более сложных сценариев работы можно было бы указать, сколько памяти работник будет необходим доступ к (и, следовательно, использовать только подходящие рабочие), или даже какой тип работника не требуется.
Давайте добавим несколько рабочих мест, например:
В следующей таблице снова довольно прост для понимания, это наши записи работу. Они связаны с основной таблицы рабочих мест колонки `jobs_id`. Сделать из этой таблицы очень многое зависит от данных, которые необходимо предоставить, чтобы ваши работники, позволяет сделать очень простой пример, когда у нас есть четыре столбца:
- ID: идентификатор записи
- Название: имя лица
- адрес: адрес лица
- jobs_id: идентификатор задания, что эта запись связана с
Третий и финальный стол состоит из таблицы результатов, он так же составляют, как наши записи таблицы, а с добавлением некоторых столбцов может быть частью таблицы записей:
- job_record_id: Ссылка результат работы таблицы
- Результат: результат данных
... И это все, что нужно для управления заданиями! (Хотя на самом базовом уровне) В моем случае я указал на другой стол, где мои данные, чтобы процесс был расположен, но это может так же легко было файла, параметры для запуска моделирования кода, то имя его.
Выбор работы
Как указывалось ранее, рабочие будут делать свою работу управления для нас сейчас, так что все, что нужно, чтобы действительно сделать, это найти работу, которая должна обработки и получения информации. Как бы мы это сделать? Ну забрать наши критерии выбора работы и искать работу, в SQL я сделал следующие:
- Возьмите любую работу, которые не помечены как полное, но от нашего работника и сбросить их (заменить __ME__ с идентификатором, простой бы IP-адрес):
UPDATE `работу` SET `статус` = 0, где `статус` = 1 и `started_by` = __ME__; - Используя наши критерии выбора работы, выбрать работу и сказать системе управления, что этот работник имеет дело с ним:
UPDATE `работу` SET `статус` = 1, "started_by` = __ME__, `started_at` = NOW () WHERE `статус` = 0 или (`Статус` = 1 и `started_at`> DATE_SUB (NOW (), интервале х ЧАС)) ORDER BY `ID` ASC;
По захвата рабочих мест, которые не вернулись результаты в X количество времени мы гарантируем, что все работы выполняются в случае сбоя или работник будет самоволку.
- Следующая захватить рабочих мест подробности следуют сами записи:
SELECT * FROM `работу` WHERE `started_by` = __ME__ LIMIT 1; SELECT * FROM `job_records` WHERE `ID` = __JOBID__;
После завершения работы мы вставляем наш результат записи и Марк работу в качестве полной. Помните, как работа может приостановить / возобновить в любое время обеспечить определенную устойчивость в сценарии. Вполне вероятно, что задача приостанавливает на половине пути обновления системы управления заданиями, поэтому проверка количества записей в работу и число результатов сохранены в системе управления работой будет мудрым шагом.
Кроме того, в то время как это показано, как рабочие места могут быть выбраны и управляется с SQL-запроса кадр, который вы должны действительно быть абстрагирования вашей работе управления, так что если вы решили перейти к использованию веб-сервисов, файл на основе системы, XML , или любой другой количество систем не повлияет на код выше.
Работа конфигурации
Следующий аспект для рассмотрения является размер рабочих мест и конфигурации. Играя с работы конфигурации мы можем ударить превосходный баланс между скоростью, процесс репликации, и надежность. Возьмите пару оператора А сценариев:
- Вакансии принимать по 1 день каждый для запуска: Это означает, что работникам необходимо 15 дней для обработки каждого задания (помните 10% мощности для 2/3rds времени). Это, очевидно, не мудрым конфигурации, ваша работа размер слишком большой! Было бы принять по крайней мере вдвое больше времени, чтобы получить работу должны обрабатываться начальной работника пойти самоволку (время, чтобы забрать, что он не вернулся результате переработки плюс время). В идеале нужно иметь хотя бы один полный рабочий легко очищаются от конца каждого периода длительного простоя, таким образом вы сохранить рабочие места тиканье более, а в худшем случае работа займет два дня, чтобы процесс должен сначала пойти пропавшими без вести.
- Вакансии принимать от 1 минуты до запуска: Это означает, что ваши работники займет около 15 минут для выполнения каждого задания. Хотя это может поначалу показаться идеальной, вы получаете дополнительную обработку работы во время обеда, кофе-брейки, совещаний и т.д. этот сценарий ставит нагрузку на другие области системы и вводит свои собственные проблемы. Например, в первую очередь Настройте / время обработки соотношение будет идти прямо, поэтому потери эффективности системы. Ваша сеть будет постоянно потоковой работы с информацией различных рабочих расстраивает сотрудников, которые дон своей повседневной работе. Вы также собирается уделять больше нагрузку на сервер обработки заданий, как он должен блюдо из много-много маленьких кусочков работы на регулярной основе. Наконец, в этой ситуации, если ваша работа сервер недоступен вы собираетесь создать огромный назад журнал незавершенных работ в то время как больше рабочих мест может продолжения обработки в блаженном неведении, что работа сервера, испытывающим трудности.
В действительности не будет одного идеального конфигурация для установки сетки, многое зависит от имеющихся ресурсов, типа работы, работы время обработки требований, возможность работы в сети, и так далее. Однако некоторые руководящие принципы будут:
- Размер работу так, чтобы каждый работник может получить по крайней мере через 3-4 рабочих мест в течение 15 часов (длинная вероятность простоя период времени)
- Играть с работой размер так, что время установки становится довольно незначительным по сравнению с обработкой время (имея в виду выше точки).
- Если работа не завершается в два раза больше времени (может быть меньше) вы ожидаете, что для завершения его считать, что его ушли самоволку и начать его обработку с другим работником. Это означает, что вы, возможно, придется ждать до трех раз нормальная длина работу для завершения (возможно, и дольше, если последующая работа не удается). Вы можете сократить это время, но будьте осторожны, чтобы не уменьшить его слишком много, как вы можете начать дублирования задач обработки на регулярной основе.
- Вакансии должны быть независимы от внешних требований как можно больше. Работу сервера, например, должны быть только связались в начале и конце каждого задания.
- Не насытить вашей сети, это будет иметь два отрицательных эффектов, ваш дневной персонал найти использованием сети разочарование и проблемы могут возникнуть с подключением по тайм-ауту, что проблема будет только ухудшаться, как вы масштабирования сетки.
- Обеспечить рабочие места могут работать на ваших работников. Если работы слишком большой объем памяти или дискового пространства интенсивной работы начнутся прерывания и только, что вы заметите это капля в число рабочих мест обработаны без реальных причин.
Представление результатов работы
При подаче результаты работы важно, чтобы проверить, что результаты не были представлены на другого работника, особенно если текущий рабочий был заморожен в течение некоторого времени.
Когда результаты были обеспечить, чтобы количество результатов матчей количество записей в работу.
Как указывалось ранее, и не может быть более подчеркнул, строить отказоустойчивости в поиска работы и результаты представления. Работники могут (и скорее всего) переходят в режим ожидания в самый неподходящий раз, и это должно быть удовлетворяются за. Также еще раз абстрагирования от ваших результатов представления поможет удовлетворить будущие изменения в системе управления заданиями гораздо легче иметь дело с.
Резюме
В этом section мы смотрели на то, что сервер управления заданиями нужно сделать и как получить очень простой установкой системы. Мы обсудили, как получить работу с системой управления и как лучше настроить работу, чтобы получить большинство наших вашей системы сетки офиса. Чтобы закончить, параграф или два по отправке результаты обратно на сервер управления заданиями была представлена.
- Сервер управления работой управляет рабочих мест и гарантирует, что все работы будут завершены единиц
- По абстрагирования вашей работы выберите / результаты представления мы можем изменить технологию управления сервером без особых проблемы
- Настройка рабочих мест для обеспечения того, чтобы они работают быстро и эффективно, не подвергая слишком много давления на сетевую инфраструктуру, и без дублирования задач обработки на регулярной основе.
- Убедитесь, что вы строите отказоустойчивости и ошибки checking в вашей процедуры, работники могут приостановить и возобновить и самый неудобный раз. Не забудьте проверить, если результаты уже были представлены другим работником.
Следующий раз
В части 3 мы создадим наш виртуальный машина для обработки и создания нашего окна машины, чтобы стать времени простоя работников.



















































Хэя! Хорошая концепция, но, возможно, это действительно работа?