Назад | Перейти на главную страницу

Решения классических кластерных задач

Это многоступенчатый вопрос, так что несите меня.

Я подумываю о создании небольшого кластера (10–20 узлов). Однако я хочу, чтобы обычные программы (не предназначенные для кластеров) могли воспользоваться преимуществами дополнительной скорости обработки. В самом идеальном сценарии я хотел бы иметь возможность запускать один гипервизор для всего кластера. Насколько я могу судить, не существует хорошего решения этой проблемы, которое могло бы взять обычную программу и ускорить ее выполнение в кластере.

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

Скажем так, что теоретически все узлы кластера могут загружаться с одного и того же диска. Следовательно, все они имеют прямой доступ к идентичным данным и идентичным программам. Во-вторых, давайте предположим, что ядро ​​Linux может быть изменено для отправки каждой новой команды на другой подчиненный узел, бесконечный цикл через все узлы. Учитывая эти два условия, пользователь может войти в терминал главного узла и запускать команды в обычном (некластерно-ориентированном) формате, но загрузка команд будет более или менее равномерно распределена по кластеру.

Итак, после этого введения, вот два моих вопроса:

  1. Можно ли создать такую ​​среду, в которой все компьютеры загружаются с одного диска (возможно, с NAS)? (Мне известно о PXE, но, насколько я могу судить, он не обеспечивает постоянного хранилища, в нем размещается только ОС.) Если это в настоящее время возможно, как это можно сделать?
  2. Можно ли изменить ядро, чтобы делегировать каждую новую команду отдельному узлу? (Это можно сделать, изменив двоичный файл bash вместо самого ядра - я не уверен.) Если да, пожалуйста, объясните, как.

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

Можно ли создать такую ​​среду, в которой все компьютеры загружаются с одного диска (возможно, с NAS)? (Мне известно о PXE, но, насколько я могу судить, он не обеспечивает постоянного хранилища, на нем размещается только ОС.)

Конечно, комбинация PXE с общим ресурсом, подключенным к NFS, для постоянного хранения.

Можно ли изменить ядро, чтобы делегировать каждую новую команду отдельному узлу?

Да.

Все просто, правда? Не так уж много.

Вам следует задать следующий вопрос: сколько работы потребуется для этого?

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

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

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