Postitan muutaman videon, joissa käsitellään klusterilaskentaa Raspberry Pi:llä lähiviikkoina, ja aion julkaista videon + transkriptin blogissani, jotta voit seurata mukana, vaikka et nauttisikaan videon katsomisesta 🙂
Tämä on Raspberry Pi Compute Module.
Ja tämä on 7 Raspberry Pi Compute Modulen pino.
Se on sama kuin Raspberry Pi model B, mutta siinä on jätetty pois kaikki IO-portit joustavamman muotokertoimen aikaansaamiseksi, joka Rasbperry Pi Foundationin mukaan ”sopii teollisiin sovelluksiin”. Minun tapauksessani olen kuitenkin kiinnostunut käyttämään sitä Raspberry Pistä koostuvan klusterin rakentamiseen.
Aion tutkia klusterilaskennan käsitettä Raspberry Pien avulla, ja olen innoissani siitä, että minulla on hallussani peliä mullistava Raspberry Pi -pohjainen klusterilevy, Turing Pi.
Turing Pi:hen pääsen pian, mutta tässä ensimmäisessä jaksossa halusin käsitellä sitä, miksi rakastan Raspberry Pien käyttämistä klustereihin.
Mutta ensin, mikä on klusteri?
Klusterilaskenta
Vaikeat ihmiset yrittävät ratkoa monimutkaisia ongelmia tietokoneiden avulla. Joskus he tekevät asioita, kuten palvelevat verkkosivua suurelle määrälle kävijöitä. Tämä vaatii paljon kaistanleveyttä ja paljon ”taustatietokoneita” käsittelemään miljoonia pyyntöjä. Joidenkin ihmisten, kuten sääennustajien, on löydettävä miljardien pienten laskutoimitusten tulokset.
Tällaisia toimintoja voidaan nopeuttaa kahdella tavalla:
- Skaalautumalla vertikaalisesti, jolloin sinulla on yksi palvelin, johon asennetaan nopeampi suoritin, enemmän RAM-muistia ja nopeampi yhteys.
- Skaalauttamalla horisontaalisesti, jolloin tehtävät jaetaan ja käytetään useita tietokoneita.
Varhain Cray-supertietokoneiden kaltaiset järjestelmät veivät vertikaalisen skaalauksen äärimmilleen. Yksi massiivinen, miljoonia dollareita maksanut tietokone oli jonkin aikaa nopein tietokone. Tällä lähestymistavalla on kuitenkin rajansa, ja se, että kaikki on sijoitettu yhteen koneeseen, tarkoittaa seisokkiaikaa, kun se tarvitsee huoltoa, ja rajoitettuja (usein tuskallisen kalliita) päivityksiä.
Useimmissa tapauksissa on edullisempaa – ja joskus ainoa mahdollinen tapa – skaalautua horisontaalisesti käyttämällä monia tietokoneita suurten laskutoimitusten tai suuren verkkoliikenteen käsittelyyn.
Klusteroinnista on tullut helpompaa, kun Beowulf-tyyliset klusterit tulivat markkinoille 90-luvulla ja uudemmat ohjelmistot, kuten Kubernetes, joka jakaa sovellukset saumattomasti monille tietokoneille sen sijaan, että sovellukset sijoitettaisiin manuaalisesti eri tietokoneille.
Tämänkin ohjelmiston kanssa horisontaalisessa skaalautumisessa on kaksi isoa ongelmaa – varsinkin jos budjettirajoitukset ovat tiukat:
- Jokainen tietokone maksaa jonkin verran rahaa, ja se vaatii yksilöllistä virtaa ja verkkoyhteyksiä. Muutaman tietokoneen kohdalla tämä ei ole suuri ongelma, mutta kun tietokoneita alkaa olla viisi tai enemmän, on vaikea pitää asiat siisteinä ja viileinä.
- Tietokoneiden eli klusterikielessä ”solmujen” hallinta on helppoa, kun niitä on yksi tai kaksi. Mutta kun se skaalataan viiteen tai kymmeneen, jopa yksinkertaisten asioiden tekeminen, kuten palvelimien uudelleenkäynnistäminen tai uuden työn käynnistäminen, vaatii ohjelmistoa kaiken koordinoimiseksi.
Vadelma Pi Dramble
Vuonna 2015 päätin perustaa ensimmäisen ’bramblen’. Bramble on Raspberry Pi -palvelimien klusteri. ”Miksi sitä kutsutaan brambleksi?” saatat kysyä? No, koska luonnollista vadelmarykelmää, jonka voisit syödä, kutsutaan nimellä ’bramble’.
Aloitin siis bramblen rakentamisen käyttäen Ansible-nimistä ohjelmistoa asentaakseni yhteisen ohjelmistopinon palvelimille Drupalin käyttämistä varten. Asetin Linuxin, Apachen, MySQL:n ja PHP:n, joka tunnetaan yleisesti nimellä ’LAMP’-pino.
Koska bramblessani pyöritti Drupalia, keksin porttimerkin ’dramble’, ja näin syntyi Raspberry Pi Dramble.
Klusterin ensimmäisessä versiossa oli kuusi solmua, ja minulla oli joukko mikro-USB-kaapeleita kytkettynä USB-virtalähteeseen sekä joukko Ethernet-kaapeleita kytkettynä 8-porttiseen ethernet-kytkimeen.
Kun Raspberry Pi model 3 tuli markkinoille, vähensin sen viiteen solmuun.
Kun Raspberry Pi Zero tuli markkinoille, joka on purkkapurukumin kokoinen, ostin viisi sellaista ja tein pienen klusterin käyttämällä USB-WiFi-adaptereita, mutta tajusin nopeasti, että Zeron vanha prosessori oli äärimmäisen alitehoinen, ja luovuin siitä klusterista.
Vuonna 2017 päätin alkaa käyttää Kubernetesia Drupalin ja LAMP-pinon hallintaan, vaikka käytin edelleen Ansiblen yksittäisten Pisien konfigurointiin ja Kubernetesin asentamiseen niihin.
Ja tämän päivän Dramble, joka koostuu neljästä Raspberry Pi model 4 -levystä, käyttää virallista Power-over-Ethernet (PoE) -levyä, jonka ansiosta pystyin luopumaan USB-virtakaapeleiden sekamelskasta, mutta vaatii kalliimman PoE-kytkimen.
Pi Dramble ei kuitenkaan ole pelkkää vakavaa. Minulla on ollut sen kanssa hauskaa, mukaan lukien kunnianosoitus vanhalle elokuvalle, josta pidin:
Tämän koko kokemuksen aikana olen dokumentoinut kaikki rakentamisen osa-alueet, mukaan lukien kaikki Ansible-pelikirjat, avoimen lähdekoodin projektina, joka on linkitetty pidramble.com-sivustolta, ja monet muut ovat seuranneet näitä suunnitelmia ja rakentaneet Pi Dramblen omatoimisesti!
Miksi Raspberry Pi?
Tämä kaikki sanoakseni, olen viettänyt paljon aikaa Raspberry Pistä koostuvan klusterin hallinnoinnissa, ja ensimmäinen kysymys, joka minulta yleensä kysytään, on: ”Miksi valitsit Raspberry Pi:t klusteriisi?”
Tuo on erittäin hyvä kysymys.
Yksittäinen Raspberry Pi ei ole yhtä nopea kuin useimmat modernit tietokoneet. Ja siinä on rajallinen RAM-muisti (jopa uusimmassa Pi-mallin 4:ssä on korkeintaan 4 Gt RAM-muistia). Se ei myöskään ole hyvä nopean tai luotettavan levynkäytön kannalta.
On hieman kustannustehokkaampaa ja yleensä energiatehokkaampaa rakentaa tai ostaa pieni NUC-kone (”Next Unit of Computing”), jossa on enemmän raakaa prosessoritehoa, enemmän RAM-muistia, nopea SSD-levy ja enemmän laajennusominaisuuksia.
Mutta onko joidenkin VM:ien rakentaminen klusterin simuloimiseksi hauska juttu NUC:lla?
Sanoisin, että ”ei”. No, ei yhtä paljon kuin Raspberry Pistä koostuvan klusterin rakentaminen!
Ja ”paljaan metallin” palvelimien hallinta virtuaalikoneiden sijaan vaatii myös enemmän kurinalaisuutta provisioinnissa, verkottamisessa ja orkestroinnissa. Nuo kolme taitoa ovat erittäin hyödyllisiä monissa nykyaikaisissa IT-työtehtävissä!
Myös, vaikka saatat haluta optimoida pelkkää suorituskykyä, on tilanteita, kuten Kubernetes-klustereita rakennettaessa, joissa haluat optimoida suorittimen ytimien lukumäärää. Jos haluaisit rakentaa yhden tietokoneen, jossa on 32 prosessoriydintä, voisit harkita AMD ThreadRipper 3970x:tä, jossa on 32 ydintä. Ongelmana on, että prosessori maksaa lähes 2 000 dollaria, ja se on vain prosessori – muiden tietokoneen komponenttien kokonaishinta olisi yli 3 000 dollaria.
Raspberry Pi -tietokoneessa jokaisessa laskentakortissa on 4-ytiminen prosessori, ja jos yhdistät 7 Piä, saat 28 ydintä. Lähes sama määrä ytimiä, mutta maksaa alle 300 dollaria yhteensä. Jopa Turing Pi:n ja virtalähteen lisäkustannusten kanssa se on sama määrä prosessoriytimiä 1/4 hinnalla!
Joo, tiedän, että 1 ThreadRipper-ydin ≠ 1 Pi CM -ydin; mutta monissa K8s-sovelluksissa ydin on ydin, ja mitä enemmän, sitä parempi. Kaikki toiminnot eivät ole CPU-sidonnaisia ja hyötyisivät 4-8x nopeammasta raa’asta läpäisykyvystä tai monista muista ThreadRipperin tarjoamista pienistä hienouksista (kuten enemmän välimuistia).
Loppujen lopuksi yksi tärkeimmistä oppitunneista, joita opin työskennellessäni Arduinojen ja Raspberry Pien kanssa, on tämä: työskentely resurssirajoitusten, kuten rajallisen RAM-muistin tai hitaan IO:n kanssa, nostaa esiin tehottomuuksia koodissasi tavalla, jota et koskaan huomaisi, jos rakentaisit ja työskentelisit aina uusimmalla Core i9:llä tai ThreadRipper-suorittimella, jossa on paljon RAM-muistia ja satojatuhansia IOPS-arvoja!
Jos et saa jotain toimimaan hyvin Raspberry Pi:llä, mieti tätä: monilla älypuhelimilla ja low-end-tietokoneilla on samanlaisia rajoitteita, ja näitä laitteita käyttävillä ihmisillä olisi samanlaisia kokemuksia.
Lisäksi jopa nopeissa pilvipalveluinstansseissa törmäät aika ajoin verkko- ja IO-pulmakauloihin, ja jos sovelluksesi ei onnistu näissä tilanteissa, saatat joutua kärsimään paljon. Niiden käyttäminen Raspberry Pi:llä voi auttaa sinua tunnistamaan nämä ongelmat nopeasti.
Miksi Turing Pi?
Palatakseni Turing Pi:hen: mikä tekee siitä paremman kuin tavallisista Raspberry Pi:istä koostuva klusteri, kuten Pi Dramble?
Tilaa YouTube-kanavani – seuraavassa videossani selvitän tarkemmin, mikä tekee Turing Pi:stä niin toimivan kuin se on ja miten uusi klusteri perustetaan! Jos pidit tästä sisällöstä ja haluat nähdä lisää, harkitse tukeasi minua GitHubissa tai Patreonissa.