Несколько интересных вопросов. Я думаю, вы, возможно, немного не понимаете, как работают «суперкомпьютеры», созданные с помощью 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 из-за их сравнительно низкой вычислительной мощности вскоре приводит к снижению производительности и энергопотреблению, поскольку вы стремитесь к обработке больших объемов данных. Но только для обучения? Они идеальны.