Плюсы и минусы кластера Пи?

33

Я видел много постов, в которых спрашивалось, как создать «суперкомпьютер» или кластер с Raspberry Pis, но я нашел очень мало о плюсах и минусах создания сети Pis. Я заинтересован в создании собственного небольшого кластера, но у меня есть несколько вопросов.

Будучи кластеризованными, действуют ли RPI как один виртуальный компьютер, или у вас есть индивидуальный контроль над всеми RPI? Один узел контролирует другие?

Есть ли что-нибудь, что может сделать RPI, ограниченный в кластере? Например, я все еще буду контролировать все отдельные порты GPIO?

Насколько быстрее это делает пи? Допустим, я делаю кластер из 2 узлов, разогнанный до 1 ГГц каждый, будет ли у меня процессор «двухъядерный 1 ГГц»? Должен ли кластер быть в двоичных числах? (напр. 1,2,4,8,16,32,64)

Это усложнит мой веб-хостинг через NGINX для пи? Могут ли вычислительные мощности определенных узлов быть назначены для конкретных задач, которые они выполняют? Например, узел 1 будет обрабатывать запросы веб-служб, узел 2 - облачное хранилище и т. Д.

SuperAdmin
источник

Ответы:

49

Несколько интересных вопросов. Я думаю, вы, возможно, немного не понимаете, как работают «суперкомпьютеры», созданные с помощью Raspberry Pis. Они не функционируют как автоматическая система распределения нагрузки. Они предназначены для так называемого параллельного программирования , где сложная задача разбивается на части, которые могут выполняться одновременно. Главный Pi в кластере (головной узел) отвечает за организацию всей задачи, и каждый Pi в кластере (клиентские узлы) выполняет свою выделенную работу и сообщает результаты обратно головному узлу. Библиотеки, такие как OpenMPI, являются ключевыми для этого.

Кроме того, созданные кластеры Raspberry Pi не были созданы в качестве эффективных вычислительных устройств. Они были построены как платформы для разработки . Покупать 32 Raspberry Pis значительно дешевле, чем 32 настольных ПК. Таким образом, вы можете разрабатывать и тестировать программное обеспечение для параллельного программирования гораздо дешевле. Единственная альтернатива, если у вас нет Pis или ПК, это запросить процессорное время на реальном суперкомпьютере. В зависимости от размера рассматриваемого компьютера это может стоить денег или долго ждать, пока ресурсы не станут доступны. Вот почему люди создали свои личные кластеры. Имеет смысл запускать ваше приложение на реальном компьютере только тогда, когда вы узнаете, что оно работает!

Итак, помня об этом и перейдя к конкретным вопросам.

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

В кластере, так как каждый Pi использует свою собственную копию Linux, каждый Pi будет сохранять локальное управление своими портами GPIO. Я не уверен, как программное обеспечение действительно использовало бы это в параллельной вычислительной среде, но вы здесь.

Кластер на самом деле не делает Pi быстрее, потому что это не один компьютер. То, что вы получаете, это просто способность делать больше одновременно. Вы не ограничены числом, кратным двум. Однако существует реальный практический верхний предел для кластерных компьютеров в зависимости от выполняемых задач. Представьте себе, если вы выполняете параллельный расчет на многих Pis, который требует 200 шагов. Однако каждый следующий шаг требует информации, которую каждый Пи рассчитывает на своем предыдущем шаге. Таким образом, каждый Pi должен получать данные от каждого другого Pi на каждой итерации. В зависимости от количества времени, которое требуется каждой итерации для вычисления, вы можете потратить больше времени на отправку данных, чем на вычисление. Вот почему большинство суперкомпьютеров используют InfiniBandсеть. Это очень быстро, так что вы можете сделать больше расчета. Решение этой проблемы состоит в том, чтобы использовать меньше Pis, но заставлять их выполнять больше работы в каждой итерации, но это может оказаться невозможным в зависимости от вашего алгоритма. Отсюда практический верхний предел. (На Pis это было бы особенно плохо, потому что USB Ethernet довольно медленный.)

Итак, перейдем к практическому применению, распределенному веб-хостингу! Вы можете воспользоваться несколькими Pis здесь, это просто не обычный кластер. Скажем, у вас есть 5 пис. Мы будем называть их GatewayPi, WebPi1, WebPi2, WebPi3 и DataPi. GatewayPi обращен к Интернету и использует Nginix для обработки веб-запросов, но не выполняет никакой обработки. Вместо этого он выполняет балансировку нагрузки., Он использует прокси и случайным образом перенаправляет входящий запрос на WebPi1, WebPi2 или WebPi3. Мы только что утроили мощность нашей веб-инфраструктуры, потому что теперь мы можем обрабатывать больше запросов одновременно. А как насчет DataPi? DataPi подключил жесткий диск, на котором хранятся все наши веб-данные, и работает на сервере NFS. WebPiX устанавливает общий ресурс NFS, чтобы иметь доступ к данным для обработки. Таким образом, мы можем запускать резервные копии только в одном месте и можем сэкономить место на диске.

Я только что описал модель, которую используют крупные компании, такие как Google и Facebook, но уменьшенную до размера Raspberry Pi. Из-за стоимости Pis единственный улов заключается в том, что для этого необходимо создать ту же платформу разработки (но для веб-обслуживания), что и кластер Pis для параллельного программирования. Использование нескольких Pis из-за их сравнительно низкой вычислительной мощности вскоре приводит к снижению производительности и энергопотреблению, поскольку вы стремитесь к обработке больших объемов данных. Но только для обучения? Они идеальны.

Фред
источник
Поэтому, если я работаю над домашним проектом, для дешевого веб-хостинга из 2 веб-сайтов, контролируя вентиляторы охлаждения через GPIO, SSH, FTP, облачное хранилище, домашнюю автоматизацию, стоило бы сделать небольшой кластер для правильного распределения задач?
SuperAdmin
4
+1 Я пришел к этому вопросу с любопытством и ушел с небольшим образованием. Отличный ответ.
jrhorn424
@iOSNoob, если вы единственный человек, который использует его, и вы когда-либо делаете только одну из этих вещей одновременно, это может не стоить кластера даже тогда, потому что ресурсы распределяются по мере необходимости. Если оперативной памяти просто недостаточно или у вас больше нагрузки, чем у одного человека, то это, вероятно, того стоит. Я бы поставил такие вещи, как вентиляторы и домашняя автоматизация на отдельный Pis просто для безопасности Вы действительно хотите 0 шансов, что кто-то будет возиться с вещами в вашем доме ... Если вам нужно прыгнуть через дополнительный Pi, чтобы добраться до этих систем, тем лучше. Это дополнительный уровень безопасности.
Фред
@ jrhorn424 Я рад, что тебе понравилось! Недавно я посетил мероприятие по высокопроизводительным (супер) вычислениям, так что этот материал был свежим в моей памяти. Идеальное время, чтобы написать это.
Фред
1
Фред описал конкретный пример почти точной архитектуры веб-хостинга: pidramble.com (ссылки на код / ​​инструкции на GitHub, где вы можете создать свой собственный файл с любой разновидностью Pi).
geerlingguy