Компьютерный кластер — это набор компьютеров , которые работают вместе, так что их можно рассматривать как единую систему. В отличие от сетевых компьютеров , в компьютерных кластерах каждый узел настроен на выполнение одной и той же задачи, контролируемой и запланированной программным обеспечением. Новейшим проявлением кластерных вычислений являются облачные вычисления .
Компоненты кластера обычно соединены друг с другом через быстрые локальные сети , причем каждый узел (компьютер, используемый в качестве сервера) запускает свой собственный экземпляр операционной системы . В большинстве случаев все узлы используют одно и то же оборудование [1] [ нужен лучший источник ] и одну и ту же операционную систему, хотя в некоторых настройках (например, с использованием Open Source Cluster Application Resources (OSCAR)) на каждом компьютере могут использоваться разные операционные системы или разное оборудование. [2]
Кластеры обычно развертываются для повышения производительности и доступности по сравнению с одним компьютером, при этом они, как правило, гораздо более экономичны, чем отдельные компьютеры с сопоставимой скоростью или доступностью. [3]
Компьютерные кластеры появились в результате конвергенции ряда компьютерных тенденций, включая доступность недорогих микропроцессоров, высокоскоростных сетей и программного обеспечения для высокопроизводительных распределенных вычислений . [ требуется ссылка ] Они имеют широкий спектр применения и развертывания, начиная от небольших бизнес-кластеров с несколькими узлами до некоторых из самых быстрых суперкомпьютеров в мире, таких как Sequoia от IBM . [4] До появления кластеров использовались одноблочные отказоустойчивые мэйнфреймы с модульной избыточностью ; но более низкая первоначальная стоимость кластеров и повышенная скорость сетевой структуры способствовали принятию кластеров. В отличие от высоконадежных мэйнфреймов, кластеры дешевле в масштабировании, но также имеют повышенную сложность в обработке ошибок, поскольку в кластерах режимы ошибок не являются непрозрачными для работающих программ. [5]
Желание получить большую вычислительную мощность и лучшую надежность за счет объединения ряда недорогих коммерческих компьютеров, имеющихся в наличии, привело к появлению множества архитектур и конфигураций.
Подход к кластеризации компьютеров обычно (но не всегда) соединяет несколько легкодоступных вычислительных узлов (например, персональных компьютеров, используемых в качестве серверов) через быструю локальную сеть . [6] Действия вычислительных узлов координируются «кластерным промежуточным программным обеспечением», программным слоем, который находится поверх узлов и позволяет пользователям рассматривать кластер как в целом одну связную вычислительную единицу, например, с помощью концепции единого образа системы . [6]
Компьютерная кластеризация опирается на централизованный подход к управлению, который делает узлы доступными как оркестрованные общие серверы. Это отличается от других подходов, таких как одноранговые или сеточные вычисления , которые также используют много узлов, но с гораздо более распределенной природой . [6]
Компьютерный кластер может быть простой двухузловой системой, которая просто соединяет два персональных компьютера, или может быть очень быстрым суперкомпьютером . Базовый подход к построению кластера - это кластер Beowulf , который может быть построен с несколькими персональными компьютерами для создания экономически эффективной альтернативы традиционным высокопроизводительным вычислениям . Ранним проектом, который показал жизнеспособность концепции, был 133-узловой Stone Soupercomputer . [7] Разработчики использовали Linux , набор инструментов Parallel Virtual Machine и библиотеку Message Passing Interface для достижения высокой производительности при относительно низкой стоимости. [8]
Хотя кластер может состоять всего из нескольких персональных компьютеров, соединенных простой сетью, архитектура кластера может также использоваться для достижения очень высокого уровня производительности. Полугодовой список 500 самых быстрых суперкомпьютеров организации TOP500 часто включает в себя множество кластеров, например, самой быстрой машиной в мире в 2011 году был компьютер K , который имеет распределенную память , кластерную архитектуру. [9]
Грег Пфистер заявил, что кластеры были изобретены не каким-то конкретным поставщиком, а клиентами, которые не могли разместить всю свою работу на одном компьютере или нуждались в резервном копировании. [10] Пфистер оценивает дату как 1960-е годы. Формальная инженерная основа кластерных вычислений как средства выполнения параллельной работы любого рода была, вероятно, изобретена Джином Амдалом из IBM , который в 1967 году опубликовал то, что стало считаться основополагающей статьей о параллельной обработке: Закон Амдала .
История ранних компьютерных кластеров более или менее напрямую связана с историей ранних сетей, поскольку одной из основных причин развития сети было объединение вычислительных ресурсов и создание фактического компьютерного кластера.
Первой производственной системой, спроектированной как кластер, была Burroughs B5700 в середине 1960-х годов. Это позволяло тесно связывать до четырех компьютеров, каждый с одним или двумя процессорами, с общей подсистемой хранения данных на диске для распределения рабочей нагрузки. В отличие от стандартных многопроцессорных систем, каждый компьютер можно было перезапустить, не нарушая общую работу.
Первым коммерческим слабосвязанным кластерным продуктом была система "Attached Resource Computer" (ARC) корпорации Datapoint , разработанная в 1977 году и использующая ARCnet в качестве кластерного интерфейса. Кластеризация как таковая не получила широкого распространения, пока корпорация Digital Equipment Corporation не выпустила свой продукт VAXcluster в 1984 году для операционной системы VMS . Продукты ARC и VAXcluster поддерживали не только параллельные вычисления , но и общие файловые системы и периферийные устройства. Идея заключалась в том, чтобы обеспечить преимущества параллельной обработки, сохраняя при этом надежность и уникальность данных. Двумя другими заслуживающими внимания ранними коммерческими кластерами были Tandem NonStop (коммерческий продукт высокой доступности 1976 года) [11] [12] и IBM S/390 Parallel Sysplex (около 1994 года, в основном для использования в бизнесе).
В то же время, в то время как компьютерные кластеры использовали параллелизм вне компьютера в товарной сети, суперкомпьютеры начали использовать их в пределах одного компьютера. После успеха CDC 6600 в 1964 году, Cray 1 был выпущен в 1976 году и представил внутренний параллелизм посредством векторной обработки . [13] В то время как ранние суперкомпьютеры исключали кластеры и полагались на общую память , со временем некоторые из самых быстрых суперкомпьютеров (например, компьютер K ) полагались на кластерные архитектуры.
Компьютерные кластеры могут быть сконфигурированы для различных целей, начиная от общих бизнес-нужд, таких как поддержка веб-сервисов, до научных расчетов с интенсивными вычислениями. В любом случае кластер может использовать подход высокой доступности . Обратите внимание, что описанные ниже атрибуты не являются исключительными, и «компьютерный кластер» может также использовать подход высокой доступности и т. д.
Кластеры с « балансировкой нагрузки » — это конфигурации, в которых узлы кластера разделяют вычислительную нагрузку для обеспечения лучшей общей производительности. Например, кластер веб-сервера может назначать разные запросы разным узлам, поэтому общее время отклика будет оптимизировано. [14] Однако подходы к балансировке нагрузки могут существенно различаться в разных приложениях, например, высокопроизводительный кластер, используемый для научных вычислений, будет балансировать нагрузку с помощью разных алгоритмов из кластера веб-сервера, который может просто использовать простой метод циклического перебора , назначая каждый новый запрос другому узлу. [14]
Компьютерные кластеры используются для вычислительно-интенсивных целей, а не для обработки операций, ориентированных на ввод-вывод, таких как веб-сервис или базы данных. [15] Например, компьютерный кластер может поддерживать вычислительное моделирование аварий транспортных средств или погоды. Очень тесно связанные компьютерные кластеры предназначены для работы, которая может приближаться к « суперкомпьютерной ».
« Кластеры высокой доступности » (также известные как отказоустойчивые кластеры или кластеры HA) улучшают доступность кластерного подхода. Они работают за счет избыточных узлов , которые затем используются для предоставления услуг при отказе компонентов системы. Реализации кластеров HA пытаются использовать избыточность компонентов кластера для устранения отдельных точек отказа . Существуют коммерческие реализации кластеров высокой доступности для многих операционных систем. Проект Linux-HA является одним из широко используемых бесплатных пакетов программного обеспечения HA для операционной системы Linux .
Кластеры в первую очередь проектируются с учетом производительности, но установки основаны на многих других факторах. Отказоустойчивость ( способность системы продолжать работу, несмотря на неисправный узел ) обеспечивает масштабируемость , а в ситуациях с высокой производительностью позволяет проводить низкочастотные процедуры обслуживания, консолидацию ресурсов (например, RAID ) и централизованное управление. Преимущества включают в себя возможность восстановления данных в случае аварии и обеспечение параллельной обработки данных и высокой производительности. [16] [17]
С точки зрения масштабируемости кластеры обеспечивают это за счет возможности добавлять узлы горизонтально. Это означает, что в кластер можно добавлять больше компьютеров, чтобы улучшить его производительность, избыточность и отказоустойчивость. Это может быть недорогим решением для более производительного кластера по сравнению с масштабированием одного узла в кластере. Это свойство компьютерных кластеров может позволить выполнять большие вычислительные нагрузки большим количеством менее производительных компьютеров.
При добавлении нового узла в кластер надежность увеличивается, поскольку не требуется отключать весь кластер. Отдельный узел может быть отключен для обслуживания, в то время как остальная часть кластера принимает на себя нагрузку этого отдельного узла.
Если у вас большое количество компьютеров, объединенных в кластер, то можно использовать распределенные файловые системы и RAID , которые могут повысить надежность и скорость кластера.
Одной из проблем проектирования кластера является то, насколько тесно могут быть связаны отдельные узлы. Например, одно компьютерное задание может потребовать частого общения между узлами: это подразумевает, что кластер использует выделенную сеть, плотно расположен и, вероятно, имеет однородные узлы. Другая крайность — когда компьютерное задание использует один или несколько узлов и нуждается в небольшом количестве или вообще не нуждается в общении между узлами, приближаясь к грид-вычислениям .
В кластере Beowulf прикладные программы никогда не видят вычислительные узлы (также называемые подчиненными компьютерами), а взаимодействуют только с «главным», который является определенным компьютером, занимающимся планированием и управлением подчиненными компьютерами. [15] В типичной реализации главный компьютер имеет два сетевых интерфейса, один из которых взаимодействует с частной сетью Beowulf для подчиненных компьютеров, а другой — с сетью общего назначения организации. [15] Подчиненные компьютеры обычно имеют собственную версию той же операционной системы, а также локальную память и дисковое пространство. Однако частная подчиненная сеть может также иметь большой и общий файловый сервер, на котором хранятся глобальные постоянные данные, к которым подчиненные компьютеры обращаются по мере необходимости. [15]
Специальный кластер DEGIMA из 144 узлов настроен на выполнение астрофизических симуляций N-тел с использованием параллельного древовидного кода Multiple-Walk, а не на научные вычисления общего назначения. [18]
Из-за увеличения вычислительной мощности каждого поколения игровых консолей появилось новое применение, где они перепрофилируются в кластеры высокопроизводительных вычислений (HPC). Некоторые примеры кластеров игровых консолей — кластеры Sony PlayStation и кластеры Microsoft Xbox . Другим примером потребительского игрового продукта является рабочая станция Nvidia Tesla Personal Supercomputer , которая использует несколько графических ускорителей. Помимо игровых консолей, вместо этого могут использоваться и высокопроизводительные видеокарты. Использование видеокарт (или, скорее, их графических процессоров) для выполнения вычислений для сетевых вычислений намного экономичнее, чем использование центральных процессоров, несмотря на то, что они менее точны. Однако при использовании значений двойной точности они становятся такими же точными для работы, как и центральные процессоры, и все еще намного менее затратны (стоимость покупки). [2]
Компьютерные кластеры исторически работали на отдельных физических компьютерах с одной и той же операционной системой . С появлением виртуализации узлы кластера могут работать на отдельных физических компьютерах с разными операционными системами, которые изображены выше с виртуальным слоем, чтобы выглядеть одинаково. [19] [ требуется цитата ] [ требуется пояснение ] Кластер также может быть виртуализирован в различных конфигурациях по мере выполнения обслуживания; примером реализации является Xen в качестве менеджера виртуализации с Linux-HA . [19]
По мере появления компьютерных кластеров в 1980-х годах появились и суперкомпьютеры . Одним из элементов, отличавших три класса в то время, было то, что первые суперкомпьютеры полагались на общую память . Кластеры обычно не используют физически общую память, в то время как многие архитектуры суперкомпьютеров также отказались от нее.
Однако использование кластерной файловой системы имеет важное значение в современных компьютерных кластерах. [ требуется ссылка ] Примерами являются IBM General Parallel File System , Microsoft Cluster Shared Volumes или Oracle Cluster File System .
Два широко используемых подхода для связи между узлами кластера — это MPI ( интерфейс передачи сообщений ) и PVM ( параллельная виртуальная машина ). [20]
PVM была разработана в Национальной лаборатории Оук-Ридж примерно в 1989 году, до того как MPI стал доступен. PVM должна быть установлена непосредственно на каждом узле кластера и предоставляет набор программных библиотек, которые рисуют узел как «параллельную виртуальную машину». PVM предоставляет среду выполнения для передачи сообщений, управления задачами и ресурсами, а также уведомления об ошибках. PVM может использоваться пользовательскими программами, написанными на C, C++ или Fortran и т. д. [20] [21]
MPI появился в начале 1990-х годов в результате обсуждений среди 40 организаций. Первоначальные усилия были поддержаны ARPA и Национальным научным фондом . Вместо того, чтобы начинать заново, проект MPI опирался на различные функции, доступные в коммерческих системах того времени. Спецификации MPI затем дали начало конкретным реализациям. Реализации MPI обычно используют TCP/IP и сокетные соединения. [20] MPI в настоящее время является широкодоступной моделью связи, которая позволяет писать параллельные программы на таких языках, как C , Fortran , Python и т. д. [21] Таким образом, в отличие от PVM, которая обеспечивает конкретную реализацию, MPI является спецификацией, которая была реализована в таких системах, как MPICH и Open MPI . [21] [22]
Одной из проблем использования компьютерного кластера является стоимость его администрирования, которая порой может быть столь же высокой, как стоимость администрирования N независимых машин, если кластер имеет N узлов. [23] В некоторых случаях это дает преимущество архитектурам с общей памятью с более низкими расходами на администрирование. [23] Это также сделало виртуальные машины популярными из-за простоты администрирования. [23]
Когда большому многопользовательскому кластеру требуется доступ к очень большим объемам данных, планирование задач становится проблемой. В гетерогенном кластере CPU-GPU со сложной прикладной средой производительность каждой задачи зависит от характеристик базового кластера. Поэтому отображение задач на ядра CPU и устройства GPU представляет собой существенные проблемы. [24] Это область текущих исследований; были предложены и изучены алгоритмы, которые объединяют и расширяют MapReduce и Hadoop . [24]
Когда узел в кластере выходит из строя, такие стратегии, как « ограждение », могут быть использованы для поддержания работоспособности остальной части системы. [25] [26] Ограждение — это процесс изоляции узла или защиты общих ресурсов, когда узел, по-видимому, работает со сбоями. Существует два класса методов ограждения: один отключает сам узел, а другой запрещает доступ к ресурсам, таким как общие диски. [25]
Метод STONITH означает «Shoot The Other Node In The Head» (стрельба в голову другому узлу), что означает, что подозреваемый узел отключен или выключен. Например, силовое ограждение использует контроллер питания для отключения неработоспособного узла. [25]
Подход к ограждению ресурсов запрещает доступ к ресурсам без отключения питания узла. Это может включать постоянное ограждение резервирования через SCSI3 , ограждение оптоволоконного канала для отключения порта оптоволоконного канала или ограждение глобального сетевого блочного устройства (GNBD) для отключения доступа к серверу GNBD.
Кластеры балансировки нагрузки, такие как веб-серверы, используют кластерную архитектуру для поддержки большого количества пользователей, и обычно каждый запрос пользователя направляется на определенный узел, достигая параллелизма задач без многоузлового взаимодействия, учитывая, что главная цель системы — предоставление быстрого доступа пользователей к общим данным. Однако «компьютерные кластеры», которые выполняют сложные вычисления для небольшого количества пользователей, должны использовать преимущества параллельной обработки кластера и разделять «одно и то же вычисление» между несколькими узлами. [27]
Автоматическое распараллеливание программ остается технической проблемой, но модели параллельного программирования могут использоваться для достижения более высокой степени параллелизма посредством одновременного выполнения отдельных частей программы на разных процессорах. [27] [28]
Разработка и отладка параллельных программ на кластере требуют примитивов параллельного языка и подходящих инструментов, таких как те, которые обсуждались на форуме High Performance Debugging Forum (HPDF), что привело к появлению спецификаций HPD. [21] [29] Затем были разработаны такие инструменты, как TotalView , для отладки параллельных реализаций на компьютерных кластерах, которые используют интерфейс передачи сообщений (MPI) или параллельную виртуальную машину (PVM) для передачи сообщений.
Система сети рабочих станций Калифорнийского университета в Беркли ( NOW) собирает данные о кластерах и сохраняет их в базе данных, в то время как такая система, как PARMON, разработанная в Индии, позволяет визуально наблюдать и управлять большими кластерами. [21]
Контрольные точки приложений могут использоваться для восстановления заданного состояния системы, когда узел выходит из строя во время длительного многоузлового вычисления. [30] Это важно в больших кластерах, учитывая, что по мере увеличения числа узлов увеличивается и вероятность отказа узла при больших вычислительных нагрузках. Контрольные точки могут восстановить систему до стабильного состояния, чтобы обработка могла возобновиться без необходимости повторного вычисления результатов. [30]
Мир Linux поддерживает различное кластерное программное обеспечение; для кластеризации приложений есть distcc и MPICH . Linux Virtual Server , Linux-HA — кластеры на основе директора, которые позволяют распределять входящие запросы на услуги по нескольким узлам кластера. MOSIX , LinuxPMI , Kerrighed , OpenSSI — это полноценные кластеры, интегрированные в ядро , которые обеспечивают автоматическую миграцию процессов между однородными узлами. OpenSSI , openMosix и Kerrighed — это реализации образа для одной системы .
Компьютерный кластер Microsoft Windows Server 2003 на базе платформы Windows Server предоставляет компоненты для высокопроизводительных вычислений, такие как планировщик заданий, библиотека MSMPI и инструменты управления.
gLite — это набор технологий промежуточного программного обеспечения, созданный в рамках проекта Enabling Grids for E-sciencE (EGEE).
Slurm также используется для планирования и управления некоторыми из крупнейших суперкомпьютерных кластеров (см. список top500).
Хотя большинство компьютерных кластеров являются постоянными, были предприняты попытки флэш-моб-вычислений для создания краткосрочных кластеров для определенных вычислений. Однако более масштабные добровольные вычислительные системы, такие как системы на основе BOINC, имели больше последователей.