Platform criteria include the following: technology maturity, the number of cloud platforms supported, development community activity, and platform performance. Platform adoption criteria included: continuous integration support, development environments supported by the platform, configurability, extensibility, adoption, testability, debugging support, and maintainability of the platform. CD Jatkuva toimitus (English Continuous Delivery) CI Jatkuva integraatio (English Continuous Integration) CLI Komentoriviliitäntä (English Command Line Interface). gRPC gRPC Remote Procedure Invokes HTTP Hypertext Transfer Protocol.
NIST National Institute of Standards and Technology PaaS-alusta palveluna SaaS-sovellus palveluna
Johdanto
Tavoitteet ja rajaus
Rakenne
Pilvialustat
Yleisesti
IaaS eli infrastruktuuri palveluna on palvelumalli, jossa alustan tarjoaja vastaa alustan infrastruktuurista laitteisto- ja virtualisointitasoilla. Esimerkkejä IaaS-palveluista ovat pilvialustojen, kuten Amazon EC2 tai Microsoft Azure VM, tarjoamat virtuaalikoneen palvelut. Esimerkkejä SaaS-palveluista ovat Microsoft Office365 -palvelu ja luvussa 5 esitelty Pulumi SaaS -palvelu.
Microsoft Azure Kubernetes -palvelu on esimerkki yhdistetystä palvelusta, joka näyttää käyttäjän näkökulmasta PaaS-palvelulta, koska käyttäjän ei tarvitse hallita palvelun käyttämää virtuaalikoneen infrastruktuuria .
Kubernetes ja Helm
Infrastruktuuri koodina
- Esittely
- Infrastruktuuri koodina ja DevOps-kulttuuri
- Työkalut
- Hyödyt ja haasteet
Tammikuussa 2015 Microsoft tilasi markkinointitutkimusyrityksen tutkimaan, ovatko infrastruktuuri-as-code -lähestymistapa ja siihen liittyvät työkalut hyödyllisiä ohjelmistokehityksessä ja -julkaisussa. Infrastruktuuri koodina -lähestymistapa mahdollistaa nopeamman ja luotettavamman sovellusten ja infrastruktuurin konfiguroinnin [26, 41] verrattuna manuaalisiin prosesseihin. Nykyisten infrastruktuurityökalujen historia koodina ulottuu vuoteen 1993, jolloin Oslon yliopistossa tutkijana työskennellyt Mark Burgess kehitti Configuration Enginen (CFEngine) [14].
Yleisesti ottaen infrastruktuurin hallintaan käytetyt työkalut voidaan jakaa pinonhallintatyökaluihin (eng. stack management) ja konfiguraation hallintatyökaluihin (eng. konfiguraatiohallinta) [41].
C#-ohjelmointikieli
- Esittely
- Tyypitys
- Olio-ohjelmointi
- Tyyppimuunnokset
Kun käytetään paikkatietueen määritelmää, perustietoluokan rakentajaa kutsutaan käyttämällä sen nimeä perusavainsanan sijaan. Oletusarvoisesti luokat käyttävät viitepohjaista yhtäläisyyttä, ja vain samaan objektiin viittaavia muuttujia pidetään samanarvoisina. C#-ohjelmat käännetään intermediate language (IL) -kieleksi, joka suoritetaan .NET-ajonaikaisessa virtuaaliympäristössä, jota kutsutaan myös Common Language Runtimeksi tai CLR:ksi [80].
CLR käyttää just-in-time-käännöstä (JIT), jossa välikieli käännetään alustakohtaiseksi konekieleksi [80].
Pulumi
- Käsitteet
- Komentoriviliitäntä
- Tila ja tilanhallinta
- Projektit
- Ohjelmat
- Resurssit
- Syötteet ja tulosteet
- Pinot
- Lisenssi
- Automatisointirajapinta
- Testaus
- SaaS-palvelu
- Vertailu kilpailijoihin
- Terraform
- Muut
Ohjelman suorituksen aikana kieliisäntä rakentaa kuvauksen halutusta infrastruktuurin tilasta [53], joka välitetään käyttöönottomekanismille. Komentorivikäyttöliittymä [54] on Go-ohjelmointikielellä kehitetty cross-platform-ohjelma, joka toimii komentorivin, kuten Microsoft PowerShellin [5] tai GNU Bashin [12] kautta. Itsehallinnollisen tilan lisäksi Pulumia kehittävä Pulumi Corporation tarjoaa SaaS-palvelun [62], jossa tila on tallennettu Pulumin hallinnoimaan palveluun (englanniksi hosting).
Tiedosto sisältää sen komentoriviliittymän tarvitsemat metatiedot, jossa Pulumi-ohjelma toimii. CustomResourcesandComponentResource [65] CustomResource-luokan objektit ovat resurssientarjoajien [65] hallinnoimia resursseja, kuten resurssiryhmää ja tallennustiliä, joita käytetään liitteen A kohdassa A.2. Resurssin loogista nimeä käytetään etuliitteenä resurssin nimeen, jos fyysistä nimeä ei ole määritelty erikseen [65].
Hierarkiat voidaan luoda myös resursseista asettamalla toinen resurssi (eng. emoresurssi) pääresurssiksi [65]. Tämä on esimerkiksi liitteen A ohjelmassa A.2 (rivi 23) esitetyn resurssiryhmän nimi, jonka lopullinen arvo opitaan vasta ohjelman suorituksen aikana. Liitteen A ohjelmassa A.1 syötetyyppejä käytetään web-sivukomponentin resurssiparametrien ja verkkosivun sisällön resurssiryhmän nimen kanssa (rivit 6 ja 7).
Pulumin automaatiorajapinta (Pulumi Automation API) on ohjelmistokehityspaketti, joka mahdollistaa komentoriviliittymän käytön Pulumin tukemien ohjelmointikielten kautta [75]. Ennen infrastruktuurin tilan päivittämistä Terraform luo suoritussuunnitelman, jossa kuvataan päivityksen aikana suoritettavat toiminnot [19].
Tutkimus
Arviointikriteerit
- Alustakriteerit
- Alustan käyttöönoton kriteerit
Kehitysyhteisökriteeriaktiviteetilla arvioidaan kehitysyhteisön kokoa ja sitä, mitä alustalle tapahtuisi, jos sitä kehittävä yritys Pulumi Oyj lopettaisi toimintansa. Esimerkiksi yhteisön aktiivisuutta mitataan Stack Overflow -palveluun kirjoitettujen kysymysten määrällä ja GitHub-palvelun tähtien määrällä [38]. Esimerkiksi integroidut kehitysympäristöt tarjoavat käyttäjilleen sellaisia ominaisuuksia kuin automaattinen tekstinsyöttö, dokumentaation integrointi koodieditoriin ja navigointi koodin eri osien välillä.
Laajennus arvioi alustan laajuuden, esim. kuinka hyvin alustaa voidaan muokata tai kuinka hyvin sen laajennuksia tai ohjelmistokehityspaketteja voidaan luoda alustalle. Tätä kriteeriä käytetään alustan arvioimiseen sen perusteella, miten sitä voidaan testata infrastruktuuri-koodina -lähestymistavan mukaisesti [41]. Virheiden etsintä tehdään sopivilla työkaluilla, jotka ovat usein osa integroitua kehitysympäristöä [87] ja jotka muun muassa mahdollistavat ohjelman toiminnan valvonnan, ohjelman suorittamisen pysäyttämisen esimerkiksi tietyllä rivillä. lähdekoodin ja muuttujien tilan tutkiminen lähdekoodissa.
Esimerkkisovellus
- Sovellusarkkitehtuuri
- Infrastruktuuripinoarkkitehtuuri
- Alustan käyttöönotto: vaihe 1
- Alustan käyttöönotto: vaihe 2
- Alustan käyttöönotto: vaihe 3
- Infrastruktuurin testaus
Esimerkkisovelluksessa käytetään kahta BFF API Gateway -rajapintaa, joista toinen palvelee mobiilisovellusta ja vastaavasti toinen sekä Angular- että WebMVC-sovelluksia. Ensimmäisessä vaiheessa alustaa käytettiin sovelluksen käyttämän Azure Kubernetes -klusterin ja siihen asennettavan kuormituksen tasaajan määrittämiseen. Tutkimuksessa käytetty infrastruktuuripinoarkkitehtuuri on toteutettu alustalle siten, että jokaiselle tutkimuksessa käytetylle pilvialustaan luotiin oma infrahakemiston alle oma hakemisto ja Pulumi-projektit ovat kaikille sen luoduissa alihakemistoissa oleville infrastruktuuripinoille.
Koska Pulumi-projekti on hakemisto, josta Pulumi.yaml-tiedosto löytyy, infrastruktuuripinohakemistot nimettiin sisältämään käytetyn pilvialustan ja infrastruktuuripinon nimen. - projektien nimet on suunniteltu siten, että Pulumi-projektin nimessä tulee olla sen hakemiston nimi, jossa projektitiedosto Pulumi.yaml sijaitsee ja työlle valittu etuliite eshop, joka tulee sovellusesimerkin nimestä. Huolimatta siitä, että ne ovat pilvialustan riippumattomia, samaa hakemistorakennetta käytettiin myös näissä infrastruktuuriryhmissä. eshop.Azure.CommonServices.dev) Pulumi-. ohjelma - SQL - Redis - RabbitMQ - MongoDB. eshop.Azure.Applications.dev) Pulumi-. ohjelma - Katalogi - Tilaus - Identiteetti - Ostoskori.
Kaikki palvelinsovellusinfrastruktuuripinot käyttävät ensimmäisessä vaiheessa luodun kuormituksen tasaajan lähtöjä ensimmäisessä vaiheessa luodun Kubernetes-klusterin määrittämiseen. API Gateway -pino tulostaa saman sovellukselle määritetyn nimen, mutta lisäksi pino palauttaa myös julkisen sovelluksen osoitteen, joka on luotu kuormituksen tasapainottajalta lähtönä saadun toimialueen nimen perusteella ja joka voidaan avata selaimella. Ohjelmassa D.1 on kaksi yksikkötestiä, joista ensimmäinen varmistaa, että Azure-resurssiryhmä luodaan, kun pino luodaan, ja toinen yksikkötesti varmistaa, että Tunnisteet-ominaisuuden arvo on asetettu resurssiryhmälle.
Ohjelmassa D.2 esitetään kuormituksen tasaajan yksikkötesti, jolla testataan, että pinoluokka palauttaa testissä simuloidun Kubernetes-palvelun IP-osoitteen. Testin lopussa resurssit poistetaan käänteisessä järjestyksessä, eli viimeinen asennettu API Gateway -pino poistetaan ensin ja Kubernetes-klusteri poistetaan viimeisenä.
Tulokset
- Teknologian kypsyys
- Kehitysyhteisön aktiivisuus
- Tuetut pilvialustat ja muut palvelut
- Suorituskyky
- Kustannukset ja yritysprofiili
- Automatisointi
- Kehitysympäristö
- Konfigurointi
- Laajennettavuus
- Alustan omaksuminen
- Testattavuus
- Vian etsintä
- Ylläpidettävyys
Kaaviosta näkyy, että Pulumista on selvästi vähiten kysymyksiä Stack Overflowssa, mutta maltillista kasvua on havaittavissa vuoden 2020 lopun jälkeen. On mahdollista, että ainakin osa kysymyksistä on kysytty suoraan yhteisön Slack-kanavissa Stack Overflown sijaan. Tätä työtä kirjoitettaessa Pulumi tukee dokumentaation perusteella yhteensä 53 erilaista pilvialustaa ja muuta palvelua C#-ohjelmointikielellä [7].
Työkalun/paketin versio Pulumi-komentoriviliittymä v2.24.1 Pulumi.AzureNative-kirjasto v0.8.0 Terraform-komentoriviliittymä v0.14.10 Terraform-toimittaja azurerm v2.55.0 Terraform-toimittaja satunnainen v3.1.0. Pulumi, SaaS-palvelu Pulumi, SaaS-palvelu, Ready Program Binary Pulumi, Local Mode Pulumi, Local Mode, Ready Program Binary Terraform, Local Mode Terraform, Local Mode, Ready Plan. Kun tämä työ tehtiin, Pulumin C#-kielikirjastot eivät vielä tukeneet kaikkia ominaisuuksia, joita esimerkiksi Pulumin TypeScript-versio tukee.
Esimerkiksi kaikki resurssiparametrit määritetään objektin alustuksessa, joka ei voi erottaa pakollisia ja valinnaisia parametreja käännöshetkellä. Listaus 7.2 näyttää otteen Pulumin komentoriviliittymän tulostamasta virhesanomasta, kun Azure.Storage.Account-resurssi on kirjoitettu tarkoituksella väärin AccountReplicationType- ja AccountTier-parametrin arvot. Ajonaikaisen virheentunnistuksen käyttäminen Pulumissa vaatii mukautetun toteutuksen tätä osaa kirjoitettaessa.
Nimittäin jos virheenkorjausta käytetään samaan aikaan resurssien luomisen kanssa, on mahdollista aiheuttaa resurssien luontivirheitä. Liitteen C ohjelma C.1 näyttää staattisen C#-luokan, joka on luotu tukemaan virheenkorjausta ja jonka ainoa julkinen menetelmä voidaan kutsua käynnistämään virheenkorjaus, jos jokin luokan käyttämistä ympäristömuuttujista on määritelty.
Yhteenveto
- Pulumin käsitteet [8]
- Komponenttien keskinäiset suhteet
- Pulumi-ohjelman luomat resurssit
- Pinon tuottamat tulosteet
- Esimerkkisovelluksen sovellusarkkitehtuuri [1]
- Esimerkkisovelluksen infrastruktuuripinoarkkitehtuuri
- Infrastruktuurilähdekoodin Microsoft Azure -pilvialustalle tehdyn toteutuk-
- Pulumi-projektirakenne ensimmäisessä vaiheessa
- Infrastruktuurilähdekoodin Microsoft Azure -pilvialustalle tehdyn toteutuk-
- Palvelinsovellusten Pulumi-projektirakenne toisessa vaiheessa
- Infrastruktuuri koodina -työkaluihin liittyvien Stack Overflow’n kysymysten
- Suorituskykyvertailun tulokset kuvaajana
- Pulumi-koodin Visual Studio Code -editorin työkaluvihje (engl. tooltip)
- Pulumi-komentoriviliitännän 20 viimeisintä julkaisua
- Suorituskykyvertailussa käytettyjen työkalujen ja pakettien versiot
- Suorituskykyvertailun tulokset
Tämä liite sisältää komponenttiresurssin ja pinoluokan, joita voidaan käyttää staattisen verkkosivun luomiseen Microsoft Azure -pilvialustaan.
Suorituskykymittausten toistojen 1–30 tulokset
Suorituskykymittausten toistojen 31–60 tulokset
C#-kielen tyyppipäättely
Olioiden määrittely C#-kielelllä
Paikkasidonnaisten tietoluokkatyyppien määrittely
Esimerkiksi int-tyyppinen muuttuja voidaan implisiittisesti muuttaa muuttujaksi, jonka tyyppi on long, koska 64-bittinen tyyppi voi sisältää 32-bittisen senint-tyypin arvon menettämättä tietoja. Eksplisiittiset tyyppimuunnokset ovat sellaisia, joissa on vaara menettää tietoja, esimerkiksi kun desimaaliarvoja sisältävä desimaalityyppinen muuttuja muunnetaan kokonaislukutyyppiseksi int.
Tyyppimuunnosten määrittely
Jos esimerkiksi käytät C#-ohjelmointikieltä, kieliisäntä kääntää suoritettavan tiedoston automaattisesti, ellei Pulumi-projektitiedostossa ole erikseen määritetty esikäännettyä ohjelmaa. Paikallista tiedostojärjestelmää [70] voidaan käyttää Pulumi-pinojen metatietojen arkistoon, mutta tässä tapauksessa pinon tilat ovat saatavilla vain koneella, jossa komento ajettiin.
Projektitiedosto Pulumi.yaml
Pulumi-projekti on hakemisto, joka sisältää Pulumi-ohjelman ja metatiedot, jotka kertovat, kuinka ohjelmaa ajetaan [49]. Pulumi-ohjelmat käyttävät ohjelmointikieli- ja pilvialustakohtaisia kirjastoja, joiden avulla voidaan määritellä halutut infrastruktuuriresurssit ja luoda niistä infrastruktuuripino. Kieliisäntä suorittaa Pulumi-ohjelman, ja esimerkiksi C#-kielen oletusasetuksissa Pulumi-ohjelmat käännetään ennen niiden suorittamista.
C#-kielellä kirjoitettu Pulumi-ohjelma
Pulumi-resurssien parametreja kutsutaan tuloiksi ja resurssien palauttamia arvoja lähdöiksi. Muut resurssit voivat kuitenkin viitata resurssiryhmän nimeen, vaikka sen arvo olisi tiedossa vasta ajon aikana. Lähdöt ovat asynkronisia arvoja, joiden lopullinen arvo selviää vasta ohjelman suorituksen aikana [32], infrastruktuuriresurssien päivityksen jälkeen.
Tulostearvojen käsittely Pulumilla
Pulumi-pinon konfiguraatiotiedosto
Pulumi.Config-luokan käyttö C#-kielellä
Terraform-syötteitä on mahdollista antaa tiedostoihin, mutta niissä olevia mahdollisia salaisia arvoja ei ole salattu, joten syöttötiedostoja ei pidä tallentaa sellaisenaan versionhallintaan. Lisäksi Pu-Lumia on mahdollista käyttää Terraform-tilatiedostojen kanssa, ja Terraformin hallinnoimaa tilaa voidaan käyttää myös Pulumi-pinoissa [30]. Yksisivuinen sovellus, joka käyttää TypeScriptiä ja Angular-kehystä, ja WebMVC-sovellus, joka käyttää ASP.NET Core MVC -kehystä.
Esimerkkisovelluksen mikropalvelut eivät kommunikoi suoraan keskenään, vaan käyttävät tapahtumakäsittelijää, joka toimii julkaisu- ja tilauskanavan päällä. Toinen infrastruktuuripino on pino, johon luodaan Kubernetes-yhteensopiva kuormituksen tasapainotin, joka mahdollistaa palveluiden käyttöönoton toimialueen verkossa. Ensimmäisessä vaiheessa alustalle asetettiin resurssit, jotka määritettiin aiemmin manuaalisesti Microsoft Azure -pilvialustan verkkoliittymästä.
Kuormantasaajakehityspinon konfigurointi komentoriviliitännällä
Tässä luvussa esitelty Pulumi-projekti ja hakemistorakenne eivät ole ainoa tapa toteuttaa tämän työn mukainen toiminnallisuus. Kun kaikki pinot on rakennettu, suoritetaan päästä päähän -testi, kirjaudutaan sovellukseen ja tehdään tilaus selaimella, joka käsitellään ohjelmakoodin kautta. GitHub-palvelusta saatavilla olevan tiedon1 mukaan Pulumin päätietokannan päähaaralle vastaanotettiin kuukauden aikana yhteensä 108 vetopyyntöä2, joista 92 yhdistettiin päähaaraan.
Kaikki Pulumin kehittäjät eivät kuitenkaan ole rekisteröityneet Pulumin organisaatioon, joten tarkkoja lukuja ei ole saatavilla. Tällä hetkellä on epätodennäköistä, että kehitysyhteisö pystyisi jatkamaan Pulumin kehittämistä, mikäli Pulumi Oyj:n toiminta lakkaa. Voit rakentaa resurssitoimittajasi dynaamiseksi resurssien tarjoajaksi [65], joka ei vaadi erillistä ohjelmalaajennusta ja toimii sen sisältävän ohjelman yhteydessä.
C#-ohjelmointikielellä tämä tarkoittaa, että periytymistä ja koostumusta voidaan käyttää resurssien ja pinojen kanssa.
Ajonaikainen virhe resurssiryhmän nimen puuttuessa
Yllä olevien ominaisuuksien lisäksi StackBase-perusluokan rakentaja tarkistaa, että Pulumi-pinon nimi vastaa työhön valittuja käytäntöjä.
Ajonaikainen virhe, kun resurssille on syötetty virheelliset arvot
Komponenttiresurssiesimerkki
Pinoluokkaesimerkki
Automatisointirajapintaesimerkki
Vian etsintään käytetty luokka
Pulumi-pinoluokkien kantaluokkana käytetty abstrakti StackBase-luokka
Pinon nimenä käytetty StackName-tietoluokka
Resurssiryhmään liittyviä yksikkötestejä
Kuormantasaajapinoon liittyvä yksikkötesti
Terraform-juurimoduuli
Terraform-verkkosivun sisältömoduuli
Terraform-tulosteet