Nelle prossime settimane pubblicherò alcuni video in cui si parlerà di cluster computing con il Raspberry Pi, e pubblicherò il video + la trascrizione sul mio blog in modo che tu possa seguirlo anche se non ti piace guardare un video 🙂
Questo è un Raspberry Pi Compute Module.
E questo è uno stack di 7 Raspberry Pi Compute Module.
E’ la stessa cosa di un Raspberry Pi modello B, ma elimina tutte le porte IO per un fattore di forma più flessibile, che la Rasbperry Pi Foundation dice essere “adatto per applicazioni industriali”. Ma nel mio caso, sono interessato ad usarlo per costruire un cluster di Raspberry Pis.
Ho intenzione di esplorare il concetto di cluster computing utilizzando Raspberry Pis, e sono entusiasta di essere in possesso di una scheda cluster basata su Raspberry-Pi che cambia il gioco, il Turing Pi.
Verrò presto al Turing Pi, ma in questo primo episodio, volevo spiegare perché amo usare Raspberry Pis per i cluster.
Ma prima, cos’è un cluster?
Cluster Computing
Un sacco di gente cerca di risolvere problemi complessi con i computer. A volte fanno cose come servire una pagina web a una grande quantità di visitatori. Questo richiede molta larghezza di banda, e molti computer ‘backend’ per gestire ognuno dei milioni di richieste. Alcune persone, come i meteorologi, hanno bisogno di trovare i risultati di miliardi di piccoli calcoli.
Ci sono due modi per accelerare questo tipo di operazioni:
- Per scalare verticalmente, dove si ha un singolo server e si mette una CPU più veloce, più RAM e connessioni più veloci.
- Per scalare orizzontalmente, dove si dividono i compiti e si usano più computer.
Presto, sistemi come i supercomputer Cray hanno portato lo scaling verticale all’estremo. Un computer enorme che costava milioni di dollari è stato il computer più veloce per un certo periodo. Ma questo approccio ha dei limiti, e avere tutto investito in una sola macchina significa tempi morti quando ha bisogno di manutenzione, e aggiornamenti limitati (spesso dolorosamente costosi).
Nella maggior parte dei casi, è più conveniente – e a volte, l’unico modo possibile – scalare orizzontalmente, usando molti computer per gestire grandi calcoli o molto traffico web.
Il clustering è diventato più facile con l’avvento dei cluster in stile Beowulf negli anni ’90 e con software più recenti come Kubernetes, che distribuisce senza soluzione di continuità le applicazioni su molti computer, invece di mettere manualmente le applicazioni su computer diversi.
Anche con questo software, ci sono due grandi problemi con la scalabilità orizzontale, specialmente se si ha un budget limitato:
- Ogni computer costa un po’ di soldi e richiede potenza individuale e rete. Per pochi computer questo non è un grosso problema, ma quando si iniziano ad avere cinque o più computer, è difficile mantenere le cose ordinate e fresche.
- Gestire i computer, o ‘nodi’ nel linguaggio dei cluster, è facile quando ce ne sono uno o due. Ma scalati fino a cinque o dieci, anche fare cose semplici come riavviare i server o dare il via a un nuovo lavoro richiede un software per coordinare tutto.
Il Raspberry Pi Dramble
Nel 2015, ho deciso di impostare il mio primo ‘bramble’. Un bramble è un cluster di server Raspberry Pi. “Perché si chiama “bramble”?” vi chiederete? Beh, perché un cluster naturale di lamponi che si potrebbe mangiare si chiama ‘bramble’.
Così ho iniziato a costruire un bramble utilizzando un software chiamato Ansible per installare uno stack software comune tra i server per eseguire Drupal. Ho impostato Linux, Apache, MySQL e PHP, che è comunemente noto come lo stack ‘LAMP’.
Siccome il mio bramble faceva girare Drupal, ho inventato il portmanteau ‘dramble’, e così è nato il Raspberry Pi Dramble.
La prima versione del cluster aveva sei nodi, e avevo un mucchio di cavi micro USB collegati a un adattatore di alimentazione USB, più un mucchio di cavi Ethernet collegati a uno switch ethernet a 8 porte.
Quando è uscito il Raspberry Pi modello 3, l’ho ridotto a 5 nodi.
Poi, quando è stato introdotto il Raspberry Pi Zero, che ha le dimensioni di una gomma da masticare, ne ho comprati cinque e ho fatto un piccolo cluster usando adattatori WiFi USB, ma ho capito subito che il vecchio processore dello Zero era estremamente poco potente, e ho lasciato perdere quel cluster.
Nel 2017, ho deciso di iniziare a utilizzare Kubernetes per gestire Drupal e lo stack LAMP, anche se ho ancora usato Ansible per configurare i singoli Pis e ottenere Kubernetes installato su di essi.
E il Dramble di oggi, che è composto da quattro schede Raspberry Pi modello 4, utilizza la scheda ufficiale Power-over-Ethernet (PoE), che mi ha permesso di abbandonare il groviglio di cavi di alimentazione USB, ma richiede uno switch PoE più costoso.
Il Pi Dramble non è tutto serio, però. Mi sono divertito un po’, compreso un omaggio a un vecchio film che mi piaceva:
In tutta questa esperienza, ho documentato ogni aspetto della costruzione, compresi tutti i playbook Ansible, come un progetto open source che è collegato da pidramble.com, e molti altri hanno seguito questi piani e costruito il Pi Dramble da soli!
Perché Raspberry Pi?
Tutto questo per dire che ho passato molto tempo a gestire un cluster di Raspberry Pis, e la prima domanda che di solito mi viene posta è “perché hai scelto Raspberry Pis per il tuo cluster?”
È un’ottima domanda.
Un singolo Raspberry Pi non è veloce come la maggior parte dei computer moderni. E ha una RAM limitata (anche l’ultimo modello Pi 4 ha, al massimo, 4 GB di RAM). E non è nemmeno il massimo per un accesso al disco veloce o affidabile.
È leggermente più conveniente e di solito più efficiente dal punto di vista energetico costruire o comprare una piccola macchina NUC (“Next Unit of Computing”) che ha più prestazioni della CPU, più RAM, un SSD veloce e più capacità di espansione.
Ma è divertente costruire alcune VM per simulare un cluster su un NUC?
Direi “No”. Beh, non tanto quanto costruire un cluster di Raspberry Pis!
E gestire server ‘bare metal’ invece di macchine virtuali richiede anche più disciplina per il provisioning, il networking e l’orchestrazione. Queste tre abilità sono molto utili in molti lavori IT moderni!
Inoltre, mentre si potrebbe voler ottimizzare per le prestazioni pure, ci sono momenti, come quando si costruiscono cluster Kubernetes, in cui si vuole ottimizzare per il numero di core della CPU. Se si volesse costruire un singolo computer con 32 core della CPU, si potrebbe considerare l’AMD ThreadRipper 3970x, che ha 32 core. Il problema è che il processore costa quasi $2,000, ed è solo il processore – il resto dei componenti del computer ti farebbe superare i $3,000 in totale per questo impianto.
Per il Raspberry Pi, ogni scheda di calcolo ha una CPU a 4 core, e mettendo insieme 7 Pis si ottengono 28 core. Quasi lo stesso numero di core, ma costa meno di 300 dollari in totale. Anche con il costo aggiunto di un Turing Pi e un alimentatore, è lo stesso numero di core della CPU per 1/4 del costo!
Sì, so che 1 core ThreadRipper ≠ 1 core Pi CM; ma in molte applicazioni K8s, un core è un core, e più sono meglio è. Non tutte le operazioni sono legate alla CPU e trarrebbero vantaggio dall’avere un throughput grezzo 4-8 volte più veloce, o dai molti altri piccoli vantaggi offerti dal ThreadRipper (come più cache).
Infine, una delle lezioni più importanti che imparo lavorando con Arduino e Raspberry Pis è questa: lavorare con vincoli di risorse come la RAM limitata o l’IO lento evidenzia le inefficienze nel vostro codice, in un modo che non notereste mai se costruiste e lavoraste sempre sull’ultima CPU Core i9 o ThreadRipper con un sacco di RAM e centinaia di migliaia di IOPS!
Se non riuscite a far funzionare bene qualcosa su un Raspberry Pi, considerate questo: molti smartphone e computer di fascia bassa hanno vincoli simili, e le persone che usano questi dispositivi avrebbero lo stesso tipo di esperienza.
Inoltre, anche su istanze di cloud computing veloci, vi imbatterete in colli di bottiglia di rete e IO di tanto in tanto, e se la vostra applicazione fallisce in queste situazioni, potreste essere in un mondo di dolore. Farle girare su un Raspberry Pi può aiutarvi a identificare rapidamente questi problemi.
Perché Turing Pi?
Perciò, tornando al Turing Pi: cosa lo rende migliore di un cluster di Raspberry Pis standard, come il Pi Dramble?
Bene, iscrivetevi al mio canale YouTube: nel mio prossimo video esplorerò cosa fa funzionare il Turing Pi e come impostare un nuovo cluster! Se ti è piaciuto questo contenuto e vuoi vederne altri, considera di supportarmi su GitHub o Patreon.