Jag kommer att publicera några videor som diskuterar klusterberäkningar med Raspberry Pi under de närmaste veckorna, och jag kommer att lägga upp videon och transkriptet på min blogg så att du kan följa med även om du inte tycker om att sitta och titta på videor 🙂
Detta är en Raspberry Pi Compute Module.
Och det här är en stapel med 7 Raspberry Pi Compute Modules.
Det är samma sak som en Raspberry Pi modell B, men den släpper alla IO-portar för att få en mer flexibel formfaktor, som Rasbperry Pi Foundation säger är ”lämplig för industriella applikationer”. Men i mitt fall är jag intresserad av att använda den för att bygga ett kluster av Raspberry Pis.
Jag ska utforska konceptet klusterdrift med hjälp av Raspberry Pis, och jag är glad över att vara i besittning av en Raspberry-Pi-baserad klusterbräda som förändrar spelet, Turing Pi.
Jag kommer snart till Turing Pi, men i det här första avsnittet ville jag ta upp varför jag älskar att använda Raspberry Pis för kluster.
Men först, vad är ett kluster?
Cluster Computing
En hel del människor försöker lösa komplexa problem med datorer. Ibland gör de saker som att servera en webbsida till en stor mängd besökare. Detta kräver mycket bandbredd och många ”backend”-datorer för att hantera var och en av de miljontals förfrågningarna. Vissa människor, t.ex. väderprognosmakare, måste hitta resultaten av miljarder små beräkningar.
Det finns två sätt att snabba upp den här typen av operationer:
- Den vertikala skalningen innebär att man har en enda server och sätter in en snabbare CPU, mer RAM-minne och snabbare anslutningar.
- Om man skalar horisontellt, där man delar upp uppgifterna och använder flera datorer.
Förr tog system som Cray superdatorer vertikal skalning till det yttersta. En massiv dator som kostade miljontals dollar var den snabbaste datorn under en tid. Men detta tillvägagångssätt har vissa begränsningar, och att ha allt investerat i en maskin innebär driftstopp när den behöver underhåll och begränsade (ofta smärtsamt dyra) uppgraderingar.
I de flesta fall är det mer prisvärt – och ibland det enda möjliga sättet – att skala horisontellt, genom att använda många datorer för att hantera stora beräkningar eller mycket webbtrafik.
Klustering har blivit enklare i och med tillkomsten av Beowulf-liknande kluster på 90-talet och nyare programvara som Kubernetes, som sömlöst distribuerar program över många datorer, i stället för att manuellt placera program på olika datorer.
Även med den här programvaran finns det två stora problem med att skala horisontellt – särskilt om du har en liten budget:
- Varje dator kostar lite pengar, och kräver individuell ström och nätverk. För några få datorer är detta inget stort problem, men när du börjar ha fem eller fler datorer är det svårt att hålla allting snyggt och svalt.
- Hanteringen av datorerna, eller ”noderna” i klusterspråk, är enkel när det finns en eller två. Men om man skalar upp till fem eller tio kräver även enkla saker som att starta om servrar eller starta ett nytt jobb programvara för att samordna allt.
The Raspberry Pi Dramble
Under 2015 bestämde jag mig för att sätta upp min första ”bramble”. En bramble är ett kluster av Raspberry Pi-servrar. ”Varför kallas det för en bramble?” kanske du frågar dig? Jo, eftersom ett naturligt kluster av hallon som du kan äta kallas för en ”bramble”.
Så jag började bygga en bramble med hjälp av en programvara som heter Ansible för att installera en gemensam programvarustak över servrarna för att köra Drupal. Jag installerade Linux, Apache, MySQL och PHP, vilket är allmänt känt som ”LAMP”-stacken.
Då min bramble körde Drupal hittade jag på portmanteau ”dramble”, och därmed var Raspberry Pi Dramble född.
Den första versionen av klustret hade sex noder, och jag hade ett gäng mikro-USB-kablar inkopplade i en USB-strömadapter, plus ett gäng Ethernet-kablar inkopplade i en Ethernet-switch med åtta portar.
När Raspberry Pi modell 3 kom ut trimmade jag ner det till 5 noder.
När Raspberry Pi Zero introducerades, som är lika stor som ett tuggummipinne, köpte jag fem stycken och gjorde ett litet kluster med hjälp av USB WiFi-adaptrar, men insåg snabbt att den gamla processorn i Zero var extremt underkraftig, och jag gav upp det klustret.
Under 2017 bestämde jag mig för att börja använda Kubernetes för att hantera Drupal och LAMP-stacken, även om jag fortfarande använde Ansible för att konfigurera de enskilda Pis och få Kubernetes installerat på dem.
Och dagens Dramble, som består av fyra Raspberry Pi modell 4-kort, använder det officiella PoE-kortet (Power-over-Ethernet), vilket gjorde att jag kunde slopa virrvarret av USB-strömkablar, men kräver en dyrare PoE-switch.
Pi Dramble är dock inte bara seriös. Jag har haft lite kul med den, bland annat genom att göra en hyllning till en gammal film som jag gillade:
Under hela den här erfarenheten har jag dokumenterat varje aspekt av byggandet, inklusive alla Ansible playbooks, som ett open source-projekt som länkas från pidramble.com, och många andra har följt de här planerna och byggt Pi Dramble på egen hand!
Varför Raspberry Pi?
Detta är allt för att säga att jag har tillbringat mycket tid med att hantera ett kluster av Raspberry Pis, och den första frågan jag brukar få är ”varför valde du Raspberry Pis för ditt kluster?”
Det är en mycket bra fråga.
En enskild Raspberry Pi är inte lika snabb som de flesta moderna datorer. Och den har ett begränsat RAM-minne (till och med den senaste Pi modell 4 har högst 4 GB RAM-minne). Och den är inte heller bra för snabb eller pålitlig diskåtkomst.
Det är något mer kostnadseffektivt och vanligtvis mer energieffektivt att bygga eller köpa en liten NUC-maskin (”Next Unit of Computing”) som har mer rå CPU-prestanda, mer RAM, en snabb SSD och fler expansionsmöjligheter.
Men är det roligt att bygga några virtuella maskiner för att simulera ett kluster på en NUC?
Jag skulle säga ”Nej”. Inte lika mycket som att bygga ett kluster av Raspberry Pis!
Och att hantera ”bare metal”-servrar i stället för virtuella maskiner kräver också mer disciplin för tillhandahållande, nätverk och orkestrering. Dessa tre färdigheter är mycket användbara i många moderna IT-jobb!
Och även om du kanske vill optimera för ren prestanda finns det tillfällen, som när du bygger Kubernetes-kluster, där du vill optimera för antalet CPU-kärnor. Om du vill bygga en enda dator med 32 CPU-kärnor kan du överväga AMD ThreadRipper 3970x, som har 32 kärnor. Problemet är att processorn kostar nästan 2 000 dollar, och det är bara processorn – resten av datorns komponenter skulle kosta mer än 3 000 dollar totalt för den här riggen.
För Raspberry Pi har varje beräkningsbräda en CPU med fyra kärnor, och om du slår ihop sju Pis får du 28 kärnor. Nästan samma antal kärnor, men kostar mindre än 300 dollar totalt. Även med den extra kostnaden för en Turing Pi och ett nätaggregat är det samma antal CPU-kärnor för 1/4 av kostnaden!
Ja, jag vet att 1 ThreadRipper-kärna ≠ 1 Pi CM-kärna, men i många K8s-tillämpningar är en kärna en kärna, och ju fler desto bättre. Alla operationer är inte CPU-bundna och skulle gynnas av att ha 4-8x snabbare rågenomströmning, eller de många andra små finesser som ThreadRipper erbjuder (som mer cache).
En av de viktigaste lärdomarna jag får när jag arbetar med Arduinos och Raspberry Pis är följande: att arbeta med resursbegränsningar som begränsat RAM-minne eller långsamma IOPS belyser ineffektivitet i din kod, på ett sätt som du aldrig skulle märka om du alltid byggde och arbetade på den senaste Core i9- eller ThreadRipper-CPU:n med massor av RAM-minne och 100 000-tals IOPS!
Om du inte kan få något att fungera bra på en Raspberry Pi, tänk då på följande: många smartphones och lågprestandadatorer har liknande begränsningar, och människor som använder dessa enheter skulle få samma typ av upplevelse.
Och även på snabba molndatainstanser kommer du att stöta på nätverks- och IO-flaskhalsar från tid till annan, och om din applikation misslyckas i dessa situationer kan det vara en värld av smärta för dig. Om du får dem att köra på en Raspberry Pi kan du identifiera dessa problem snabbt.
Varför Turing Pi?
Så, för att återgå till Turing Pi: vad gör detta bättre än ett kluster av vanliga Raspberry Pis, som Pi Dramble?
Skriva in dig på min YouTube-kanal – jag kommer att utforska vad som får Turing Pi att fungera och hur man sätter upp ett nytt kluster i min nästa video! Om du gillade det här innehållet och vill se mer kan du överväga att stödja mig på GitHub eller Patreon.