Ik zal de komende weken een paar video’s plaatsen over cluster computing met de Raspberry Pi, en ik zal de video + het transcript op mijn blog zetten zodat je het ook kunt volgen als je geen zin hebt om een video te bekijken 🙂
Dit is een Raspberry Pi Compute Module.
En dit is een stapel van 7 Raspberry Pi Compute Modules.
Het is hetzelfde als een Raspberry Pi model B, maar het laat alle IO-poorten weg om een flexibelere vormfactor te krijgen, die volgens de Rasbperry Pi Foundation “geschikt is voor industriële toepassingen”. Maar in mijn geval, ben ik geïnteresseerd in het gebruik ervan om een cluster van Raspberry Pis te bouwen.
Ik ga het concept van cluster computing met behulp van Raspberry Pis verkennen, en ik ben enthousiast om in het bezit te zijn van een spel-veranderende Raspberry-Pi gebaseerd cluster board, de Turing Pi.
De Turing Pi komt binnenkort aan bod, maar in deze eerste aflevering wil ik uitleggen waarom ik zo graag Raspberry Pis voor clusters gebruik.
Maar eerst, wat is een cluster?
Cluster Computing
Veel mensen proberen complexe problemen met computers op te lossen. Soms doen ze dingen zoals een webpagina aan een groot aantal bezoekers aanbieden. Dit vereist veel bandbreedte, en veel ‘backend’ computers om elk van de miljoenen verzoeken af te handelen. Sommige mensen, zoals weervoorspellers, moeten de resultaten van miljarden kleine berekeningen vinden.
Er zijn twee manieren om dit soort operaties te versnellen:
- Door verticaal te schalen, waarbij je een enkele server hebt, en je er een snellere CPU, meer RAM, en snellere verbindingen in stopt.
- Door horizontaal te schalen, waarbij je de taken opsplitst en meerdere computers gebruikt.
Al vroeg werd verticale schaalvergroting tot het uiterste doorgevoerd in systemen als de supercomputers van Cray. Een enorme computer die miljoenen dollars kostte, was een tijd lang de snelste computer. Maar deze aanpak heeft zijn beperkingen, en alles investeren in één machine betekent downtime als er onderhoud nodig is, en beperkte (vaak pijnlijk dure) upgrades.
In de meeste gevallen is het betaalbaarder – en soms de enige mogelijke manier – om horizontaal te schalen, met veel computers om grote berekeningen of veel webverkeer te verwerken.
Clustering is eenvoudiger geworden met de komst van Beowulf-achtige clusters in de jaren 90 en nieuwere software zoals Kubernetes, die naadloos applicaties over veel computers distribueert, in plaats van handmatig applicaties op verschillende computers te plaatsen.
Zelfs met deze software zijn er twee grote problemen met horizontaal schalen – vooral als je een budget hebt:
- Elke computer kost een beetje geld, en vereist individuele voeding en netwerken. Voor een paar computers is dit geen groot probleem, maar als je met vijf of meer computers begint, is het moeilijk om alles netjes en koel te houden.
- Het beheren van de computers, of ‘nodes’ in clustertaal, is eenvoudig als het er een of twee zijn. Maar opgeschaald naar vijf of tien, vereist zelfs het doen van eenvoudige dingen zoals het rebooten van servers of het starten van een nieuwe taak software om alles te coördineren.
De Raspberry Pi Dramble
In 2015 besloot ik mijn eerste ‘bramble’ op te zetten. Een bramble is een cluster van Raspberry Pi servers. “Waarom wordt het een bramble genoemd?” zult u zich misschien afvragen? Nou, omdat een natuurlijk cluster frambozen dat je kunt eten een ‘bramble’ wordt genoemd.
Dus begon ik een bramble te bouwen met software genaamd Ansible om een gemeenschappelijke softwarestack te installeren op de servers om Drupal te draaien. Ik installeerde Linux, Apache, MySQL en PHP, wat algemeen bekend staat als de ‘LAMP’-stack.
Omdat mijn bramble Drupal draaide, verzon ik de portmanteau ‘dramble’, en zo werd de Raspberry Pi Dramble geboren.
De eerste versie van het cluster had zes nodes, en ik had een stel micro-USB-kabels aangesloten op een USB-voedingsadapter, plus een stel ethernetkabels aangesloten op een 8-poorts ethernet-switch.
Toen de Raspberry Pi model 3 uitkwam, heb ik het teruggebracht tot 5 nodes.
Toen de Raspberry Pi Zero werd geïntroduceerd, die zo groot is als een kauwgomstick, kocht ik er vijf en maakte een klein cluster met behulp van USB WiFi-adapters, maar realiseerde me al snel dat de oude processor op de Zero extreem underpowered was, en ik gaf het op voor dat cluster.
In 2017 besloot ik Kubernetes te gaan gebruiken om Drupal en de LAMP-stack te beheren, hoewel ik nog steeds Ansible gebruikte om de individuele Pis te configureren en Kubernetes erop geïnstalleerd te krijgen.
En de huidige Dramble, die bestaat uit vier Raspberry Pi-model 4-borden, gebruikt het officiële Power-over-Ethernet (PoE)-bord, waardoor ik de wirwar van USB-voedingskabels kon laten vallen, maar een duurdere PoE-switch vereist.
De Pi Dramble is echter niet alleen maar serieus. Ik heb er wat plezier aan beleefd, inclusief het maken van een hommage aan een oude film die ik leuk vond:
Tijdens deze hele ervaring heb ik elk aspect van het bouwen gedocumenteerd, inclusief alle Ansible-playbooks, als een open-sourceproject dat is gelinkt aan pidramble.com, en veel anderen hebben deze plannen gevolgd en de Pi Dramble zelf gebouwd!
Waarom Raspberry Pi?
Dit is alles om te zeggen, ik heb veel tijd besteed aan het beheren van een cluster van Raspberry Pis, en de eerste vraag die me meestal wordt gesteld is “waarom heb je Raspberry Pis gekozen voor je cluster?”
Dat is een heel goede vraag.
Een individuele Raspberry Pi is niet zo snel als de meeste moderne computers. En het heeft beperkte RAM (zelfs de nieuwste Pi model 4 heeft, op zijn hoogst, 4 GB RAM). En het is ook niet geweldig voor snelle of betrouwbare schijftoegang.
Het is iets kosteneffectiever en meestal energiezuiniger om een kleine NUC (“Next Unit of Computing”) machine te bouwen of te kopen die meer ruwe CPU-prestaties heeft, meer RAM, een snelle SSD, en meer uitbreidingsmogelijkheden.
Maar is het bouwen van een paar VM’s om een cluster op een NUC te simuleren leuk?
Ik zou zeggen: “Nee.” Nou, niet zo leuk als het bouwen van een cluster van Raspberry Pis!
En het beheren van ‘bare metal’ servers in plaats van virtuele machines vereist ook meer discipline voor provisioning, networking en orchestration. Die drie vaardigheden zijn zeer nuttig in veel moderne IT-banen!
Ook, terwijl je misschien wilt optimaliseren voor pure prestaties, zijn er momenten, zoals bij het bouwen van Kubernetes-clusters, waar je wilt optimaliseren voor het aantal CPU-cores. Als je een enkele computer zou willen bouwen met 32 CPU cores, zou je de AMD ThreadRipper 3970x kunnen overwegen, die 32 cores heeft. Het probleem is dat de processor bijna 2.000 dollar kost, en dat is alleen nog maar de processor – de rest van de computeronderdelen kost in totaal meer dan 3.000 dollar voor deze opstelling.
Voor de Raspberry Pi heeft elk rekenbordje een CPU met 4 cores, en als je 7 Pi’s samenvoegt, krijg je 28 cores. Bijna hetzelfde aantal cores, maar de totale kosten zijn minder dan $300. Zelfs met de extra kosten van een Turing Pi en een voeding, is dat hetzelfde aantal CPU cores voor 1/4 van de kosten!
Ja, ik weet dat 1 ThreadRipper core ≠ 1 Pi CM core; maar in veel K8s toepassingen, is een core een core, en hoe meer hoe beter. Niet alle bewerkingen zijn CPU-gebonden en zouden baat hebben bij een 4-8x snellere ruwe doorvoer, of de vele andere kleine aardigheidjes die de ThreadRipper biedt (zoals meer cache).
Ten slotte, een van de belangrijkste lessen die ik leer werken met Arduinos en Raspberry Pis is dit: werken met resource beperkingen zoals beperkte RAM of langzame IO benadrukt inefficiënties in uw code, op een manier die je nooit zou merken als je altijd bouwen en werken op de nieuwste Core i9 of ThreadRipper CPU met gobs van RAM en 100s van duizenden IOPS!
Als je iets niet goed kunt laten draaien op een Raspberry Pi, bedenk dan dit: veel smartphones en low-end computers hebben vergelijkbare beperkingen, en mensen die deze apparaten gebruiken, zouden dezelfde soort ervaring hebben.
Daarnaast zul je, zelfs op snelle cloud computing-instanties, van tijd tot tijd netwerk- en IO-bottlenecks tegenkomen, en als je applicatie in die situaties faalt, kun je een wereld van pijn tegemoet zien. Door ze op een Raspberry Pi te laten draaien, kunt u deze problemen snel opsporen.
Waarom een Turing Pi?
Terugkomend op de Turing Pi: wat maakt dit beter dan een cluster van standaard Raspberry Pis, zoals de Pi Dramble?
Wel, abonneer u op mijn YouTube-kanaal-ik zal in mijn volgende video uitleggen wat de Turing Pi zo bijzonder maakt en hoe u een nieuw cluster kunt opzetten! Als je deze inhoud goed vond en meer wilt zien, kun je overwegen om me te steunen op GitHub of Patreon.