-
Sovelluskehityskäytännöt
Sovelluskehityksen käytännöt Poudassa
Tässä artikkelissa käsitellään joitakin parhaita käytäntöjä, joita kehittäjien kannattaa noudattaa luodessaan tai ottaessaan käyttöön sovelluksiaan Poudassa, sekä sitä, miten Pouta voi auttaa niiden noudattamisessa. Pouta-pilvet (cPouta ja ePouta), kuten muutkin IaaS-pilvet, tarjoavat enemmän joustavuutta kuin perinteiset fyysiset laskentaympäristöt, mikä mahdollistaa uusia ja parempia toteutustapoja.
Alla luetellut suositukset keskittyvät siihen, mitä Pouta tarjoaa sinulle ja miten sovelluksesi voivat hyötyä siitä. Tämä ei ole kattava luettelo kaikista parhaista käytännöistä. Voit lisäksi noudattaa laajempaa joukkoa käytäntöjä, joista mainitsee Cloud Native Computing Foundation, sekä erilaisia OpenStackia käsitteleviä verkkolähteitä, kuten teknisiä blogeja, käyttöoppaita, käyttäjätarinoita jne. Todellisissa tilanteissa kaikki nämä käytännöt eivät välttämättä sovellu sovellukseesi, mutta tämän artikkelin keskeinen viesti on, että kannattaa soveltaa niistä omaan käyttötapaukseen sopivia.
Tilattomat ja kertakäyttöiset virtuaalikonesolmut
Jos mahdollista, pyri kehittämään sovelluksesi hajautettujen, tilattomien mikropalveluiden muodossa siten, että ne vastaavat itsenäisistä laskennallisista osatehtävistä ja kommunikoivat keskenään hyvin määritellyn rajapinnan kautta. Tämä on pitkälti mahdollista siksi, että voit luoda uusia virtuaalikoneita ja varata tallennustilaa muutamassa minuutissa.
Data, joka useimmissa tilanteissa on korvaamatonta, tulee tallentaa erillisiin pysyviin datan tallennuspalveluihin eikä itse virtuaalikoneeseen. Pouta-pilvissä tarjoamme objektitallennusta (Allas) ja taltiotallennusta (Cinder).
Sovelluksesta tulee vikasietoisempi. Kun käytetään tilattomia virtuaalikoneita ja data tallennetaan redundantteihin palveluihin, kuten Cinderiin tai Altaaseen (joita ylläpitävät niihin erikoistuneet ammattilaistiimit), vikojen vaikutus minimoituu. Jos virtuaalikonetta ajava laitteisto rikkoutuu äkillisesti, data ei katoa. Tämä poistaa yksittäisiä vikapisteitä (SPoF).
Tilattomat virtuaalikoneet
Helposti skaalautuva (horisontaalinen vs. vertikaalinen)
Jos sovellus noudattaa mikropalveluarkkitehtuuria (kuten edellisessä kohdassa mainittiin), se mahdollistaa helpon horisontaalisen skaalauksen eli saman virtuaalikoneen replikoiden lisäämisen tai poistamisen. Tämä lähestymistapa on joskus monimutkaisempi, koska tarvitset hajautettua laskentaa tukevan suunnittelun. Lisäksi tarvitaan jonkinlainen kuormantasaaja jakamaan työtä virtuaalikoneiden kesken.
Kun tämä haaste on ratkaistu, sovelluksen horisontaalinen ylös- ja alasskaalaus on vähemmän monimutkaista. Jos laskenta ja data eivät ole tiukasti kytköksissä toisiinsa, suunnittelu mahdollistaa virtuaalikonereplikoiden lisäämisen tai poistamisen. Useammat replikat mahdollistavat myös laskentasolmujen hajauttamisen eri puolille konesalia ja pienentävät (entisestään) yksittäisten vikojen vaikutusta, mikä taas vähentää yksittäisten vikapisteiden määrää. Kuten jo mainittiin, ylös- ja alasskaalaus onnistuu muutamassa minuutissa Poudan luonteen ansiosta.
Sovelluksille, jotka eivät mahdollista mikropalvelulähestymistapaa, Pouta tarjoaa helpon vertikaalisen skaalauksen eli virtuaalikoneen koon muuttamisen vaihtamalla virtuaalikoneen flavor-tyyppiä ja lisäämällä tai poistamalla laskentaresursseja (CPU:t, RAM, levy jne.). Tämä on erittäin nopeaa, koska se vaatii vain lyhyen uudelleenkäynnistyksen. Virtuaalikoneessa ajettava ohjelmisto näkee lisäresurssit läpinäkyvästi uudelleenkäynnistyksen jälkeen. Ohjelmistoa ei tarvitse asentaa uudelleen. Tämä täydentää (tai korvaa) horisontaalista skaalausta (replikointia).
Horisontaalinen vs. vertikaalinen skaalaus
automaattinen skaalaus
Pouta-pilvissä voit myös skaalata Heat-pinoasi ohjelmallisesti käyttämällä OpenStack Heat resources -resursseja, kuten OS::Heat::ResourceGroup, OS::Heat::AutoScalingGroup ja OS::Heat::ScalingPolicy.
Eristetyt käyttöönottot ympäristöihin testaus ja tuotanto
Sinulla täytyy olla useita eristettyjä käyttöönottaympäristöjä, vähintään testaus ja tuotanto. Vaikka nimet voivat vaihdella ja useammatkin ympäristöt voivat olla tarkoituksenmukaisia, testaus-ympäristön on oltava olemassa, jotta sinä ja tiimisi voitte kokeilla muutoksia ja varmistaa, että ne toimivat suunnitellusti. Lisäksi tarvitaan tuotantoympäristö, joka on omistettu käyttäjillesi. Ongelmat tulisi löytää ja ratkaista testauksessa ennen kuin ne päätyvät tuotantoon. Pouta mahdollistaa useiden laskentaprojektien hakemisen, ja ne ovat rakenteellisesti eristettyjä toisistaan.
Yleinen sanonta
Kaikilla on testausympäristö. Jotkut ovat niin onnekkaita, että heillä on siitä täysin erillinen ympäristö tuotantoa varten.
Muita yleisiä käyttöönottotyyppejä ovat:
-
Esituotanto, joka sijoittuu testauksen ja tuotannon väliin. Siellä pidetään vakaata kopiota tuotannosta, mutta käyttäjillä ei ole siihen pääsyä. Muutokset kulkevat esituotannon kautta ennen tuotantoon päätymistä. Tämä on hyödyllistä, kun halutaan tehdä viimeinen integroitu testi useista yksittäisistä muutoksista yhdessä. Ympäristö jäädytetään yleensä joksikin aikaa ennen kuin muutokset viedään tuotantoon. On tavallista, että jokin pieni käyttäjäryhmä (kuten kehitystiimi) käyttää tätä ympäristöä, jotta voidaan tehdä tosielämän testi (eat your own dog food).
-
Kehitys, jossa jokaisella tiimillä tai kehittäjällä on oma leikkikenttänsä yksittäisten muutosten rikkomiseen ja testaamiseen. Näitä ympäristöjä on yleensä useita, ja ne ovat kertakäyttöisiä.
Varmuuskopiot
Varmuuskopiot ovat kriittisiä mille tahansa sovellukselle. Ne suojaavat dataa vahingossa tapahtuvalta poistamiselta, laitteistovioilta, korruptiolta, kiristyshaittaohjelmilta ja muulta. Datan varmuuskopiointiin on useita strategioita. Sovelluksesta ja sen sisältämästä datasta riippuen varmuuskopiointistrategia voi vaihdella. Strategiaan vaikuttavat esimerkiksi kustannukset, käyttöönoton monimutkaisuus ja datan toistettavuus. Pouta-pilvet eivät tarjoa varmuuskopiointiratkaisua, mutta auttavat sellaisen rakentamisessa tarjoamalla kehittyneitä tallennusratkaisuja, kuten Cinder ja Allas.
Yksi yleinen varmuuskopiointistrategia on 3-2-1-sääntö: 3 kopiota datasta (mukaan lukien alkuperäinen tuotantokopio), 2 eri tallennusmediaa ja 1 varmuuskopio eri sijainnissa. Toinen varmuuskopioinnin perusperiaate on, että kopioita ei voi poistaa tai korruptoida alkuperäisestä lähteestä käsin (tämä ehkäisee vahinkoja ja kiristyshaittaohjelmien vaikutuksia). Erillisen varmuuskopiointityökalun käyttöä suositellaan, sillä nämä työkalut mahdollistavat helposti muuttumattomien kopioiden luomisen asianmukaisilla päiväyksillä ja aikatauluilla. Ne helpottavat myös muita toissijaisia asioita, kuten salausta ja vanhojen varmuuskopioiden poistamista. On myös erittäin tärkeää varmistaa, että varmuuskopiot ovat todella kelvollisia ja että data voidaan palauttaa suunnitellulla tavalla.
3-2-1-strategia
Käytä jatkuvaa integraatiota ja jatkuvaa toimitusta
Kehittämäsi sovellus, sen infrastruktuurin käyttöön ottava IaC-koodi sekä sitä konfiguroiva konfiguraationhallintakoodi tulisi tallentaa valitsemaasi versionhallintajärjestelmään. Suosituin ja käytännössä vakiintunut standardi on GIT. Kun sovelluksen koodi on versionhallinnassa, seuraava askel on käyttää jatkuvaa integraatiota (CI) ja jatkuvaa toimitusta (CD).
Git-kehitys ja yhteistyö
Kun sovelluksen koodi on versionhallinnassa, seuraava askel on käyttää jatkuvaa integraatiota (CI) ja jatkuvaa toimitusta (CD).
CI tarkoittaa sitä, että jokainen koodikantaan tehty muutos käännetään ja testataan automaattisesti. Tämä auttaa löytämään ongelmat aikaisemmin ja järjestelmällisesti. Lisättävät testit voivat olla yleisiä, kuten koodianalyysityökaluja, tai tarkoitukseen kirjoitettuja testejä, jotka tarkistavat koodin toiminnallisuuden ja estävät esimerkiksi vanhojen bugien palaamisen. Lisäksi on tavallista käyttää sisäisiä prosessitarkistuksia, kuten varmistaa, että jokaisella uudella haaralla on siihen liittyvä tiketti. Kokemus tällaisista käytännöistä osoittaa, että CI säästää tiimeiltä aikaa ja vaivaa. Verkossa on useita tunnettuja CI-palveluita, kuten Travis CI, Circle CI ja Github actions, joiden käyttöönoton kynnys on hyvin matala ja jotka tuovat lisäarvoa heti.
CD tarkoittaa sitä, että ohjelmiston tiettyjen versioiden julkaisu tapahtuu automaattisesti. Vielä tärkeämpää on, että näiden validoitujen versioiden käyttöönotto tapahtuu myös automaattisesti. Jos muutos siis läpäisee kaikki automaattiset testit sekä muiden kehitystiimin jäsenten tekemän katselmoinnin, muutos otetaan käyttöön automaattisesti. Tällainen automaation taso edellyttää myös vankkaa käyttöönottoprosessia, joka ei vaadi käyttökatkoa ja johon voidaan luottaa kokonaisuutena. Uusia käyttöön otettuja versioita valvotaan, ja tämä tieto johtaa todennäköisesti uusien versioiden suunnitteluun.

Käytä DevOps-työkaluja
Infrastructure as Code -työkalut
Infrastructure as Code (IaC) -työkalut ovat erittäin hyödyllisiä, koska niiden avulla voidaan määritellä monimutkaisia sovellusinfrastruktuureja (virtuaalikoneet, verkotus, tallennus, ...) tekstimuotoisilla tiedostoilla (koodilla), joita kutsutaan mallipohjiksi. Tämän jälkeen työkalu käyttää pilvipalveluntarjoajan APIa vastaavan infrastruktuurin automaattiseen luomiseen, konfigurointiin tai poistamiseen. Joitakin vakaita ja laajasti käytettyjä IaC-työkaluja ovat:
- Terraform on hyvin tunnettu IaC-työkalu. Se on omistettu pelkästään IaC-työkaluksi. Se on pilviriippumaton "providerien" ansiosta, kuten OpenStack provider. Katso esimerkki terraform-openstack-example.
- Heat on OpenStackiin integroitu työkalu. Katso esimerkki heat-openstack-example.
- Ansible sisältää joitakin moduuleja, jotka tarjoavat IaC-toiminnallisuutta. Katso esimerkki ansible-openstack-example.
Yllä näet kolme esimerkkiä, yhden kustakin työkalusta. Kaikkien tavoitteena on saavuttaa sama lopputulos: yksi tai useampi virtuaalikone, joihin on asennettu nginx ja joihin on otettu käyttöön muutamia paikallisia tiedostoja. Valitaksesi sopivan työkalun sinun tulee arvioida niiden hyvät ja huonot puolet ja käyttää sitä, joka sopii parhaiten omaan käyttötapaukseesi. Jos esimerkiksi ajattelet tukea, sekä Heat että Ansible ovat OpenStack-tiimin kehittämiä, kun taas Terraform-provider on yhteisön kirjoittama ohjelmisto. Lisäksi Heat toimitetaan OpenStackin mukana, ja sitä voidaan käyttää komentoriviltä tai selainkäyttöliittymästä. Lopuksi Heat on ainoa työkalu, jota Pouta-tiimi tukee täysin. Toisaalta Terraform on laajemmin käytetty, joten sille on helpompi löytää esimerkkejä ja apua kuin kahdelle muulle työkalulle.
Terraform-lisenssi
Terraform on muuttanut lisenssiään (kesä 2023), ja OpenTofu on vaihtoehtoinen asiakasohjelma, joka on luotu mahdollisten lisenssiongelmien välttämiseksi. Tällä hetkellä Tofu on suoraan korvaava vaihtoehto, mutta sen odotetaan eriytyvän ajan myötä. Tällä hetkellä Tofulle ei ole Ansible-moduulia.
Heatin selainkäyttöliittymä
Työkalut kehittyvät
Muista, että näiden (ja useimpien muiden) työkalujen tilanne muuttuu ajan myötä: tuki voi parantua tai loppua kokonaan, ominaisuuksia ja bugeja voidaan korjata, ...
Konfiguraationhallintatyökalut
Jokaisella rakentamallasi sovelluksella on riippuvuuksia ohjelmistokirjastojen ja niiden tiettyjen versioiden muodossa. Jotta sovelluksesi toimisi, nämä riippuvuudet tulisi määritellä eksplisiittisesti ja asentaa automaattisesti. Konfiguraationhallintatyökalu, kuten Ansible tai Puppet, on paras tapa saavuttaa tämä. Konfiguraationhallintatyökalun käyttäminen riippuvuuksien määrittelyyn ja automaattiseen asentamiseen tekee käyttöönotoista toistettavampia ja ennustettavampia. Alla olevassa Ansible-esimerkissä tehtävä nimeltä "Install dependencies" asentaa muutamia työkaluja:
Kun kaikki riippuvuudet on määritelty, Ansible varmistaa, että ne on asennettu käyttöönottaympäristöön ennen kuin varsinainen sovellus otetaan käyttöön. Riippuvuuksia ei pitäisi koskaan asentaa manuaalisesti, vaan niiden asennus tulisi automatisoida. Tämä auttaa toistettavuudessa (kaikki järjestelmät asennetaan samalla tavalla) ja järjestelmä dokumentoi itse itsensä (on selvää, mitä pitää asentaa). On myös mahdollista määritellä ohjelmistoversioita, jotta asennuksesta tulee paljon vakaampi.
Nämä periaatteet koskevat myös konfiguraatiota. Kun mahdollista, sinun tulisi käyttää upstream-moduuleja asennetun ohjelmiston konfiguraation hallintaan. Moduulit eristävät sinut usein alusta- ja versiokohtaisilta eroavaisuuksilta, eli kirjoitat saman konfiguraatiomäärittelyn eri ohjelmistoversioille ja eri käyttöjärjestelmäversioille, ja moduuli kääntää sen puolestasi.
Konfiguraationhallintatyökalut integroituvat erittäin hyvin Pouta-pilviin. Ne pystyvät lukemaan ja käyttämään virtuaalikoneiden käyttöönottokohtaisia arvoja, kuten IP-osoitteita, konenimiä jne. Tämä tarkoittaa, että näitä muuttujia ei tarvitse kovakoodata järjestelmään ja ne pysyvät aina ajan tasalla. Esimerkiksi jos meillä on kuormantasaaja ja muutamia työsolmuja, kuormantasaaja tarvitsee luettelon työsolmujen IP-osoitteista. Konfiguraationhallintatyökalu pystyy luomaan kuormantasaajan konfiguraation automaattisesti OpenStackin APIsta saamansa tiedon perusteella. Lopputuloksena on hands-off-asennus- ja päivitysprosessi, jossa konfiguraationhallinta tekee kaiken työn eikä manuaalista työtä tarvita.
Tutki vaihtoehdot ennen kehittämistä ja käyttöönottoa
Ennen kuin alat kehittää ja ottaa käyttöön uutta palvelua, on suositeltavaa selvittää, kattavatko olemassa olevat palvelut ja ohjelmistot jo käyttötapauksesi. Kannattaa välttää lankeamasta "not invented here syndrome" -ajatteluun, jossa sisäisesti kehitettyjä palveluita ja tuotteita suositaan perusteettomasti. Tilanne vaihtelee tapauskohtaisesti, sillä joskus projektin tarpeita ei voida kattaa olemassa olevilla ratkaisuilla. CSC tarjoaa joitakin palveluratkaisuja, joista sinun kannattaa olla tietoinen:
Noppe
Jos tarvitset Jupyter- tai RStudio-muistikirjan, CSC tarjoaa Noppe-palvelun. Se on kypsä palvelu, jota ylläpitää siihen erikoistunut ammattilaistiimi.
Rahti
Jos sinun täytyy ottaa käyttöön Docker-kontteja Kubernetesin kaltaisessa klusterissa, CSC tarjoaa Rahdin. Rahti on Red Hatin kehittämä OpenShift okd.
Pukki
Jos tarvitset tietokannan, kannattaa tutustua Pukkiin, CSC:n Database as a Service -tarjoomaan (tällä hetkellä suljetussa beetavaiheessa).
ota yhteyttä
Jos jokin näistä palveluista kiinnostaa sinua, mutta ne eivät kata tarpeitasi sataprosenttisesti, ota yhteyttä osoitteeseen servicedesk@csc.fi, niin selvitämme tilanteesi.
Yhteenveto
Pouta tarjoaa useita hyödyllisiä työkaluja ja resursseja, jotka helpottavat luotettavampien sovellusten kehittämistä. Pilvikäyttöönotot toimivat erittäin hyvin silloin, kun sovellus noudattaa ajatusta kertakäyttöisistä mikropalveluista, jotka on valmisteltu skaalautumaan ylös ja alas läpinäkyvästi ja jotka on suunniteltu reagoimaan hyvin odottamattomiin vikatilanteisiin. Pouta tarjoaa joustavuutta eristettyjen kehitysympäristöjen helppoon käyttöönottoon. Lisäksi API antaa käyttöösi automaation koko voiman, ja DevOps-työkalujen ansiosta tämän voiman hyödyntäminen on yksinkertaista. Äläkä tietenkään koskaan unohda varmuuskopioida dataasi.