Введение
Я работаю в компании, где мы запускаем много рабочих мест, пакетная обработка миллионы записей данных каждый день, и я думал недавно обо всех машинах, которые сидят каждый день ничего не делать в течение нескольких часов. Не было бы хорошо, если мы могли бы использовать эти машины для укрепления вычислительной мощности наших систем? В этой серии статей, я буду смотреть на потенциальные выгоды от использования офиса сетки использование виртуализированных средах.
В части 1 я дал обзор системы и технологии, я буду использовать, а также обсудили некоторые из потенциальных причин, почему вы хотели бы создать офис сетки.
Управление заданиями
Если вы собираетесь быть запущен рабочие места, то вы будете нуждаться, каким-то образом управлять ими. Ваша задача системы управления (на вашу работу сервера) должен быть очень хорошо продуманы, прежде чем даже пытаться запустить офис сетки. Так во-первых, какие задачи для системы управления заданиями:
- Раздайте рабочих мест по требованию рабочих
- Скажите рабочим, какой тип запуска заданий
- Трек рабочих мест
- Убедитесь, что рабочие места запускать только один раз
- Обеспечить работу данных работников, или хотя бы сказать им, где его получить
Кроме того, система должна быть расширяемой, который действует на данный момент в рамках одного дела может быть продлен до запуска нескольких типов рабочих мест, как бизнес видит себя в сетке решение. Например, рабочие места могут получить приоритеты, больше чем один тип задания могут существовать (то есть несколько баз код), в итоге вы можете даже запустить несколько различных машин работника, которые оптимизированы для каждого типа задания (хотя это никак отойти от "общего работника "идея). Всегда старайтесь думать о будущем, при разработке системы, короткое видение срок может привести к долгосрочной перспективе разочарования и увеличение времени развития.
Работа сервера
Мы собираемся нужно где-то контролировать свои рабочие места из, это должна быть единственная система в вашей сетке, которая имеет фиксированную локатор ресурса, будь то IP-адрес, имя хоста, URL-адрес (с использованием внутреннего DNS) и т.д. Это происходит потому, что рабочие должны знать, где искать работу, работникам необходимо найти систему управления заданиями (не система управления заданиями найти работников).
Работы самого сервера на самом деле не сложная задача (в базовой системе или иначе), он должен хранить список заданий, раздавать рабочие места, получать результаты, а затем сохранять их для последующего использования. Как эти части (например, "раздавать рабочие места") определяются может быть очень простой. Позднее мы можем расширить системы включают административный интерфейс для добавления, редактирования, удаления, приостановить работу, но это выходит за это упражнение.
Существует никаких оснований, то, что ваша работа сервера не может быть виртуальная машина работает в течение вашего основного сервера обработки условии, что она не сливает воду слишком много ресурсов из него. Работу сервера однако нуждается в высокой доступности, если он идет вниз, в пятницу вечером вы будете терять все выходные обработки, потенциально стоит Вам пару недель стоит времени обработки (по сравнению с вашей основной сервер обработки в одиночку) . Вы можете хотеть рассмотреть вопрос о создании вашей работе сервера с балансировкой нагрузки среды для обеспечения высокой доступности.
Основные настройки
Базовые настройки для нашей работы сервера будет состоять из того, что я звоню одному из моих LIMP серверов (то есть Li ммк, м ySql, Р л.с.). Код, выполняемый на работников Теа действительно будет работать, какие работы он может работать, взаимодействуя с работой баз данных системы управления. Позже мы могли бы создать веб-сервис и фактически раздавать рабочие места вместо того, рабочие делают тяжелую работу сами, но сейчас мы будем продолжать использовать 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 WHERE `статус` = 1 AND `started_by` = __ME__;
- Используя наши критерии работы выбора, выберите работу и сказать системе управления, что этот работник имеет дело с ним:
UPDATE `работы` SET `статус` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `статус` = 0 ИЛИ
(`Статус` = 1 AND `started_at`> DATE_SUB (NOW (), интервал X ЧАС)) 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 мы создадим нашу виртуальную машину обработки и создали наши окна машины, чтобы стать времени простоя работников.