I de næste par uger vil jeg offentliggøre et par videoer om klyngeberegning med Raspberry Pi, og jeg vil lægge videoen + udskrift på min blog, så du kan følge med, selv hvis du ikke bryder dig om at se på en video 🙂
Dette er et Raspberry Pi Compute Module.
Og dette er en stak af 7 Raspberry Pi Compute Modules.
Det er det samme som en Raspberry Pi model B, men den dropper alle IO-porte for at få en mere fleksibel formfaktor, som Rasbperry Pi Foundation siger er “velegnet til industrielle applikationer”. Men i mit tilfælde er jeg interesseret i at bruge den til at opbygge en klynge af Raspberry Pis.
Jeg vil udforske konceptet med cluster computing ved hjælp af Raspberry Pis, og jeg er begejstret for at være i besiddelse af et spilforandrende Raspberry-Pi-baseret klyngekort, Turing Pi.
Jeg kommer snart til Turing Pi, men i denne første episode ville jeg dække, hvorfor jeg elsker at bruge Raspberry Pis til klynger.
Men først, hvad er en klynge?
Cluster Computing
En masse mennesker forsøger at løse komplekse problemer med computere. Nogle gange gør de ting som f.eks. at servere en webside for et stort antal besøgende. Dette kræver meget båndbredde og mange “backend”-computere til at håndtere hver af de millioner af forespørgsler. Nogle mennesker, som f.eks. vejrudsigter, skal finde resultaterne af milliarder af små beregninger.
Der er to måder at fremskynde denne slags operationer på:
- Ved vertikal skalering, hvor man har en enkelt server, og man sætter en hurtigere CPU, mere RAM og hurtigere forbindelser ind.
- Ved horisontal skalering, hvor man opdeler opgaverne og bruger flere computere.
Tidligt tog systemer som Cray-supercomputere den vertikale skalering til det yderste. En massiv computer, der kostede millioner af dollars, var den hurtigste computer i en periode. Men denne fremgangsmåde har nogle begrænsninger, og at have alt investeret i én maskine betyder nedetid, når den skal vedligeholdes, og begrænsede (ofte smertefuldt dyre) opgraderinger.
I de fleste tilfælde er det mere overkommeligt – og nogle gange den eneste mulige måde – at skalere horisontalt ved at bruge mange computere til at håndtere store beregninger eller meget webtrafik.
Clustering er blevet lettere med fremkomsten af Beowulf-agtige klynger i 90’erne og nyere software som Kubernetes, der problemfrit distribuerer programmer på mange computere i stedet for manuelt at placere programmer på forskellige computere.
Selv med denne software er der to store problemer med at skalere horisontalt – især hvis du har et budget:
- Hver computer koster en smule penge og kræver individuel strøm og netværksforbindelse. For nogle få computere er det ikke noget stort problem, men når du begynder at have fem eller flere computere, er det svært at holde tingene ryddelige og kølige.
- Det er nemt at administrere computerne, eller “noder” i klyngesprog, når der er en eller to. Men opskaleret til fem eller ti kræver selv simple ting som at genstarte servere eller starte et nyt job software til at koordinere det hele.
The Raspberry Pi Dramble
I 2015 besluttede jeg mig for at opsætte min første ‘bramble’. En bramble er en klynge af Raspberry Pi-servere. “Hvorfor hedder det en bramble?” spørger du måske? Jo, fordi en naturlig klynge af hindbær, som man kan spise, kaldes en ‘bramble’.
Så jeg begyndte at opbygge en bramble ved hjælp af software kaldet Ansible til at installere en fælles softwarestak på tværs af serverne for at køre Drupal. Jeg installerede Linux, Apache, MySQL og PHP, hvilket er almindeligt kendt som “LAMP”-stakken.
Da min bramble kørte Drupal, fandt jeg på portmanteauet “dramble”, og dermed var Raspberry Pi Dramble født.
Den første version af klyngen havde seks knudepunkter, og jeg havde en masse mikro-USB-kabler tilsluttet til en USB-strømadapter samt en masse Ethernet-kabler tilsluttet til en 8-port ethernet-switch.
Da Raspberry Pi model 3 kom ud, trimmede jeg den ned til 5 knudepunkter.
Derpå, da Raspberry Pi Zero blev introduceret, som er på størrelse med en tyggegummistok, købte jeg fem af dem og lavede en lille klynge ved hjælp af USB WiFi-adaptere, men indså hurtigt, at den gamle processor på Zero var ekstremt underpowered, og jeg opgav den klynge.
I 2017 besluttede jeg mig for at begynde at bruge Kubernetes til at administrere Drupal og LAMP-stakken, selv om jeg stadig brugte Ansible til at konfigurere de enkelte Pis og få Kubernetes installeret på dem.
Og dagens Dramble, som består af fire Raspberry Pi model 4-kort, bruger det officielle Power-over-Ethernet (PoE)-kort, hvilket gjorde det muligt for mig at droppe virvaret af USB-strømkabler, men det kræver en dyrere PoE-switch.
Pi Dramble er dog ikke helt seriøs. Jeg har haft det sjovt med det, herunder at lave en hyldest til en gammel film, som jeg nød:
Igennem hele denne oplevelse har jeg dokumenteret alle aspekter af byggeriet, herunder alle Ansible playbooks, som et open source-projekt, der er linket fra pidramble.com, og mange andre har fulgt disse planer og bygget Pi Dramble på egen hånd!
Hvorfor Raspberry Pi?
Det er alt sammen for at sige, at jeg har brugt meget tid på at administrere en klynge af Raspberry Pis, og det første spørgsmål, jeg som regel bliver stillet, er “hvorfor valgte du Raspberry Pis til din klynge?”
Det er et meget godt spørgsmål.
En individuel Raspberry Pi er ikke så hurtig som de fleste moderne computere. Og den har begrænset RAM (selv den nyeste Pi model 4 har højst 4 GB RAM). Og den er heller ikke god til hurtig eller pålidelig diskadgang.
Det er lidt mere omkostningseffektivt og normalt mere strømbesparende at bygge eller købe en lille NUC-maskine (“Next Unit of Computing”), der har mere rå CPU-ydelse, mere RAM, en hurtig SSD og flere udvidelsesmuligheder.
Men er det sjovt at bygge nogle VM’er for at simulere en klynge på en NUC?
Jeg vil sige: “Nej”. Altså, ikke så meget som at bygge en klynge af Raspberry Pis!
Og administration af “bare metal”-servere i stedet for virtuelle maskiner kræver også mere disciplin i forbindelse med provisionering, netværk og orkestrering. Disse tre færdigheder er meget nyttige i mange moderne it-jobs!
Og mens du måske ønsker at optimere for ren ydeevne, er der også tidspunkter, som når du bygger Kubernetes-klynger, hvor du ønsker at optimere for antallet af CPU-kerner. Hvis du ønsker at bygge en enkelt computer med 32 CPU-kerner, kan du overveje AMD ThreadRipper 3970x, som har 32 kerner. Problemet er, at processoren koster næsten 2.000 dollars, og det er kun processoren – resten af computerens komponenter ville bringe dig over 3.000 dollars i alt for dette rig.
For Raspberry Pi har hvert compute board en CPU med 4 kerner, og ved at sætte 7 Pis sammen får du 28 kerner. Næsten det samme antal kerner, men koster mindre end 300 dollars i alt. Selv med de ekstra omkostninger til en Turing Pi og en strømforsyning er det det samme antal CPU-kerner til 1/4 af prisen!
Ja, jeg ved godt, at 1 ThreadRipper-kerne ≠ 1 Pi CM-kerne; men i mange K8s-applikationer er en kerne en kerne, og jo flere jo bedre. Ikke alle operationer er CPU-bundet og ville have gavn af at have 4-8x hurtigere rå gennemløb, eller de mange andre små finesser, som ThreadRipper tilbyder (som mere cache).
Endeligt er en af de vigtigste lektioner, jeg lærer ved at arbejde med Arduinos og Raspberry Pis, dette: At arbejde med ressourcebegrænsninger som begrænset RAM eller langsom IO fremhæver ineffektiviteter i din kode, på en måde, du aldrig ville bemærke, hvis du altid bygger og arbejder på den nyeste Core i9 eller ThreadRipper CPU med masser af RAM og 100-tusindvis af IOPS!
Hvis du ikke kan få noget til at køre godt på en Raspberry Pi, så tænk på dette: Mange smartphones og low-end computere har lignende begrænsninger, og folk, der bruger disse enheder, vil have samme slags oplevelse.
Selv på hurtige cloud computing-instanser vil du desuden støde på netværks- og IO-flaskehalse fra tid til anden, og hvis din applikation fejler i disse situationer, kan du få en verden af smerte. Ved at få dem til at køre på en Raspberry Pi kan du hjælpe dig med at identificere disse problemer hurtigt.
Hvorfor Turing Pi?
Så, for at vende tilbage til Turing Pi: Hvad gør dette bedre end en klynge af standard Raspberry Pis, som Pi Dramble?
Tja, abonnér på min YouTube-kanal – jeg vil udforske, hvad der gør Turing Pi til en god ting, og hvordan man opsætter en ny klynge i min næste video! Hvis du kunne lide dette indhold og ønsker at se mere, kan du overveje at støtte mig på GitHub eller Patreon.