Кластерные системы: Реферат: Компьютеры и периферийные устройства. Компания мехатроника

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

Аналитики из IDC подсчитали, что объем рынка кластеров в 1997 году составлял всего 85 млн. долл., тогда как в прошлом году этот рынок «стоил» уже 367,7 млн. долл. Тенденция роста налицо.

Итак, попробуем расставить все точки над «i». На сегодняшний день не существует какого-либо четкого определения кластера. Более того, нет ни одного стандарта, четко регламентирующего кластер. Однако не стоит отчаиваться, ведь сама суть кластеризации не подразумевает соответствие какому-либо стандарту. Единственное, что определяет, что кластер - это кластер, так это набор требований, предъявляемых к таким системам. Перечислим эти требования (четыре правила):l надежность;l доступность функции (готовность);l масштабируемость;l вычислительная мощность. Исходя из этого сформулируем определение кластера. Кластер - это система произвольных устройств (серверы, дисковые накопители, системы хранения и пр.), обеспечивающих отказоустойчивость на уровне 99,999%, а также удовлетворяющая «четырем правилам». Для примера: серверный кластер - это группа серверов (обычно называемых узлами кластера), соединенных и сконфигурированных таким образом, чтобы предоставлять пользователю доступ к кластеру как к единому целостному ресурсу.

Отказоустойчивость

Несомненно, основной характеристикой в кластере является отказоустойчивость. Это подтверждает и опрос пользователей: 95% опрошенных ответили, что в кластерах им необходимы надежность и отказоустойчивость. Однако не следует смешивать эти два понятия. Под отказоустойчивостью понимается доступность тех или иных функций в случае сбоя, другими словами, это резервирование функций и распределение нагрузки. А под надежностью понимается набор средств обеспечения защиты от сбоев. Такие требования к надежности и отказоустойчивости кластерных систем обусловлены спецификой их использования. Приведем небольшой пример. Кластер обслуживает систему электронных платежей, поэтому если клиент в какой-то момент останется без обслуживания для компании-оператора, это ему будет дорого стоить. Другими словами, система должна работать в непрерывном режиме 24 часа в сутки и семь дней в неделю (7Ѕ24). При этом отказоустойчивости в 99% явно не достаточно, так как это означает, что почти четыре дня в году информационная система предприятия или оператора будет неработоспособной. Это может показаться не таким уж и большим сроком, учитывая профилактические работы и техническое обслуживание системы. Но сегодняшнему клиенту абсолютно безразличны причины, по которым система не работает. Ему нужны услуги. Итак, приемлемой цифрой для отказоустойчивости становится 99,999%, что эквивалентно 5 минутам в год. Таких показателей позволяет достичь сама архитектура кластера. Приведем пример серверного кластера: каждый сервер в кластере остается относительно независимым, то есть его можно остановить и выключить (например, для проведения профилактических работ или установки дополнительного оборудования), не нарушая работоспособность кластера в целом. Тесное взаимодействие серверов, образующих кластер (узлов кластера), гарантирует максимальную производительность и минимальное время простоя приложений за счет того, что:l в случае сбоя программного обеспечения на одном узле приложение продолжает функционировать (либо автоматически перезапускается) на других узлах кластера;l сбой или отказ узла (или узлов) кластера по любой причине (включая ошибки персонала) не означает выхода из строя кластера в целом;l профилактические и ремонтные работы, реконфигурацию и смену версий программного обеспечения в большинстве случаев можно осуществлять на узлах кластера поочередно, не прерывая работу приложений на других узлах кластера.Возможные простои, которые не в состоянии предотвратить обычные системы, в кластере оборачиваются либо некоторым снижением производительности (если узлы выключаются из работы), либо существенным сокращением (приложения недоступны только на короткий промежуток времени, необходимый для переключения на другой узел), что позволяет обеспечить уровень готовности в 99,99%.

Масштабируемость

Высокая стоимость кластерных систем обусловлена их сложностью. Поэтому масштабируемость кластера довольно актуальна. Ведь компьютеры, производительность которых удовлетворяет сегодняшние требования, не обязательно будет удовлетворять их и в будущем. Практически при любом ресурсе в системе рано или поздно приходится сталкиваться с проблемой производительности. В этом случае возможно два варианта масштабирования: горизонтальное и вертикальное. Большинство компьютерных систем допускают несколько способов повышения их производительности: добавление памяти, увеличение числа процессоров в многопроцессорных системах или добавление новых адаптеров или дисков. Такое масштабирование называется вертикальным и позволяет временно улучшить производительность системы. Однако в системе будет установлено максимальное поддерживаемое количество памяти, процессоров или дисков, системные ресурсы будут исчерпаны. И пользователь столкнется с той же проблемой улучшения характеристик компьютерной системы, что и ранее.Горизонтальное масштабирование предоставляет возможность добавлять в систему дополнительные компьютеры и распределять работу между ними. Таким образом, производительность новой системы в целом выходит за пределы предыдущей. Естественным ограничением такой системы будет программное обеспечение, которые вы решите на ней запускать. Самым простым примером использования такой системы является распределение различных приложений между разными компонентами системы. Например, вы можете переместить ваши офисные приложения на один кластерный узел приложения для Web на другой, корпоративные базы данных - на третий. Однако здесь возникает вопрос взаимодействия этих приложений между собой. И в этом случае масштабируемость обычно ограничивается данными, используемыми в приложениях. Различным приложениям, требующим доступ к одним и тем же данным, необходим способ, обеспечивающий доступ к данным с различных узлов такой системы. Решением в этом случае становятся технологии, которые, собственно, и делают кластер кластером, а не системой соединенных вместе машин. При этом, естественно, остается возможность вертикального масштабирования кластерной системы. Таким образом, за счет вертикального и горизонтального масштабирования кластерная модель обеспечивает серьезную защиту инвестиций потребителей.В качестве варианта горизонтального масштабирования стоит также отметить использование группы компьютеров, соединенных через коммутатор, распределяющий нагрузку (технология Load Balancing). Об этом довольно популярном варианте мы подробно расскажем в следующей статье. Здесь мы лишь отметим невысокую стоимость такого решения, в основном слагаемую из цены коммутатора (6 тыс. долл. и выше - в зависимости от функционального оснащения) и хост-адаптер (порядка нескольких сот долларов за каждый; хотя, конечно, можно использовать и обыкновенные сетевые карты). Такие решения находят основное применение на Web-узлах с высоким трафиком, где один сервер не справляется с обработкой всех поступающих запросов. Возможность распределения нагрузки между серверными узлами такой системы позволяет создавать на многих серверах единый Web-узел.

Beowulf, или Вычислительная мощность

Часто решения, похожие на вышеописанные, носят названия Beowulf-кластера. Такие системы прежде всего рассчитаны на максимальную вычислительную мощность. Поэтому дополнительные системы повышения надежности и отказоустойчивости просто не предусматриваются. Такое решение отличается чрезвычайно привлекательной ценой, и, наверное, поэтому наибольшую популярность приобрело во многих образовательных и научно-исследовательских организациях. Проект Beowulf появился в 1994 году - возникла идея создавать параллельные вычислительные системы (кластеры) из общедоступных компьютеров на базе Intel и недорогих Ethernet-сетей, устанавливая на эти компьютеры Linux и одну из бесплатно распространяемых коммуникационных библиотек (PVM, а затем MPI). Оказалось, что на многих классах задач и при достаточном числе узлов такие системы дают производительность, сравнимую с суперкомпьютерной. Как показывает практика, построить такую систему довольно просто. Все, что для этого нужно, это высокопроизводительный коммутатор и несколько подсоединенных к нему рабочих станций (серверов) с установленной операционной системой Linux. Однако этого недостаточно. Для того чтобы эта груда железа ожила, необходимо специальное программное обеспечение для параллельных вычислений.Наиболее распространенным интерфейсом параллельного программирования в модели передачи сообщений является MPI (Message Passing Interface). Название «Интерфейс передачи сообщений» говорит само за себя. Это хорошо стандартизованный механизм для построения параллельных программ в модели обмена сообщениями. Существуют бесплатные (!) и коммерческие реализации почти для всех суперкомпьютерных платформ, а также для сетей рабочих станций UNIX и Windows NT. В настоящее время MPI - наиболее широко используемый и динамично развивающийся интерфейс своего класса. Рекомендуемая бесплатная реализация MPI - пакет MPICH, разработанный в Аргоннской Национальной Лаборатории. Стандартизацией MPI занимается MPI Forum. Последняя версия стандарта - 2.0. В этой версии к MPI добавлены такие важные функции, как динамическое управление процессами, односторонние коммуникации (Put/Get), параллельный ввод-вывод.Постоянный спрос на высокие вычислительные мощности обусловил появление привлекательного для многих производителей рынка. Некоторые из них разработали собственные технологии соединения компьютеров в кластер. Наиболее известные из них - Myrinet производства MyriCom и cLAN фирмы Giganet. Myrinet является открытым стандартом. Для его реализации MyriCom предлагает широкий выбор сетевого оборудования по сравнительно невысоким ценам. На физическом уровне поддерживаются сетевые среды SAN (System Area Network), LAN (CL-2) и оптоволокно. Технология Myrinet дает высокие возможности масштабирования сети и в настоящее время очень широко используется при построении высокопроизводительных кластеров. Giganet занимается разработкой программных и аппаратных средств для непосредственного взаимодействия центральных процессорных устройств серверов кластера на гигабитных скоростях, минуя функции ОС. Стоимость решения составляет: около 2500 долл. - за 8-портовый коммутатор, 150 долл. - за адаптер для Myrinet, около 6250 долл. - за 8-портовый коммутатор и 800 долл. - за адаптер для Giganet. Последняя, кстати, получила на выставке Microsoft Tech Ed 2000 премию «Best of Show». В качестве примера приведем реализацию Beowulf-кластера в Институте высокопроизводительных вычислений и баз данных Министерства науки и технической политики РФ. Кластер, получивший название «ПАРИТЕТ», создан на базе общедоступных комплектующих для персональных компьютеров и рабочих станций и обеспечивает суммарную пиковую производительность 3,2 GFLOP/sec. Кластер состоит из четырех двухпроцессорных вычислительных узлов, на базе процессоров Intel Pentium II/450MHz. На каждом узле установлена оперативная память объемом 512 Мбайт и 10-гигабайтный жесткий диск на интерфейсе Ultra Wide SCSI. Вычислительные узлы кластера объединены высокопроизводительным коммутатором Myrinet (каналы с пропускной способностью 1,28 Гбайт/с, полный дуплекс). Имеется также резервная сеть, используемая для управления и конфигурирования (100 Mbit Fast Ethernet). На узлах вычислительного кластера установлена операционная система Linux (дистрибутив Red Hat 5,2). Для программирования параллельных приложений используются интерфейсы передачи сообщений MPI/PVM.

Мини-кластер от Dell и Compaq

Помимо коммутаторного решения для построения кластера существует еще целый ряд решений - как аппаратных, так и программных. Некоторые решения являются комплексными и поставляются «As is» - «все в одной коробке». Последний вариант - назовем его «кластер в коробке» - также является довольно популярным решением, поскольку рассчитан на массовый рынок и является кластером начального уровня (по производительности и параметрам масштабирования). Однако построение таких систем, взаимосвязь внутренних компонентов, надежность и отказоустойчивость полностью соответствуют «большим» системам. Для того чтобы разобраться, как устроен кластер, рассмотрим две похожие системы производства - Compaq и Dell. Кластеры от этих известных игроков компьютерного рынка построены из двух серверов DELL - PowerEdge 6100 либо PowerEdge 4200 и, в свою очередь, Compaq - Proliant 1850R. В качестве программного обеспечения используется Microsoft Cluster Server (Compaq, Dell) или Novell High-Availability Services for NetWare 4.0 / Clustering Services for NetWare 5.0 (Compaq). Программное обеспечение позволяет сконфигурировать два сервера таким образом, что, если в одном из серверов кластера происходит сбой, выполняемая им работа и приложения будут сразу же автоматически перенесены на другой сервер, что позволяет устранить простои. Оба сервера кластера предоставляют свои ресурсы для выполнения производственной работы, поэтому ни один из них не простаивает зря в ожидании, пока другой не выйдет из строя.Представленная на рисунке конфигурация является типичным кластером с реализацией принципа безотказности, обеспечивающим высокую степень работоспособности и дублирования компонентов на системном уровне. Связь между двумя серверами осуществляется по так называемому пульсирующему соединению (Heartbeat) выделенного участка локальной сети. При возникновении сбоя на основном сервере второй сервер, следящий за поступающими по пульсирующему соединению сообщениями, узнает об отключении основного сервера и перекладывает на себя рабочую нагрузку, выполнявшуюся вышедшей из строя машиной. В число выполняемых функций входит запуск прикладных программ, процессов и обслуживания, требуемых для ответа на запросы клиентов на предоставление доступа к вышедшему из строя серверу. Хотя каждый из серверов кластера должен иметь все ресурсы, требуемые для возложения на себя функций другого сервера, основные выполняемые обязанности могут быть абсолютно разными. Вторичный сервер, входящий в кластер с реализацией принципа безотказности, отвечает требованию предоставления возможности «горячего» резервирования, но помимо этого он может выполнять и свои собственные приложения. Однако, несмотря на массовое дублирование ресурсов, у такого кластера есть «узкое» место (bottle neck) - интерфейс шины SCSI и разделяемой системы внешней памяти, выход которых из строя влечет за собой сбой кластера. Хотя, по утверждениям производителей, вероятность этого ничтожно мала.Такие мини-кластеры прежде всего рассчитаны на автономную работу без постоянного контроля и администрирования. В качестве примера использования можно привести решение для удаленных офисов больших компаний для обеспечения высокой готовности (7Ѕ24) наиболее ответственных приложений (баз данных, почтовых систем и т.д.). С учетом повышения спроса на мощные и в то же время отказоустойчивые системы начального уровня рынок для этих кластеров выглядит довольно благоприятным. Единственное «но» в том, что не каждый потенциальный потребитель кластерных систем готов выложить за двухсерверную систему около 20 тыс. долл.

Сухой остаток

В качестве резюме следует отметить, что у кластеров наконец-то появился массовый рынок. Такой вывод легко можно сделать исходя из прогнозов аналитиков Standish Group International, которые утверждают, что в следующие два года общемировой рост количества установленных кластерных систем составит 160%. Кроме того, аналитики из IDC подсчитали, что объем рынка кластеров в 1997 году составлял всего 85 млн. долл., а в прошлом году этот рынок «стоил» уже 367,7 млн. долл. Тенденция роста налицо. И действительно, потребность в кластерных решениях сегодня возникает не только в крупных центрах обработки данных, но и в небольших компаниях, которые не хотят жить по принципу «скупой платит дважды» и вкладывают свои деньги в высоконадежные и легкомасштабируемые кластерные системы. Благо, что вариантов реализации кластера более чем достаточно. Однако при выборе какого-либо решения не следует забывать, что все параметры кластера взаимозависимы. Другими словами, нужно четко определить приоритеты на необходимые функциональные возможности кластера, поскольку при увеличении производительности уменьшается степень готовности (доступность). Увеличение производительности и обеспечение требуемого уровня готовности неизбежно ведет к росту стоимости решения. Таким образом, пользователю необходимо сделать самое важное - найти золотую середину возможностей кластера на текущий момент. Это сделать тем труднее, чем больше разнообразных решений предлагается сегодня на рынке кластеров.При подготовке статьи использованы материалы WWW-серверов: http://www.dell.ru/ , http://www.compaq.ru/ , http://www.ibm.ru/ , http://www.parallel.ru/ , http://www.giganet.com/ , http://www.myri.com/

КомпьютерПресс 10"2000

Материал из Википедии - свободной энциклопедии

Кластеры распределения нагрузки (Network Load Balancing, NLB)

Принцип их действия строится на распределении запросов через один или несколько входных узлов, которые перенаправляют их на обработку в остальные, вычислительные узлы. Первоначальная цель такого кластера - производительность, однако, в них часто используются также и методы, повышающие надёжность. Подобные конструкции называются серверными фермами . Программное обеспечение (ПО) может быть как коммерческим (OpenVMS , MOSIX , Platform LSF HPC, Solaris Cluster , Moab Cluster Suite, Maui Cluster Scheduler), так и бесплатным (OpenMosix , Sun Grid Engine , Linux Virtual Server).

Вычислительные кластеры

Кластеры используются в вычислительных целях, в частности в научных исследованиях. Для вычислительных кластеров существенными показателями являются высокая производительность процессора в операциях над числами с плавающей точкой (flops) и низкая латентность объединяющей сети, и менее существенными - скорость операций ввода-вывода, которая в большей степени важна для баз данных и web-сервисов . Вычислительные кластеры позволяют уменьшить время расчетов, по сравнению с одиночным компьютером, разбивая задание на параллельно выполняющиеся ветки, которые обмениваются данными по связывающей сети. Одна из типичных конфигураций - набор компьютеров, собранных из общедоступных компонентов, с установленной на них операционной системой Linux, и связанных сетью Ethernet , Myrinet , InfiniBand или другими относительно недорогими сетями. Такую систему принято называть кластером Beowulf . Специально выделяют высокопроизводительные кластеры (Обозначаются англ. аббревиатурой HPC Cluster - High-performance computing cluster ). Список самых мощных высокопроизводительных компьютеров (также может обозначаться англ. аббревиатурой HPC ) можно найти в мировом рейтинге TOP500 . В России ведется рейтинг самых мощных компьютеров СНГ.

Системы распределенных вычислений (grid)

Такие системы не принято считать кластерами, но их принципы в значительной степени сходны с кластерной технологией. Их также называют grid-системами . Главное отличие - низкая доступность каждого узла, то есть невозможность гарантировать его работу в заданный момент времени (узлы подключаются и отключаются в процессе работы), поэтому задача должна быть разбита на ряд независимых друг от друга процессов. Такая система, в отличие от кластеров, не похожа на единый компьютер, а служит упрощённым средством распределения вычислений. Нестабильность конфигурации, в таком случае, компенсируется больши́м числом узлов.

Кластер серверов, организуемых программно

Кластерные системы занимают достойное место в списке самых быстрых, при этом значительно выигрывая у суперкомпьютеров в цене. На июль 2008 года на 7 месте рейтинга TOP500 находится кластер SGI Altix ICE 8200 (Chippewa Falls , Висконсин , США).

Сравнительно дешёвую альтернативу суперкомпьютерам представляют кластеры, основанные на концепции Beowulf , которые строятся из обыкновенных недорогих компьютеров на основе бесплатного программного обеспечения. Один из практических примеров такой системы - Stone Soupercomputer в Национальной лаборатории Ок-Ридж (Теннесси , США, 1997).

Крупнейший кластер, принадлежащий частному лицу (из 1000 процессоров), был построен Джоном Коза (John Koza).

История

История создания кластеров неразрывно связана с ранними разработками в области компьютерных сетей. Одной из причин для появления скоростной связи между компьютерами стали надежды на объединение вычислительных ресурсов. В начале 1970-х годов группой разработчиков протокола TCP/IP и лабораторией Xerox PARC были закреплены стандарты сетевого взаимодействия. Появилась и операционная система Hydra для компьютеров PDP-11 производства DEC , созданный на этой основе кластер был назван C.mpp (Питтсбург , штат Пенсильвания , США, 1971 год). Тем не менее, только около 1983 года были созданы механизмы, позволяющие с лёгкостью пользоваться распределением задач и файлов через сеть, по большей части это были разработки в SunOS (операционной системе на основе BSD от компании Sun Microsystems).

Первым коммерческим проектом кластера стал ARCNet , созданный компанией Datapoint в 1977 году. Прибыльным он не стал, и поэтому строительство кластеров не развивалось до 1984 года, когда DEC построила свой VAXcluster на основе операционной системы VAX/VMS . ARCNet и VAXcluster были рассчитаны не только на совместные вычисления, но и совместное использование файловой системы и периферии с учётом сохранения целостности и однозначности данных. VAXCluster (называемый теперь VMSCluster) - является неотъемлемой компонентой операционной системы OpenVMS , использующих процессоры DEC Alpha и Itanium .

Два других ранних кластерных продукта, получивших признание, включают Tandem Hymalaya (1994, класс ) и IBM S/390 Parallel Sysplex (1994).

История создания кластеров из обыкновенных персональных компьютеров во многом обязана проекту Parallel Virtual Machine . В 1989 году это программное обеспечение для объединения компьютеров в виртуальный суперкомпьютер открыло возможность мгновенного создания кластеров. В результате суммарная производительность всех созданных тогда дешёвых кластеров обогнала по производительности сумму мощностей «серьёзных» коммерческих систем.

Создание кластеров на основе дешёвых персональных компьютеров, объединённых сетью передачи данных, продолжилось в 1993 году силами Американского аэрокосмического агентства NASA , затем в 1995 году получили развитие кластеры Beowulf , специально разработанные на основе этого принципа. Успехи таких систем подтолкнули развитие grid-сетей , которые существовали ещё с момента создания UNIX .

Программные средства

Широко распространённым средством для организации межсерверного взаимодействия является библиотека MPI , поддерживающая языки и Fortran . Она используется, например, в программе моделирования погоды .

Операционная система Solaris предоставляет программное обеспечение Solaris Cluster , которое служит для обеспечения высокой доступности и безотказности серверов, работающих под управлением Solaris. Для OpenSolaris существует реализация с открытым кодом под названием OpenSolaris HA Cluster .

Среди пользователей GNU/Linux популярны несколько программ:

  • distcc , MPICH и др. - специализированные средства для распараллеливания работы программ. distcc допускает параллельную компиляцию в GNU Compiler Collection .
  • Linux Virtual Server , Linux-HA - узловое ПО для распределения запросов между вычислительными серверами.
  • MOSIX , openMosix , Kerrighed , OpenSSI - полнофункциональные кластерные среды, встроенные в ядро, автоматически распределяющие задачи между однородными узлами. OpenSSI, openMosix и Kerrighed создают между узлами.

Кластерные механизмы планируется встроить и в ядро DragonFly BSD , ответвившуюся в 2003 году от FreeBSD 4.8. В дальних планах также превращение её в среду единой операционной системы .

Компанией Microsoft выпускается HA-кластер для операционной системы Windows . Существует мнение, что он создан на основе технологии Digital Equipment Corporation , поддерживает до 16 (с 2010 года) узлов в кластере, а также работу в сети SAN (Storage Area Network). Набор API-интерфейсов служит для поддержки распределяемых приложений, есть заготовки для работы с программами, не предусматривающими работы в кластере.

Windows Compute Cluster Server 2003 (CCS), выпущенный в июне 2006 года разработан для высокотехнологичных приложений, которые требуют кластерных вычислений. Издание разработано для развертывания на множестве компьютеров, которые собираются в кластер для достижения мощностей суперкомпьютера. Каждый кластер на Windows Compute Cluster Server состоит из одного или нескольких управляющих машин, распределяющих задания и нескольких подчиненных машин, выполняющих основную работу. В ноябре 2008 года представлен Windows HPC Server 2008, призванный заменить Windows Compute Cluster Server 2003.

Напишите отзыв о статье "Кластер (группа компьютеров)"

Примечания

См. также

Ссылки

Отрывок, характеризующий Кластер (группа компьютеров)

– Ну, бг"ат, тепег"ь поедем обсушимся, – сказал он Пете.
Подъезжая к лесной караулке, Денисов остановился, вглядываясь в лес. По лесу, между деревьев, большими легкими шагами шел на длинных ногах, с длинными мотающимися руками, человек в куртке, лаптях и казанской шляпе, с ружьем через плечо и топором за поясом. Увидав Денисова, человек этот поспешно швырнул что то в куст и, сняв с отвисшими полями мокрую шляпу, подошел к начальнику. Это был Тихон. Изрытое оспой и морщинами лицо его с маленькими узкими глазами сияло самодовольным весельем. Он, высоко подняв голову и как будто удерживаясь от смеха, уставился на Денисова.
– Ну где пг"опадал? – сказал Денисов.
– Где пропадал? За французами ходил, – смело и поспешно отвечал Тихон хриплым, но певучим басом.
– Зачем же ты днем полез? Скотина! Ну что ж, не взял?..
– Взять то взял, – сказал Тихон.
– Где ж он?
– Да я его взял сперва наперво на зорьке еще, – продолжал Тихон, переставляя пошире плоские, вывернутые в лаптях ноги, – да и свел в лес. Вижу, не ладен. Думаю, дай схожу, другого поаккуратнее какого возьму.
– Ишь, шельма, так и есть, – сказал Денисов эсаулу. – Зачем же ты этого не пг"ивел?
– Да что ж его водить то, – сердито и поспешно перебил Тихон, – не гожающий. Разве я не знаю, каких вам надо?
– Эка бестия!.. Ну?..
– Пошел за другим, – продолжал Тихон, – подполоз я таким манером в лес, да и лег. – Тихон неожиданно и гибко лег на брюхо, представляя в лицах, как он это сделал. – Один и навернись, – продолжал он. – Я его таким манером и сграбь. – Тихон быстро, легко вскочил. – Пойдем, говорю, к полковнику. Как загалдит. А их тут четверо. Бросились на меня с шпажками. Я на них таким манером топором: что вы, мол, Христос с вами, – вскрикнул Тихон, размахнув руками и грозно хмурясь, выставляя грудь.
– То то мы с горы видели, как ты стречка задавал через лужи то, – сказал эсаул, суживая свои блестящие глаза.
Пете очень хотелось смеяться, но он видел, что все удерживались от смеха. Он быстро переводил глаза с лица Тихона на лицо эсаула и Денисова, не понимая того, что все это значило.
– Ты дуг"ака то не представляй, – сказал Денисов, сердито покашливая. – Зачем пег"вого не пг"ивел?
Тихон стал чесать одной рукой спину, другой голову, и вдруг вся рожа его растянулась в сияющую глупую улыбку, открывшую недостаток зуба (за что он и прозван Щербатый). Денисов улыбнулся, и Петя залился веселым смехом, к которому присоединился и сам Тихон.
– Да что, совсем несправный, – сказал Тихон. – Одежонка плохенькая на нем, куда же его водить то. Да и грубиян, ваше благородие. Как же, говорит, я сам анаральский сын, не пойду, говорит.
– Экая скотина! – сказал Денисов. – Мне расспросить надо…
– Да я его спрашивал, – сказал Тихон. – Он говорит: плохо зн аком. Наших, говорит, и много, да всё плохие; только, говорит, одна названия. Ахнете, говорит, хорошенько, всех заберете, – заключил Тихон, весело и решительно взглянув в глаза Денисова.
– Вот я те всыплю сотню гог"ячих, ты и будешь дуг"ака то ког"чить, – сказал Денисов строго.
– Да что же серчать то, – сказал Тихон, – что ж, я не видал французов ваших? Вот дай позатемняет, я табе каких хошь, хоть троих приведу.
– Ну, поедем, – сказал Денисов, и до самой караулки он ехал, сердито нахмурившись и молча.
Тихон зашел сзади, и Петя слышал, как смеялись с ним и над ним казаки о каких то сапогах, которые он бросил в куст.
Когда прошел тот овладевший им смех при словах и улыбке Тихона, и Петя понял на мгновенье, что Тихон этот убил человека, ему сделалось неловко. Он оглянулся на пленного барабанщика, и что то кольнуло его в сердце. Но эта неловкость продолжалась только одно мгновенье. Он почувствовал необходимость повыше поднять голову, подбодриться и расспросить эсаула с значительным видом о завтрашнем предприятии, с тем чтобы не быть недостойным того общества, в котором он находился.
Посланный офицер встретил Денисова на дороге с известием, что Долохов сам сейчас приедет и что с его стороны все благополучно.
Денисов вдруг повеселел и подозвал к себе Петю.
– Ну, г"асскажи ты мне пг"о себя, – сказал он.

Петя при выезде из Москвы, оставив своих родных, присоединился к своему полку и скоро после этого был взят ординарцем к генералу, командовавшему большим отрядом. Со времени своего производства в офицеры, и в особенности с поступления в действующую армию, где он участвовал в Вяземском сражении, Петя находился в постоянно счастливо возбужденном состоянии радости на то, что он большой, и в постоянно восторженной поспешности не пропустить какого нибудь случая настоящего геройства. Он был очень счастлив тем, что он видел и испытал в армии, но вместе с тем ему все казалось, что там, где его нет, там то теперь и совершается самое настоящее, геройское. И он торопился поспеть туда, где его не было.
Когда 21 го октября его генерал выразил желание послать кого нибудь в отряд Денисова, Петя так жалостно просил, чтобы послать его, что генерал не мог отказать. Но, отправляя его, генерал, поминая безумный поступок Пети в Вяземском сражении, где Петя, вместо того чтобы ехать дорогой туда, куда он был послан, поскакал в цепь под огонь французов и выстрелил там два раза из своего пистолета, – отправляя его, генерал именно запретил Пете участвовать в каких бы то ни было действиях Денисова. От этого то Петя покраснел и смешался, когда Денисов спросил, можно ли ему остаться. До выезда на опушку леса Петя считал, что ему надобно, строго исполняя свой долг, сейчас же вернуться. Но когда он увидал французов, увидал Тихона, узнал, что в ночь непременно атакуют, он, с быстротою переходов молодых людей от одного взгляда к другому, решил сам с собою, что генерал его, которого он до сих пор очень уважал, – дрянь, немец, что Денисов герой, и эсаул герой, и что Тихон герой, и что ему было бы стыдно уехать от них в трудную минуту.
Уже смеркалось, когда Денисов с Петей и эсаулом подъехали к караулке. В полутьме виднелись лошади в седлах, казаки, гусары, прилаживавшие шалашики на поляне и (чтобы не видели дыма французы) разводившие красневший огонь в лесном овраге. В сенях маленькой избушки казак, засучив рукава, рубил баранину. В самой избе были три офицера из партии Денисова, устроивавшие стол из двери. Петя снял, отдав сушить, свое мокрое платье и тотчас принялся содействовать офицерам в устройстве обеденного стола.
Через десять минут был готов стол, покрытый салфеткой. На столе была водка, ром в фляжке, белый хлеб и жареная баранина с солью.
Сидя вместе с офицерами за столом и разрывая руками, по которым текло сало, жирную душистую баранину, Петя находился в восторженном детском состоянии нежной любви ко всем людям и вследствие того уверенности в такой же любви к себе других людей.
– Так что же вы думаете, Василий Федорович, – обратился он к Денисову, – ничего, что я с вами останусь на денек? – И, не дожидаясь ответа, он сам отвечал себе: – Ведь мне велено узнать, ну вот я и узнаю… Только вы меня пустите в самую… в главную. Мне не нужно наград… А мне хочется… – Петя стиснул зубы и оглянулся, подергивая кверху поднятой головой и размахивая рукой.
– В самую главную… – повторил Денисов, улыбаясь.
– Только уж, пожалуйста, мне дайте команду совсем, чтобы я командовал, – продолжал Петя, – ну что вам стоит? Ах, вам ножик? – обратился он к офицеру, хотевшему отрезать баранины. И он подал свой складной ножик.
Офицер похвалил ножик.
– Возьмите, пожалуйста, себе. У меня много таких… – покраснев, сказал Петя. – Батюшки! Я и забыл совсем, – вдруг вскрикнул он. – У меня изюм чудесный, знаете, такой, без косточек. У нас маркитант новый – и такие прекрасные вещи. Я купил десять фунтов. Я привык что нибудь сладкое. Хотите?.. – И Петя побежал в сени к своему казаку, принес торбы, в которых было фунтов пять изюму. – Кушайте, господа, кушайте.
– А то не нужно ли вам кофейник? – обратился он к эсаулу. – Я у нашего маркитанта купил, чудесный! У него прекрасные вещи. И он честный очень. Это главное. Я вам пришлю непременно. А может быть еще, у вас вышли, обились кремни, – ведь это бывает. Я взял с собою, у меня вот тут… – он показал на торбы, – сто кремней. Я очень дешево купил. Возьмите, пожалуйста, сколько нужно, а то и все… – И вдруг, испугавшись, не заврался ли он, Петя остановился и покраснел.
Он стал вспоминать, не сделал ли он еще каких нибудь глупостей. И, перебирая воспоминания нынешнего дня, воспоминание о французе барабанщике представилось ему. «Нам то отлично, а ему каково? Куда его дели? Покормили ли его? Не обидели ли?» – подумал он. Но заметив, что он заврался о кремнях, он теперь боялся.
«Спросить бы можно, – думал он, – да скажут: сам мальчик и мальчика пожалел. Я им покажу завтра, какой я мальчик! Стыдно будет, если я спрошу? – думал Петя. – Ну, да все равно!» – и тотчас же, покраснев и испуганно глядя на офицеров, не будет ли в их лицах насмешки, он сказал:
– А можно позвать этого мальчика, что взяли в плен? дать ему чего нибудь поесть… может…
– Да, жалкий мальчишка, – сказал Денисов, видимо, не найдя ничего стыдного в этом напоминании. – Позвать его сюда. Vincent Bosse его зовут. Позвать.
– Я позову, – сказал Петя.
– Позови, позови. Жалкий мальчишка, – повторил Денисов.
Петя стоял у двери, когда Денисов сказал это. Петя пролез между офицерами и близко подошел к Денисову.
– Позвольте вас поцеловать, голубчик, – сказал он. – Ах, как отлично! как хорошо! – И, поцеловав Денисова, он побежал на двор.
– Bosse! Vincent! – прокричал Петя, остановясь у двери.
– Вам кого, сударь, надо? – сказал голос из темноты. Петя отвечал, что того мальчика француза, которого взяли нынче.
– А! Весеннего? – сказал казак.
Имя его Vincent уже переделали: казаки – в Весеннего, а мужики и солдаты – в Висеню. В обеих переделках это напоминание о весне сходилось с представлением о молоденьком мальчике.
– Он там у костра грелся. Эй, Висеня! Висеня! Весенний! – послышались в темноте передающиеся голоса и смех.
– А мальчонок шустрый, – сказал гусар, стоявший подле Пети. – Мы его покормили давеча. Страсть голодный был!
В темноте послышались шаги и, шлепая босыми ногами по грязи, барабанщик подошел к двери.
– Ah, c"est vous! – сказал Петя. – Voulez vous manger? N"ayez pas peur, on ne vous fera pas de mal, – прибавил он, робко и ласково дотрогиваясь до его руки. – Entrez, entrez. [Ах, это вы! Хотите есть? Не бойтесь, вам ничего не сделают. Войдите, войдите.]
– Merci, monsieur, [Благодарю, господин.] – отвечал барабанщик дрожащим, почти детским голосом и стал обтирать о порог свои грязные ноги. Пете многое хотелось сказать барабанщику, но он не смел. Он, переминаясь, стоял подле него в сенях. Потом в темноте взял его за руку и пожал ее.
– Entrez, entrez, – повторил он только нежным шепотом.
«Ах, что бы мне ему сделать!» – проговорил сам с собою Петя и, отворив дверь, пропустил мимо себя мальчика.
Когда барабанщик вошел в избушку, Петя сел подальше от него, считая для себя унизительным обращать на него внимание. Он только ощупывал в кармане деньги и был в сомненье, не стыдно ли будет дать их барабанщику.

От барабанщика, которому по приказанию Денисова дали водки, баранины и которого Денисов велел одеть в русский кафтан, с тем, чтобы, не отсылая с пленными, оставить его при партии, внимание Пети было отвлечено приездом Долохова. Петя в армии слышал много рассказов про необычайные храбрость и жестокость Долохова с французами, и потому с тех пор, как Долохов вошел в избу, Петя, не спуская глаз, смотрел на него и все больше подбадривался, подергивая поднятой головой, с тем чтобы не быть недостойным даже и такого общества, как Долохов.
Наружность Долохова странно поразила Петю своей простотой.
Денисов одевался в чекмень, носил бороду и на груди образ Николая чудотворца и в манере говорить, во всех приемах выказывал особенность своего положения. Долохов же, напротив, прежде, в Москве, носивший персидский костюм, теперь имел вид самого чопорного гвардейского офицера. Лицо его было чисто выбрито, одет он был в гвардейский ваточный сюртук с Георгием в петлице и в прямо надетой простой фуражке. Он снял в углу мокрую бурку и, подойдя к Денисову, не здороваясь ни с кем, тотчас же стал расспрашивать о деле. Денисов рассказывал ему про замыслы, которые имели на их транспорт большие отряды, и про присылку Пети, и про то, как он отвечал обоим генералам. Потом Денисов рассказал все, что он знал про положение французского отряда.
– Это так, но надо знать, какие и сколько войск, – сказал Долохов, – надо будет съездить. Не зная верно, сколько их, пускаться в дело нельзя. Я люблю аккуратно дело делать. Вот, не хочет ли кто из господ съездить со мной в их лагерь. У меня мундиры с собою.
– Я, я… я поеду с вами! – вскрикнул Петя.
– Совсем и тебе не нужно ездить, – сказал Денисов, обращаясь к Долохову, – а уж его я ни за что не пущу.
– Вот прекрасно! – вскрикнул Петя, – отчего же мне не ехать?..
– Да оттого, что незачем.
– Ну, уж вы меня извините, потому что… потому что… я поеду, вот и все. Вы возьмете меня? – обратился он к Долохову.
– Отчего ж… – рассеянно отвечал Долохов, вглядываясь в лицо французского барабанщика.
– Давно у тебя молодчик этот? – спросил он у Денисова.
– Нынче взяли, да ничего не знает. Я оставил его пг"и себе.
– Ну, а остальных ты куда деваешь? – сказал Долохов.
– Как куда? Отсылаю под г"асписки! – вдруг покраснев, вскрикнул Денисов. – И смело скажу, что на моей совести нет ни одного человека. Разве тебе тг"удно отослать тг"идцать ли, тг"иста ли человек под конвоем в гог"од, чем маг"ать, я пг"ямо скажу, честь солдата.
– Вот молоденькому графчику в шестнадцать лет говорить эти любезности прилично, – с холодной усмешкой сказал Долохов, – а тебе то уж это оставить пора.
– Что ж, я ничего не говорю, я только говорю, что я непременно поеду с вами, – робко сказал Петя.
– А нам с тобой пора, брат, бросить эти любезности, – продолжал Долохов, как будто он находил особенное удовольствие говорить об этом предмете, раздражавшем Денисова. – Ну этого ты зачем взял к себе? – сказал он, покачивая головой. – Затем, что тебе его жалко? Ведь мы знаем эти твои расписки. Ты пошлешь их сто человек, а придут тридцать. Помрут с голоду или побьют. Так не все ли равно их и не брать?

Вершина современной инженерной мысли - сервер Hewlett-Packard Integrity Model SD64A. Огромная SMP-система, объединяющая в себе 64 процессора Intel Itanium 2 с частотой 1,6 ГГц и 256 Гбайт оперативной памяти, колоссальная производительность, внушительная цена - 6,5 млн. долларов…

Вершина современной инженерной мысли - сервер Hewlett-Packard Integrity Model SD64A. Огромная SMP-система, объединяющая в себе 64 процессора Intel Itanium 2 с частотой 1,6 ГГц и 256 Гбайт оперативной памяти, колоссальная производительность, внушительная цена - 6,5 млн. долларов…

Нижняя строчка свежего рейтинга пятисот самых быстрых компьютеров мира: принадлежащий группе компаний SunTrust Banks Florida кластер на основе блейд-серверов HP ProLiant BL-25p. 480 процессоров Intel Xeon 3,2 ГГц; 240 Гбайт оперативной памяти. Цена - меньше миллиона долларов.

Как-то странно получается, согласитесь: шесть с половиной миллионов долларов за 64-процессорный сервер и вдесятеро меньше - за примерно аналогичный по объему памяти и дисковой подсистеме, но уже 480-процессорный суперкомпьютер, причем от того же самого производителя. Впрочем, странно это только на первый взгляд: общего у двух компьютеров совсем немного. SD64A - представитель "классического" направления симметричной многопроцессорности (SMP), хорошо знакомого нам по обычным серверам и многоядерным системам, позволяющий использовать "традиционное" параллельное ПО. Это кучка процессоров, много оперативной памяти и очень сложная система, сводящая их (и периферию сервера) в единое целое; причем даже весьма недешевые процессоры (по четыре тысячи долларов за каждый) и огромный объем оперативной памяти (по двести долларов за каждый гигабайт) - лишь малая часть стоимости этой "объединяющей" части сервера. Машина же SunTrust Bank Florida - представитель современного "кластерного" направления и по сути - просто набор соединенных в Ethernet-сеть обычных "недорогих" (по паре тысяч долларов за штуку) компьютеров. Серверная стойка, набор кабелей, система питания и охлаждения - вот и все, что эти компьютеры объединяет.

Что такое кластер?

Стандартное определение таково: кластер - это набор вычислительных узлов (вполне самостоятельных компьютеров), связанных высокоскоростной сетью (интерконнектом) и объединенных в логическое целое специальным программным обеспечением. Фактически простейший кластер можно собрать из нескольких персоналок, находящихся в одной локальной сети, просто установив на них соответствующее ПО[Всех желающих сделать это самостоятельно отсылаем к статье Михаила Попова "Еда и кластеры на скорую руку" (offline.computerra.ru/2002/430/15844), которая до сих пор актуальна]. Однако подобные схемы - скорее редкость, нежели правило: обычно кластеры (даже недорогие) собираются из специально выделенных для этой цели компьютеров и связываются друг с другом отдельной локальной сетью.

В чем идея подобного объединения? Кластеры ассоциируются у нас с суперкомпьютерами, круглые сутки решающими на десятках, сотнях и тысячах вычислительных узлов какую-нибудь сверхбольшую задачу, но на практике существует и множество куда более "приземленных" кластерных применений. Часто встречаются кластеры, в которых одни узлы, дублируя другие, готовы в любой момент перехватить управление, или, например, одни узлы, проверяя получаемые с другого узла результаты, радикально повышают надежность системы. Еще одно популярное применение кластеров - решение задачи массового обслуживания, когда серверу приходится отвечать на большое количество независимых запросов, которые можно легко раскидать по разным вычислительным узлам[Обычно эту штуку называют серверной фермой, именно по такому принципу работает Google]. Однако рассказывать об этих двух, если угодно, "вырожденных" случаях кластерных систем практически нечего - из их краткого описания и так ясно, как они работают; поэтому разговор наш пойдет именно о суперкомпьютерах.
Итак, суперкомпьютер-кластер. Он состоит из трех основных компонентов: собственно "вычислялок" - компьютеров, образующих узлы кластера; интерконнекта, соединяющего эти узлы в сеть, и программного обеспечения, заставляющего всю конструкцию "почувствовать" себя единым компьютером. В роли вычислительных узлов может выступать что угодно - от старой никому не нужной персоналки до современного четырехпроцессорного сервера, причем их количество ничем не ограниченно (ну разве что площадью помещения да здравым смыслом). Чем быстрее и чем больше - тем лучше; и как эти узлы устроены, тоже неважно[Обычно для упрощения решения и непростой задачи балансировки нагрузки на разные узлы кластера все узлы в кластере делают одинаковыми, но даже это требование не абсолютно]. Гораздо интереснее обстоят дела с интерконнектом и программным обеспечением.

Как устроен кластер?

История развития кластерных систем неразрывно связана с развитием сетевых технологий. Дело в том, что, чем больше элементов в кластере и чем они быстрее, (и, соответственно, чем выше быстродействие всего кластера), тем более жесткие требования предъявляются к скорости интерконнекта. Можно собрать кластерную систему хоть из 10 тысяч узлов, но если вы не обеспечите достаточной скорости обмена данными, то производительность компьютера по-прежнему оставит желать лучшего. А поскольку кластеры в высокопроизводительных вычислениях - это практически всегда суперкомпьютеры[Программирование для кластеров - весьма трудоемкая задача, и если есть возможность обойтись обычным сервером SMP-архитектуры с эквивалентной производительностью, то так и предпочитают делать. Поэтому кластеры используются только там, где SMP обходится слишком дорого, а со всех практических точек зрения требующие такого количества ресурсов машины - это уже суперкомпьютеры], то и интерконнект для них просто обязан быть очень быстрым, иначе полностью раскрыть свои возможности кластер не сможет. В результате практически все известные сетевые технологии хотя бы раз использовались для создания кластеров[Я даже слышал о попытках использования в качестве интерконнекта стандартных портов USB], причем разработчики зачастую не ограничивались стандартом и изобретали "фирменные" кластерные решения, как, например, интерконнект, основанный на нескольких линиях Ethernet, включаемых между парой компьютеров в параллель. К счастью, с повсеместным распространением гигабитных сетевых карт, ситуация в этой области становится проще[Почти половину списка суперкомпьютеров Top 500 составляют кластеры, построенные на основе Gigabit Ethernet], - они довольно дешевы, и в большинстве случаев предоставляемых ими скоростей вполне достаточно.

Вообще, по пропускной способности интерконнект почти дошел до разумного предела: так, постепенно появляющиеся на рынке 10-гигабитные адаптеры Ethernet вплотную подобрались к скоростям внутренних шин компьютера, и если создать некий гипотетический 100-гигабитный Ethernet, то не найдется ни одного компьютера, способного пропустить через себя такой огромный поток данных. Но на практике десятигигабитная локальная сеть, несмотря на всю свою перспективность, встречается редко - технология Ethernet допускает использование только топологии "звезда", а в подобной системе центральный коммутатор, к которому подключаются все остальные элементы, обязательно будет узким местом. Кроме того, у Ethernet-сетей довольно большая латентность[Время между отправкой запроса одним узлом и получением этого запроса другим узлом], что тоже затрудняет их использование в "тесно связанных" задачах, где отдельные вычислительные узлы должны активно обмениваться информацией. Поэтому несмотря на почти предельную пропускную способность Ethernet-решений в кластерах широко используются сети со специфической топологией - старая добрая Myrinet, дорогая элитная Quadrics, новенькая InfiniBand и др. Все эти технологии "заточены" под распределенные приложения и обеспечивают минимальную латентность исполнения команд и максимальную производительность. Вместо традиционной "звезды" здесь из вычислительных элементов строятся плоские и пространственные решетки, многомерные гиперкубы, поверхности трехмерного тора и другие "топологически хитрые" объекты. Такой подход позволяет одновременно передавать множество данных по сети, гарантируя отсутствие узких мест и увеличивая суммарную пропускную способность.

Как развитие идей быстрого интерконнекта отметим, например, адаптеры сети InfiniBand, подключающиеся через специальный слот HTX к процессорной шине HyperTransport. Фактически адаптер напрямую подключается к процессору[Напомним, что в многопроцессорных системах на базе AMD Opteron межпроцессорное взаимодействие происходит именно по этой шине]! Лучшие образцы подобных решений обеспечивают столь высокую производительность, что построенные на их основе кластеры вплотную приближаются по характеристикам к классическим SMP-системам, а то и превосходят их. Так, в ближайшие несколько месяцев на рынке должен появиться интереснейший чип под названием Chorus, который по четырем шинам HyperTransport подключается к четырем или двум процессорам AMD Opteron, расположенным на одной с ним материнской плате, и с помощью трех линков InfiniBand может подключаться еще к трем другим "Хорусам", контролирующим другие четверки (или пары) процессоров. Один Chorus - это одна материнская плата и один сравнительно независимый узел с несколькими процессорами, подключаемый стандартными кабелями InfiniBand к остальным узлам. Внешне вроде бы получается кластер, но - только внешне: оперативная память у всех материнских плат общая. Всего в текущем варианте может объединяться до восьми "Хорусов" (и соответственно до 32 процессоров), причем все процессоры будут работать уже не как кластер, а как единая SUMA-система, сохраняя, однако, главное достоинство кластеров - невысокую стоимость и возможность наращивания мощности. Такой вот получается "суперкластеринг", стирающий границы между кластерами и SMP.

Впрочем, все эти новомодные решения совсем не дешевы, - а ведь начинали мы с невысокой себестоимости кластера. Поэтому "Хорусы" да "Инфинибенды", стоящие солидных денег (несколько тысяч долларов на каждый узел кластера, что хоть и гораздо меньше, чем у аналогичных SMP-систем, но все равно дорого), встречаются нечасто. В секторе "академических" суперкомпьютеров, принадлежащих университетам, обычно используются самые дешевые решения, так называемые Beowulf–кластеры, состоящие из набора персоналок, соединенных гигабитной или даже стомегабитной Ethеrnet-сетью и работающих под управлением бесплатных операционных систем типа Linux. Несмотря на то что собираются такие системы буквально "на коленке", иногда из них все равно вырастают сенсации: к примеру, "биг-мак" - собранный из 1100 обычных "макинтошей" самодельный кластер, обошедшийся организаторам всего в 5,2 млн. долларов и умудрившийся занять в 2003 году третье место в рейтинге Top 500.

GRID-сети

Можно ли "продолжить" кластеры в сторону меньшей связанности точно так же, как, "продолжив" их в другом направлении, мы пришли к чипу Chorus и "почти SMP"? Можно! При этом мы отказываемся от построения специальной кластерной сети, а пытаемся использовать уже имеющиеся ресурсы - локальные сети и образующие их компьютеры. Общее название подобного рода решений - GRID-технологии, или технологии распределенных вычислений (вы наверняка с ними хорошо знакомы по таким проектам, как Distributed.Net или SETI@Home; машины добровольцев, участвующих в этих проектах, загружены разнообразными расчетами, ведущимися в то время, когда ПК хозяину не нужен). Ограничиваться достигнутым создатели GRID-систем не собираются и ставят перед собой амбициозную цель - сделать вычислительные мощности таким же доступным ресурсом, как электричество или газ в квартире. В идеале все компьютеры, подключенные к Интернету в рамках GRID, должны быть объединены в некое подобие кластера, и в то время, когда ваша машина простаивает, ее ресурсы будут доступны другим пользователям, а когда у вас возникает необходимость в больших мощностях, вам помогают "чужие" свободные компьютеры, которых в Сети предостаточно (кто-то отошел попить кофе, кто-то занимается серфингом или другими не загружающими процессор делами). Приоритетный доступ к ресурсам GRID будут иметь ученые, которые получат в распоряжение в буквальном смысле всемирный суперкомпьютер; но и обычные пользователи тоже внакладе не останутся.

Впрочем, если на словах все выглядит так замечательно, то почему это светлое будущее до сих пор не настало? Все дело в том, что при создании GRID возникают нетривиальные проблемы, решать которые пока никто толком не научился. В отличие от простого кластера при создании подобной системы приходится учитывать такие факторы, как неоднородность вычислительных узлов, низкая пропускная способность и нестабильность каналов, куда большее количество одновременно выполняемых задач, непредсказуемое поведение элементов системы, ну и, конечно, недоброжелательность некоторых пользователей. Судите сами: неоднородность нашей сети (причем очень сильная) возникает оттого, что к Интернету подключены самые разные компьютеры; у них разные возможности, разные линии связи и разные хозяева (режим работы у каждого свой). К примеру, где-то в школе есть гигабитная сеть из трех десятков почти всегда доступных, но не очень быстрых компьютеров, выключающихся на ночь в строго определенное время; а где-то стоит одинокий компьютер с завидной производительностью, непредсказуемо подключаемый к Сети по слабенькому дайлапу: так вот, в первом случае будут очень хорошо выполняться одни задачи, а во втором - совершенно другие. И для обеспечения высокой производительности системы в целом все это надо как-то анализировать и прогнозировать, чтобы оптимальным образом спланировать выполнение различных операций.

Далее. С плохими каналами связи трудно что-то сделать, но ведь можно не ждать светлого будущего, когда Интернет станет быстрым и надежным, а уже сейчас применять действенные методы сжатия и контроля целостности передаваемой информации. Вполне возможно, что резко повысившаяся за счет этого пропускная способность каналов скомпенсирует выросшую из-за необходимости сжатия и контроля вычислительную нагрузку на компьютеры сети.

К сожалению, большое количество одновременно выполняемых задач существенно увеличивает нагрузку на управляющие элементы GRID-сети и осложняет задачу эффективного планирования, поскольку уже сами "управленцы", контролирующие эту сеть, зачастую начинают требовать для себя отдельный суперкомпьютер, ссылаясь на необходимость сложного контроля и планирования. А планировать и осуществлять контроль им действительно нелегко, и не только из-за неоднородности планируемых ресурсов, но и по причине их "ненадежности". Вот, к примеру, непредсказуемое поведение хозяина компьютера - это отдельная песня. В обычном кластере выход элемента из строя - нештатная ситуация, которая влечет за собой остановку вычислений и ремонтные работы, в GRID же отказ одного элемента - нормальная ситуация (почему бы не выключить компьютер, когда вам это надо?), ее нужно корректно обработать и передать невыполненное задание на другой узел или же заранее назначать одно и то же задание нескольким узлам.

И наконец, никуда не деться в GRID-сетях от недоброжелательных пользователей (не зря же сейчас очень много делается для защиты информации). Ведь нам нужно как-то распределять и планировать во всей сети задания от всех ее пользователей, - и мало ли чего какой-нибудь Василий Пупкин мог туда запустить? Сегодня и без того вирусы, заражающие подключенные к Интернету компьютеры специальными троянами ("зомбирование") и создающие целые "зомби-сети" из зараженных машин, готовых делать все, что заблагорассудится автору вируса (проводить ли распределенные DDoS-атаки или рассылать спам - неважно), представляют собой серьезнейшую угрозу, а тут - у любого человека появляется возможность посредством штатной системы рассылки распространить любой код на сотни и тысячи персоналок. И хотя эта проблема в принципе решаема (например, путем создания для выполняемых задач виртуальных машин - благо вскоре технологии аппаратной виртуализации , которые позволят это сделать без особого труда, станут штатной принадлежностью большинства новых компьютеров), то как защититься от банальной "шалости" в виде запуска бессмысленного кода (скажем, бесконечного цикла) и замусоривания им GRID-сети?

На самом деле все не так грустно, и многое в GRID-направлении уже сделано. Запущены и функционируют десятки проектов, использующих распределенные вычисления для научных и околонаучных целей; запущены и GRID-сети для "внутриуниверситетского" научного использования - в частности, CrossGrid, DataGrid и EUROGRID.

Программное обеспечение для кластеров

А вот здесь все очевидно и просто: фактически на протяжении последних пяти лет для кластерных вычислений существует один-единственный стандарт - MPI (Message Passing Interface). Программы, написанные с использованием MPI, абсолютно переносимы - их можно запускать и на SMP-машине, и на NUMA, и на любой разновидности кластера, и на GRID-сети, причем из любой операционной системы. Конкретных реализаций MPI довольно много (к примеру, каждый поставщик "фирменного" быстрого интерконнекта может предлагать свой вариант MPI-библиотеки для его решения), однако благодаря совместимости выбирать из них можно любой, какой вам приглянется (например, быстродействием или удобством настройки). Очень часто используется такой OpenSource-проект, как MPICH, обеспечивающий работу на более чем двух десятках различных платформ, включая самые популярные - SMP (межпроцессное взаимодействие через разделяемую память) и кластеры с интерконнектом Ethernet (межпроцессное взаимодействие поверх протокола TCP/IP), - если доведется когда-нибудь настраивать кластер, то начать советую именно с него.

На "классических" SMP-системах и некоторых NUMA’х реализация параллельных вычислений с использованием MPI заметно уступает по производительности более "аппаратно ориентированным" многопоточным приложениям, поэтому наряду с "чистыми" MPI-решениями встречаются "гибриды", в которых на кластере "в целом" программа работает с использованием MPI, но на каждом конкретном узле сети (а каждый узел кластера - это зачастую SMP-система) работает MPI-процесс, распараллеленный вручную на несколько потоков. Как правило, это гораздо эффективнее, но и гораздо труднее в реализации, а потому на практике встречается нечасто.

Как уже говорилось, можно выбрать практически любую операционную систему. Традиционно для создания кластеров используется Linux (более 70% систем Top 500) или другие разновидности Unix (оставшиеся 30%), однако последнее время к этому престижному рынку HPC (High Perfomance Computing) присматривается и Microsoft, выпустившая бета-версию Windows Compute Claster Server 2003[Бесплатно скачать эту бету можно ], в состав которой включена микрософтовская версия библиотеки MPI - MSMPI. Так что организация "кластера своими руками" вскоре может стать уделом не только юниксоидов, но и их менее знающих собратьев-администраторов, да и вообще - значительно упроститься.

Напоследок скажем, что кластерные вычисления годятся далеко не для всяких задач. Во-первых, программы под кластерные вычисления нужно "затачивать" вручную, самостоятельно планируя и маршрутизируя потоки данных между отдельными узлами. MPI, правда, сильно упрощает разработку параллельных приложений в том плане, что в нем при понимании сути происходящего соответствующий код очень нагляден и очевиден, и традиционные глюки параллельных программ типа дедлоков или параллельного использования ресурсов практически не возникают. Но вот заставить получающийся код быстро работать на MPI бывает довольно трудно - зачастую для этого приходится серьезно модифицировать сам программируемый алгоритм. В целом нераспараллеливающиеся и труднораспараллеливающиеся программы на MPI реализуются плохо; а все остальные - более или менее хорошо (в смысле - масштабируются до десятков, а в "хорошем" случае - и до тысяч процессоров). И чем больше степень связанности кластера, тем проще извлекать из него выгоду от параллельной обработки данных: на кластере, связанном сетью Myrinet, программа может работать быстро, а на аналогичном кластере, где интерконнектом выступает Fast Ethernet, - попросту не масштабироваться (не получать дополнительного прироста производительности) сверх десяти процессоров. Особенно трудно получить какой-либо выигрыш в GRID-сетях: там вообще, по большому счету, подходят только слабо связанные задачи с минимумом начальных данных и сильным параллелизмом - например, те, в которых приходится перебирать значительное количество вариантов.

Вот такие они - доступные всем суперкомпьютеры сегодняшнего дня. И не только доступные, но и более чем востребованные повсюду, где требуются высокопроизводительные вычисления за умеренные деньги. Даже простой пользователь, увлекающийся рендерингом, может собрать дома из своих машин небольшой кластер (рендеринг параллелится практически идеально, так что никаких ухищрений здесь не понадобится) и резко увеличить производительность труда[К примеру, пакет Maya позволяет организовать кластерный рендеринг даже без привлечения каких-либо сторонних пакетов и библиотек. Достаточно установить его на несколько компьютеров локальной сети и настроить сервер и несколько клиентов].

Кластерные вычисления не являются новой областью. Однако в последнее время интерес к ним значительно возрос - многие организации рассматривают кластеры как основной инструмент для решения таких проблем, как повышение производительности приложений, обеспечение высокой доступности, а также высокой масштабируемости своих вычислительных систем.

Успехи, достигнутые в кластерных технологиях в последнее десятилетие, позволили использовать для их построения недорогие компьютеры. Экономичность, вычислительная мощность и гибкость таких кластеров сделали их привлекательной альтернативой централизованной модели вычислений на базе традиционных суперкомпьютеров (в дальнейшем под словом «кластер» мы будем понимать массовый продукт, в отличие от «спецзаказа»).

Кластеры появились как недорогая и эффективная альтернатива монокорпусным суперкомпьютерам с оригинальной закрытой архитектурой. Построенные на базе серийно выпускаемых компонентов, они широко применяются для выполнения высокопроизводительных вычислений, обеспечения доступности и масштабируемости. И если первая возможность интересует в основном академические круги, то две последние весьма привлекательны для бизнеса любого масштаба. И не только привлекательны, но и доступны.

Сегодня недорогой кластер из компонентов, находящихся в массовом производстве, может собрать практически любая уважающая себя компьютерная фирма, а с выходом такой кластерной ОС, как Windows Computing Cluster Server 2003, допускающей довольно простую инсталляцию, кластерные решения начального уровня становятся доступными малому и среднему бизнесу. И, пожалуй, не покажется необоснованным предположение, что перманентное снижение цен на аппаратные и программные компоненты и скоростные сетевые технологии вскоре сделают кластеры начального уровня привычным элементом ИС любого масштаба.

Поэтому в Тему недели, посвященную кластерным вычислениям, мы постарались включить не только обзорную часть, но и статьи о конкретных и, несомненно, востребованных в ближайшем будущем украинским бизнесом продуктах. В частности, читатель найдет здесь и практическое занятие, выполненное в нашей Тестовой лаборатории, и описание кластерных ОС Windows Computing Cluster Server 2003/2008, которые имеют все шансы стать популярными.

Прежде всего напомним определение кластера. Так называется локальная (в противоположность распределенной) вычислительная система, состоящая из множества независимых компьютеров, связанных между собой каналами передачи данных. Локальность кластера заключается в том, что все его подсистемы «видны» в едином административном домене, и управление им выполняется как единой вычислительной системой. Компьютеры, входящие в состав кластера, именуются узлами (node). Обычно это серийно выпускаемые универсальные компьютеры, способные работать самостоятельно. Узлы могут быть одно- или мультипроцессорными (конфигурация SMP). В классической схеме все узлы при работе с приложениями разделяют внешнюю память на массиве жестких дисков, используя внутренние HDD для более специальных функций. Для межузлового взаимодействия обычно применяется какая-либо стандартная сетевая технология, хотя это не исключает отдельно разработанных каналов связи. Кластерная сеть является обособленной - она изолирована от внешней сетевой среды.

Классификация

Кластеры можно классифицировать по разным признакам, однако чаще всего их разбивают на три категории, которые определяются характером и назначением приложения.

Кластеры высокой готовности (High Availability, HA) . Иногда их еще называют отказоустойчивыми. Такие кластеры проектируются для обеспечения конечным пользователям бесперебойного доступа к данным или сервисам (в типичном случае - веб-сервисам). Как правило, один экземпляр приложения работает на одном узле, а когда тот становится недоступным, то управление им перехватывается другим узлом (рис. 1). Подобная архитектура позволяет также проводить ремонт и профилактические работы, не останавливая сервисы. Вдобавок, если один узел выходит из строя, сервис может быть восстановлен без ущерба для доступности остальных. Правда, производительность системы понизится.

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

Кластеры балансировки нагрузки (Load Balancing) . Этот тип кластеров распределяет входящие запросы между множеством узлов, на которых работают одинаковые программы или размещен один и тот же контент (рис. 2). Каждый узел способен обрабатывать запросы к одному и тому же приложению или контенту. Если какой-нибудь из узлов выходит из строя, запросы перераспределяются среди оставшихся. В типичном случае такие кластеры используются для веб-хостинга.

Обе рассмотренные выше кластерные технологии могут быть объединены для увеличения надежности, доступности и масштабируемости приложений.

Кластеры для высокопроизводительных вычислений (High-Performance Cluster, HPC) . Традиционно параллельные вычисления выполнялись на мультипроцессорных системах, специально для этого спроектированных. В них множество процессоров разделяли общую память и шинный интерфейс в пределах одного компьютера. С появлением высокоскоростной коммутационной технологии стало возможным объединять компьютеры в кластеры для параллельных вычислений.

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

Компоненты кластера

Базовые строительные блоки (компоненты) кластеров разбиваются на несколько категорий: непосредственно узлы, кластерное ПО, выделенная сеть, производящая обмен данными между узлами, и соответствующие сетевые протоколы.

Узлы

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

В последнее время производительность процессоров, памяти, скорость доступа к жестким дискам и их емкость значительно увеличились. Интересно отметить, что при таком, в некоторых случаях экспоненциальном, росте быстродействия стоимость этих технологий существенно снизилась.

В типичном случае узел в кластере может быть управляющим (главным) или вычислительным (подчиненным) (рис. 3). Главный узел может быть только один. Он отвечает за работу кластера, а также является ключевым для кластерного ПО промежуточного слоя, процессов маршрутизации, диспетчеризации и мониторинга состояния каждого вычислительного узла. Последние выполняют вычисления и операции с системой хранения данных. Эти узлы, по сути, представляют собой полнофункциональные автономные компьютеры и, как правило, продаются как десктопы или серверы «из коробки».

Программное обеспечение

Как и в обычном настольном компьютере, ОС кластера является сердцем каждого его узла. Она незримо присутствует при любом действии пользователя, будь то обращение к файловой системе, отправка сообщений или старт дополнительного процесса. Пользователи могут выбирать различные парадигмы программирования или ПО промежуточного слоя, но кластерная ОС для всех одна и та же.

Типичный эскиз проекта ОС приведен в таблице. На нем показаны базовые блоки традиционного узла. Основная роль кластерной ОС заключается в первую очередь в том, чтобы мультиплексировать множество пользовательских процессов на единый набор аппаратных компонентов (управление ресурсами) и обеспечить пригодные абстракции для высокоуровневого ПО. Некоторые из этих абстракций включают защиту границ памяти, координацию процессов/потоков и коммуникаций и управление устройствами. Нужно отметить, что большинство специфических для кластера функций выполняется ПО промежуточного слоя. И для этого есть основания. Действительно, ОС кластера достаточно сложна, и не всегда ясно, как произведенные изменения повлияют на остальные системы. Поэтому необходимые модификации лучше проводить на уровне ПО промежуточного слоя, причем добавленная в него новая функциональность может быть портирована на другие ОС.

В приведенном определении кластера было упомянуто, что он виден администратору и пользователю как единая вычислительная система. Это достигается с помощью образа единой системы (Single System Image, SSI) . Именно он скрывает неоднородную и распределенную природу имеющихся ресурсов и представляет их пользователям и приложениям как единый вычислительный ресурс. SSI может быть реализован на одном или нескольких из следующих уровней: аппаратном, ОС, ПО промежуточного слоя или/и приложения. Вот пример нескольких ключевых сервисов, предоставляемых SSI кластера:

  • единая точка входа;
  • единый пользовательский интерфейс;
  • единое пространство процессов;
  • единое пространство памяти и ввода-вывода;
  • единая иерархия файлов;
  • единая точка контроля и управления.

Такие системы, как Digital/Compaq Memory Channel и Distributed Shared Memory обеспечивают SSI на аппаратном уровне и позволяют пользователям видеть кластер как систему с разделяемой памятью. ОС SCO UnixWare NonStop Cluster, Sun Solaris-MC, GLUNIX и MOSIX поддерживают SSI на уровне ядра.

Реализация SSI на каждом из вышеперечисленных уровней имеет свои pro и contra. Так, аппаратный уровень может предоставить наивысшую степень прозрачности, но из-за жесткой архитектуры он не менее гибок, чем требуется для расширений и улучшений системы. Уровень ядра предоставляет SSI как разработчикам, так и конечным пользователям, однако он слишком дорог и его трудно модифицировать. Основное преимущество уровня приложений по сравнению с уровнем ядра заключается в том, что на первом SSI реализуется поэтапно, и пользователь получает предоставляемые возможности немедленно, тогда как при втором подходе продукт не может выйти на рынок, пока все компоненты ядра не будут поддерживать SSI. Уровень ПО промежуточного слоя является компромиссным между двумя вышеупомянутыми механизмами реализации SSI.

Сетевое оборудование и протоколы

Создание общедоступных кластеров стало возможным только благодаря адекватным сетевым технологиям для межузловых коммуникаций. Общедоступные кластеры включают одну или более выделенных сетей для передачи пакетов сообщений внутри распределенной системы. Это отличает кластер от ансамбля слабосвязанных посредством разделяемой ЛВС автономных компьютеров.

Сегодня у разработчиков кластеров имеются широкие возможности для выбора сетевой технологии. Поскольку стоимость сетевого оборудования для кластеров варьируется от «почти даром» до нескольких тысяч долларов на один узел, то таковой может быть не последней составляющей в формировании цены продукта. Практика дает примеры построения весьма эффективных кластеров с использованием недорогого сетевого оборудования, которое можно увидеть в обычной ЛВС. В то же время отдельные сетевые продукты, специально разработанные для кластерных коммуникаций, сравнимы по стоимости с рабочими станциями. Выбор сетевой технологии зависит от ряда факторов: цены, производительности, совместимости с другим кластерным оборудованием и ПО, а также от коммуникационных характеристик приложений, которые будут выполняться на кластере.

Производительность сети в общем описывается в терминах латентности и полосы пропускания. Латентностью называется отрезок времени от запроса данных до их получения, или время, за которое они передаются от одного компьютера другому, включая непродуктивные затраты ПО на формирование сообщения и время передачи битов. В идеале в приложениях, написанных для кластеров, обмен сообщениями должен быть минимальным. Если приложение посылает большое количество коротких сообщений, тогда его производительность будет зависеть от латентности сети, если же происходит обмен длинными сообщениями, то основное влияние на этот параметр окажет ее пропускная способность. Очевидно, производительность приложения будет наилучшей при низкой латентности и широкой полосе пропускания. Для удовлетворения этих двух требований необходимы эффективные коммуникационные протоколы, минимизирующие объем служебных данных, и быстрые сетевые устройства.

Коммуникационные, или сетевые, протоколы определяют правила и соглашения, которые будут использовать два или более компьютеров в сети для обмена информацией. Они могут быть с установкой или без установки соединения, предоставлять разный уровень надежности - с полной гарантией доставки в порядке следования пакетов и без таковой, синхронные (без буферизации) и асинхронные (с буферизацией).

Для кластерных коммуникаций применяются как традиционные сетевые протоколы, разработанные первоначально для Интернета (IP), так и созданные специально. Помимо этого, имеются два относительно новых стандарта, также специально предназначенных для кластеров. Мы не будем останавливаться на достаточно знакомом нашим читателям протоколе IP, равно как и на остальных, поскольку все они довольно специфичны. Перечислим лишь их названия, чтобы интересующиеся могли обратиться либо к литературе, либо к «всезнающему» Интернету. Это, в частности, протоколы Active Messages, Fast Messages, Virtual Memory-Mapped Communication system, U-net и Basic Interface for Parallelism. Обратимся к двум стандартам.

К 1997 г. исследования в области протоколов с низкой латентностью продвинулись настолько, что в итоге привели к созданию нового стандарта для кластерных коммуникаций Virtual Interface Architecture (VIA). Одновременно индустрия работала над стандартами для разделяемых подсистем хранения. Результатом этих усилий явился InfiniBand.

VIA - это коммуникационный стандарт, объединяющий лучшие достижения различных проектов. Он был создан консорциумом академических и индустриальных партнеров, включающим Intel, Compaq и Microsoft. Версия VIA 1.1 с поддержкой гетерогенных аппаратных средств стала доступной в начале 2001 г. Как следует из названия, базируется VIA на концепции виртуального сетевого интерфейса. Стандарт предусматривает, что перед отправкой сообщения приемный и посылающий буфера должны быть выделены и привязаны к физической памяти. После того как буфера и связанные с ними структуры данных сформированы, никаких системных вызовов не требуется. Операции приема и отправки в пользовательском приложении состоят из записи дескриптора в очередь. Приложение может выбирать, ждать ли ему подтверждения завершения операции или продолжать основную работу, пока сообщение обрабатывается.

Хотя VIA может быть доступен прямо для прикладного программирования, многие разработчики систем считают, что это слишком низкий уровень для приложений, так как последние должны быть ответственными за распределение части физической памяти и следить за ее эффективным использованием. Предполагается, что большинство производителей ОС и ПО промежуточного слоя обеспечат интерфейс с VIA, который будет поддерживать прикладное программирование. Так, осенью 2000 г. большинство поставщиков баз данных предоставили версии своих продуктов, работающих поверх VIA. Быстро становится доступным и другое кластерное ПО, например файловые системы.

Стандарт InfiniBand был поддержан консорциумом индустриальных партнеров, в том числе Compaq, Dell, HP, IBM, Intel, Microsoft и Sun Microsystems. Архитектура InfiniBand заменяет разделяемую шину, которая является стандартом для системы ввода-вывода в современных компьютерах, высокоскоростной последовательной, базированной на механизме каналов коммутационной фабрикой. Все системы и устройства подключаются к фабрике посредством канального адаптера хоста (Host Channel Adaptor, HCA), который обеспечивает соединение центрального процессора хоста со структурой InfiniBand, или канального адаптера целевого узла (Target Channel Adaptor, TCA), соединяющего InfiniBand с другими устройствами ввода-вывода типа Ethernet, Fibre Channel или с системами хранения данных. Канал InfiniBand дуплексный и работает с пропускной способностью 2,5 Гб/с в одном направлении в топологии «точка-точка». Данные посылаются пакетами, имеется шесть режимов передачи: надежное и ненадежное соединение, надежная и ненадежная дейтаграмма, многоадресная рассылка и необработанные пакеты («сырой» режим). Вдобавок InfiniBand поддерживает удаленный прямой доступ к памяти, который позволяет одному процессору читать или писать в память другого.

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

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

В системы с подключением к шине ввода-вывода и с разделяемой дисковой памятью входят компьютеры с разделяемой дисковой подсистемой. Подсоединение к памяти менее распространено, поскольку шина памяти, вообще говоря, имеет индивидуальный дизайн для каждого типа компьютеров. Однако много таких систем реализуются с помощью ПО или посредством механизма отображения портов ввода-вывода в память, как, например, Memory Channel.

Помимо этого, существуют гибридные системы, которые комбинируют особенности нескольких категорий, скажем, InfiniBand позволяет посылать как данные на диск, так и сообщения другим узлам. Аналогично Scalable Coherent Interface (SCI) может также использовать оба механизма обмена.

Кластерные сети

Системная сеть кластера может быть построена на базе традиционных сетевых продуктов, применяемых в ЛВС, либо спроектирована специально для кластерных вычислений. В последнем случае она обеспечивает дополнительную аппаратную поддержку, которая уменьшает латентность.

Сегодня коммутируемые технологии Ethernet благодаря низкой стоимости портов и стандартизации интерфейсов лидируют в качестве систем взаимосвязи в широкодоступных кластерах. Многие компьютеры оборудуются встроенными портами 1 GE, остается лишь приобрести недорогой коммутатор. Однако при повышенных требованиях используются и специализированные сети. Сколько-нибудь подробное их описание вывело бы нас далеко за пределы возможного, поэтому из соображений полноты приведем лишь весьма конспективные сведения об отдельных из них.

Giganet (cLAN) . Технология cLAN (collapsed LAN), сегодня принадлежащая компании Emulex, была разработана с целью аппаратной поддержки VIA. Это была первая в индустрии нативная аппаратная реализация стандарта VIA. Ключевые особенности сети следующие.

На самом низком уровне коммуникационной модели находится некогерентная распределенная разделяемая память (Distributed Shared Memory, DSM). Часть виртуального адресного пространства приложения логически отображается поверх сети на физическую память в другом узле. Данные передаются между приложениями посредством записи в разделяемую область памяти с помощью стандартных инструкций записи процессора. Буфер в удаленном узле представляется посредством cookie Remote Direct Memory Access, узел-владелец которого получает право доступа к буферу.

Myrinet . Эта дуплексная сеть поставляется компанией Myricom. Она широко используется во многих академических проектах, в частности в Berkeley Network of Workstations (NOW). Физически сеть состоит из двух оптоволоконных кабелей (для нисходящего и восходящего потоков), подключаемых к хосту через общий коннектор. Компьютеры объединяются с помощью маршрутизаторов или коммутаторов (их можно конфигурировать для получения избыточных путей). Поддерживается коммутация без буферизации пакетов (cut-through), которая позволяет передавать сообщения из конца в конец с минимальной задержкой. Myrinet имеет внутриплатный программируемый процессор - он дает возможность экспериментировать со многими коммуникационными протоколами.

В Myrinet реализован ряд механизмов, обеспечивающих отказоустойчивость. К ним относятся управление потоком, контроль ошибок, проверка работоспособности каналов (heartbeat).

Последняя версия, так называемая четвертая генерация Myrinet 10G, поддерживает скорость передачи данных 10 Гб/с в каждом из направлений и совместима с 10 GE на уровне PHY. Латентность сети очень низкая - всего 5 мкс.

QsNet . Эта высокоскоростная с низкой латентностью сеть разработана компанией Quadrics Supercomputers World (QSW). Конструктивно QsNet включает две подсистемы:

  • сетевой интерфейс, состоящий из одного или более сетевых адаптеров в каждом узле;
  • многошинную сеть данных, которая объединяет компьютеры в кластер.

Сетевой интерфейс базируется на заказных микросхемах, именуемых Elan. Модификация Elan III объединяет выделенный процессор ввода-вывода для разгрузки ЦП, шину PCI (66 МГц, 64 бита), дуплексный канал (400 МГц, 8 бит), устройство управления памятью (MMU), кэш и интерфейс локальной памяти. Микросхема выполняет три типа базовых операций:

  • удаленные чтение и запись;
  • прямую передачу данных из пользовательского виртуального адресного пространства одного процессора другому без необходимости синхронизации;
  • управление протоколом.

Сеть конструируется на базе выделенных коммутаторов, которые объединяются в специальном шасси, образуя топологию толстого дерева (чем ветка ближе к корню, тем она толще, т. е. ее пропускная способность выше).

Модификация сети, выпущенная в 2003 г., основана на шине PCI-X 133 МГц и имеет латентность 1,22 мкс.

Scalable Coherent Interface (SCI) . Это первая технология взаимосвязи, разработанная специально для кластерных вычислений, которая была доведена до уровня стандарта. Архитектура SCI базируется на соединениях «точка-точка», пакетах малого размера и расщепленных транзакциях. Стандарт IEEE 1596 был опубликован в 1992 г. и специфицировал физический уровень сети и выше для распределенной по сети разделяемой кэш-когерентной (опциональной) памяти. На более высоких уровнях стандарт описывает распределенную базированную на указателях схему когерентной кэш-памяти. Такая схема позволяет кэшировать удаленную SCI-память: всякий раз, когда данные, расположенные в удаленной памяти, модифицируются, все строки кэша на всех узлах, на которых они хранятся, становятся недействительными. Кэширование удаленной SCI-памяти увеличивает производительность и допускает непосредственное прозрачное программирование разделяемой памяти.

Конечно, это далеко не все технологии, на основе которых можно построить довольно мощный кластер. В кластерах начального уровня, как правило, применяются неспециализированные решения, использующие традиционные сетевые технологии, такие как Ethernet, ATM или Fibre Channel.

Сегодня на рынке представлен широкий спектр кластеров, отличающихся типом и быстродействием процессоров, размером разделяемой узлами памяти, технологией взаимосвязи узлов, моделями и интерфейсами программирования. Однако нужно понимать, что результат, достигаемый с их помощью, в большой степени зависит от особенностей приложений, которые планируется на них развернуть.

Базовый эскиз проекта ОС
Userspace System Processes User Processes
not using
the middleware
User Processes using the middleware
Middleware
System Services User Libraries
Kernel Middleware-related Kernel Extentions
Filesystems / Communication / Programmatic Interface
Memory Manager Scheduler Drivers
Hardware Abstraction Layer
Hardware Resourses Timers & Interrupts
RAM CPUs Disks Network Cluster Interconnect Others

Одно из самых современных направлений в области создания вычислительных систем - это кластеризация. По производительности и коэффициенту готовности кластеризация представляет собой альтернативу симметричным мультипроцессорным системам.

Как мы уже отмечали, вычислительный кластер - это М1МР- система (мультикомпьютер), состоящая из множества отдельных компьютеров (узлов вычислительного кластера), объединенных единой коммуникационной средой.

В качестве узла кластера может выступать как однопроцессорная ВМ, так и ВС типа SMP или МРР. Каждый узел в состоянии функционировать самостоятельно и отдельно от кластера.

Каждый узел имеет свою локальную оперативную память. При этом общей физической оперативной памяти для узлов, как правило, не существует. Коммуникационная среда вычислительных кластеров обычно позволяет узлам взаимодействовать между собой только посредством передачи сообщений. В целом вычислительный кластер следует рассматривать как единую аппаратно-программную систему, имеющую единую коммуникационную систему, единый центр управления и планирования загрузки.

Архитектура кластерных вычислений сводится к объединению нескольких узлов высокоскоростной сетью. Наряду с термином «кластерные вычисления», часто применяются такие названия, как кластер рабочих станций (workstation cluster), гипервычисления (hypercomputing), параллельные вычисления на базе сети (network-based concurrent computing).

Перед кластерами ставятся две задачи:

  • достичь большой вычислительной мощности;
  • обеспечить повышенную надежность ВС.

Первый коммерческий кластер создан корпорацией «DEC» в начале 80-х гг. прошлого века. В качестве узлов кластеров могут использоваться как одинаковые ВС (гомогенные кластеры), так и разные (гетерогенные кластеры). По своей архитектуре кластерная ВС является слабосвязанной системой.

Преимущества, достигаемые с помощью кластеризации:

  • абсолютная масштабируемость. Возможно создание больших кластеров, превосходящих по вычислительной мощности даже самые производительные одиночные ВМ. Кластер в состоянии содержать десятки узлов, каждый из которых представляет собой мультиплексор;
  • наращиваемая масштабируемость. Кластер строится так, что его можно наращивать, добавляя новые узлы небольшими порциями;
  • высокий коэффициент готовности. Поскольку каждый узел кластера - самостоятельная ВМ или ВС, отказ одного из узлов не приводит к потере работоспособности кластера. Во многих системах отказоустойчивость автоматически поддерживается программным обеспечением;
  • превосходное соотношение цена/производительность. Кластер любой производительности можно создать, соединяя стандартные

ВМ, при этом его стоимость будет ниже, чем у одиночной ВМ

с эквивалентной вычислительной мощностью.

На уровне аппаратного обеспечения кластер - это просто совокупность независимых вычислительных систем, объединенных сетью. При соединении машин в кластер почти всегда поддерживаются прямые межмашинные связи. Решения могут быть простыми, основывающимися на аппаратуре Ethernet, или сложными с высокоскоростными сетями с пропускной способностью в сотни мегабайт в секунду (система /?5/6000 SP компании «1ВМ», системы фирмы «Digital» на основе Memory Channel, ServerNet корпорации «Compaq»).

Узлы кластера контролируют работоспособность друг друга и обмениваются специфической информацией. Контроль работоспособности осуществляется с помощью специального сигнала, называемого heartbeat («сердцебиение»). Этот сигнал передается узлами кластера друг другу, чтобы подтвердить их нормальное функционирование.

Неотъемлемой частью кластера является специализированное программное обеспечение (ПО), на которое возлагается задача обеспечения бесперебойной работы при отказе одного или нескольких узлов. Такое ПО производит перераспределение вычислительной нагрузки при отказе одного или нескольких узлов кластера, а также восстановление вычислений при сбое в узле. Кроме того, при наличии в кластере совместно используемых дисков кластерное программное обеспечение поддерживает единую файловую систему.

Узлы вычислительного кластера могут функционировать под управлением разных операционных систем. Однако чаще всего используются стандартные UNIX-подобные системы. Заметим, что с точки зрения разработки прикладных параллельных программ нет каких-либо принципиальных различий между однородными вычислительными кластерами и МРР- системами.

Классификация вычислительных кластеров по типу

узловых процессоров

Вычислительные кластеры классифицируются прежде всего по характеру узловых процессоров (рис. 9.10).

В качестве узлов вычислительного кластера обычно используют персональные компьютеры, рабочие станции и ^МР-серверы. Если в качестве узла кластера используется SMP- система, то такой вычислительный кластер называется *5ЖР-кластером.

Если в качестве узлов вычислительного кластера используются персональные ЭВМ или рабочие станции, то обычной является си-

Рис. 9.10.

туация, когда во время решения задачи на кластере на узлах этого кластера продолжают выполняться последовательные задания пользователей. В результате относительная производительность узлов кластера меняется случайным образом и в широких пределах. Решением проблемы было бы написание самоадаптирующейся пользовательской программы. Однако эффективное решение этой задачи представляется весьма проблематичным. Ситуация усугубляется, если среди узловых компьютеров вычислительного кластера имеются файловые серверы. При этом во время решения задачи на кластере в широких пределах может меняться загрузка коммуникационной среды, что делает непредсказуемыми коммуникационные расходы задачи.

Классификация вычислительных кластеров по однородности узлов

Как и всякие А//А//)-системы, вычислительные кластеры разделяются на однородные кластерные системы (однородные вычислительные кластеры) и разнородные кластерные системы (гетерогенные вычислительные кластеры).

Обычно, когда говорят о вычислительных кластерах, подразумевают однородные вычислительные кластеры. Однако часто при наращивании кластера приходится использовать процессоры, отличающиеся не только по производительности, но и по архитектуре от узловых процессоров кластера. Поэтому постепенно однородный вычислительный кластер может стать неоднородным. Эта неоднородность создает следующие проблемы: различие в производительности процессоров усложняет задачу распределения работ между процессорами; различие в архитектуре процессоров требует подготовки разных выполняемых файлов для разных узлов, а в случае различий в представлении данных может потребовать и преобразования их форматов при передаче сообщений между узлами.

Классификация вычислительных кластеров по функциональности узлов

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

Для создания высокопроизводительных вычислительных кластеров системные блоки узловых компьютеров делают значительно более простыми, чем в первом случае (неполнофункциональными). Здесь нет необходимости снабжать компьютеры узлов графическими картами, мониторами, дисковыми накопителями и другим периферийным оборудованием. Периферийное оборудование устанавливается только на одном или немногих управляющих компьютерах (ЯОУГ-компьютерах). Такой поход позволяет значительно уменьшить стоимость системы.

При классификации кластеров используется и ряд других классификационных признаков (рис. 9.11).


Рис. 9.11.

  • классификация по стандартности комплектующих;
  • классификация по функциональной направленности. Классификация вычислительных кластеров по стандартности комплектующих. С точки зрения стандартности комплектующих можно выделить два класса кластерных систем:
    • 1) вычислительный кластер строится целиком из стандартных комплектующих;
    • 2) при построении кластера используются эксклюзивные или нешироко распространенные комплектующие.

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

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

Классификация вычислительных кластеров по их функциональной направленности. С функциональной точки зрения кластерные системы можно разделить:

На высокоскоростные кластерные системы (High Performance) -

ЯР-кластеры;

Кластерные системы высокой готовности (High Availability) - НА-

кластеры.

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

Производительность вычислительного высокоскоростного кластера, очевидно, зависти от производительности его узлов. С другой стороны, производительность кластера, как и всякой системы с распределенной памятью, сильно зависит от производительности коммуникационной среды. Обычно при построении вычислительных кластеров используют достаточно дешевые коммуникационные среды. Такие среды обеспечивают, на один - два порядка более низкую производительность чем производительность коммуникационных сред суперкомпьютеров. Поэтому находится не так много задач, которые могут достаточно эффективно решаться на больших кластерных системах.

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

Разработано множество технологий соединения компьютеров в кластер.

Для того чтобы вычислительная система обладала высокими показателями готовности, необходимо, чтобы ее компоненты были максимально надежными, чтобы система была отказоустойчивой, а также чтобы была возможной «горячая» замена компонентов (без останова системы). Благодаря кластеризации при отказе одного из компьютеров системы задачи могут быть автоматически (операционной системой) перераспределены между другими (исправными) узлами вычислительного кластера. Таким образом, отказоустойчивость кластера обеспечивается дублированием всех жизненно важных компонентов вычислительной системы. Самыми популярными коммерческими отказоустойчивыми системами в настоящее время являются двухузловые кластеры.

Выделяется еще один класс вычислительных кластеров - вычислительные сети (GRID), объединяющие ресурсы множества кластеров, многопроцессорных и однопроцессорных ЭВМ, которые могут принадлежать разным организациям и быть расположенными в разных странах.

Разработка параллельных программ для вычислительных сетей усложняется из-за следующих проблем. Ресурсы (количество узлов, их архитектура, производительность), которые выделяются задаче, определяются только в момент обработки сетью заказа на выполнение этой задачи. Поэтому программист не имеет возможности разработать программу для конкретной конфигурации вычислительной сети. Программу приходится разрабатывать так, чтобы она могла динамически (без перекомпиляции) самонастраиваться на выделенную конфигурацию сети. Кроме того, к неоднородности коммуникационной среды добавляется изменчивость ее характеристик, вызываемая изменениями загрузки сети. В лучшем случае программа должна разрабатываться с учетом этой неоднородности коммуникационной среды, что представляет собой весьма непростую задачу. Как мы отмечали выше, подобная проблема имеет место и для вычислительных кластеров, построенных на основе персональных компьютеров или рабочих станций.

Эффективная производительность кластерных вычислительных систем (real applications performance, RAP) оценивается как 5-15% от их пиковой производительности (Peak Advertised Performance, PAP). Для сравнения: у лучших малопроцессорных систем из векторных процессоров это соотношение оценивается как 30-50%.

Instagram