Writing application code preferred most cloud solutions-solutions that most application programmers write specifically for these days.
tämän dissonanssin käsittelemiseksi on syntynyt 12 tekijän App-menetelmä. The 12 factors on lähestymistapa, joka auttaa ohjelmoijia kirjoittamaan nykyaikaisia sovelluksia deklaratiivisella tavalla käyttäen selkeitä sopimuksia, jotka on otettu käyttöön pilvipalvelun kautta.
tässä artikkelissa esittelen 12-tekijän sovellusmetodologian ja tarjoan korkeatasoisen yhteenvedon sen periaatteista.
mikä on 12-tekijän app-menetelmä?
vuonna 2012 herokun ohjelmoijat debytoivat 12-Factor app-metodilla. Nämä ohjelmoijat ovat kehittäneet ja käyttöön satoja sovelluksia kirjoitti tämän menetelmän, hyödyntäen kokemustaan nähdä SaaS apps ”luonnossa”.
Tämä ryhmä pitää metodologiaa triangulaationa:
- Ideaalikäytännöt sovelluskehityksen tueksi
- sovelluksen dynamiikka kasvaa orgaanisesti
- codebasen kehittäjien suhde ja yhteistyö
heidän tavoitteensa ovat kaksijakoiset:
- välttääkseen ohjelmistoeroosiokustannuksia
- lisätäkseen tietoisuutta systeemisistä ongelmista, joita he ovat havainneet nykyaikaisessa sovelluskehityksessä
ryhmä viittaa kahteen inspiroivaan lähteeseen, yritys-sovellusarkkitehtuurin kaavoihin ja Refactorointiin, jotka molemmat on tehnyt ammattikehittäjä Martin Fowler.
ja nyt esittelen jokaisen 12 tekijästä.
periaate I. Codebase
”yksi versionhallinnassa seurattu koodipohja, monet depositiot”
koodikannassasi pitäisi olla looginen versionhallintajärjestelmä, joka on helppo ymmärtää.
jokaisella käyttöönotolla tulee olla oma koodivarasto, joka voidaan ottaa käyttöön useisiin ympäristöihin. Vältä useiden sovellusten sijoittamista samaan arkistoon. Tämä tekee versionhallinnasta lähes mahdotonta ymmärtää ja versiot sotkeutuvat, mikä johtaa ei-lisäarvotyöhön.
periaate II. riippuvuudet
”eksplisiittisesti julistavat ja eristävät riippuvuudet”
tämän periaatteen mukaan ei koskaan pidä luottaa koko järjestelmän kattavien pakettien implisiittiseen olemassaoloon. Sen sijaan ”
- varmista, että sovelluskohtaiset kirjastot ovat käytettävissä
- Tarkista, että käyttöjärjestelmään on saatavilla tarvittavat järjestelmäkirjastot, kuten curl tai ImageMagick. (Ei ole mitään takeita siitä, että nämä ovat olemassa jokaisessa järjestelmässä, jossa sovellus voisi toimia tulevaisuudessa.)
kaiken kaikkiaan 12-tekijän app: n on oltava itsesäilyttävä. Sovellus on eristettävä riittävästi, jotta vältetään vuorovaikutus isäntäkoneeseen asennettujen ristiriitaisten kirjastojen kanssa.
katsotaanpa esimerkkiä. Pythonissa voit saavuttaa julistuksen ja eristämisen käyttämällä vastaavasti Pip: tä ja Virtualenv: tä. Tämän periaatteen täyttämiseksi on aina käytettävä sekä riippuvuussuhteen että eristyneisyyden julistamista. Hallitse riippuvuuksia sovelluksessa, ei ulkoisesta lähteestä. Riippuvuudet tulee säilyttää arkistossa sovelluksen sisällä
periaate III. Config
”Store config in the environment”
sovellus ja sen kokoonpanon tulee olla täysin riippumaton. Lisäksi configien tallentamista jatkuvasti koodiin tulisi välttää kokonaan.
kokoonpanoissa tulee olla erillinen tiedosto, eikä niitä saa isännöidä koodivarastossa. Erillisen config-tiedoston avulla on helppo päivittää config-arvot koskematta varsinaiseen koodipohjaan, jolloin sovellusten uudelleen käyttöönotto ei ole tarpeen, kun muutat tiettyjä config-arvoja.
kun konfiguraatiot ovat ympäristössä, ei sovelluksessa, muuttujina, voit helposti siirtää sen toiseen ympäristöön koskematta lähdekoodiin. Kahdentoista tekijän sovellukset tallentaa configs muuttujina niin, että ne ovat” todennäköisesti tarkistetaan arkistoon ” vahingossa. Toinen bonus: sitten configs ovat riippumattomia kielestä ja käyttöjärjestelmästä.
periaate IV. tukipalvelut
”käsittele tukipalvelut liitteenä olevina resursseina”
12-faktorisessa sovelluksessa kaikki palvelut, jotka eivät tue ydinsovellusta, täytyy käyttää palveluna. Näitä ei-ydinpalveluja voivat olla:
- tietokannat
- ulkoinen tallennustila
- Viestijonot
- jne.
näitä voidaan käsitellä resurssina. Näitä tulee käyttää palveluna HTTP – tai vastaavan pyynnön kautta, ja ne on sitten määritetty asetuksissa. Näin palvelun lähdettä voidaan muuttaa vaikuttamatta sovelluksen ydinkoodiin.
esimerkiksi message queuing-järjestelmää käyttävä sovellus on paras, jos se voi helposti muuttua RabbitMQ: sta ZeroMQ: sta ActiveMQ: iin muuttamalla vain asetustietoja.
periaate V. Build, release, run
”Strictly separate build and run stages”
12-kertoiminen sovellus on tarkka kolmen rakennus -, vapautus-ja juoksuvaiheen erottamisesta.
Aloita rakentamisprosessi tallentamalla sovellus lähdekoodiohjaukseen ja rakenna sitten sen riippuvuudet. Erottamalla config tiedot tarkoittaa, että voit yhdistää sen rakentaa release vaiheessa-ja sitten se on valmis ajaa vaiheessa. On myös tärkeää, että jokainen julkaisu on ainutlaatuinen ID.
periaate VI. prosessit
”Suorita sovellus yhtenä tai useampana tilattomana prosessina”
tallentavat kaikki tiedot, joita tarvitaan tilan taustapalveluun, kuten tietokantoihin. Ajatuksena on, että prosessi on valtioton eikä jaa yhtään mitään.
vaikka monet kehittäjät ovat tottuneet ”tahmaisiin istuntoihin”, tietojen tallentaminen istuntoon, joka odottaa seuraavaa pyyntöä, on ristiriidassa tämän menetelmän kanssa.
periaate VII. Porttisidontaperiaate
”Vientipalvelut porttisidonnan kautta”
12-tekijäsovellusten on aina oltava riippumattomia lisäsovelluksista. Jokaisen toiminnon pitäisi olla oma prosessinsa – täysin eristettynä.
perinteisessä ympäristössä oletamme, että eri prosessit käsittelevät erilaisia toiminnallisuuksia. Sellaisenaan, se on helppo edelleen olettaa nämä toiminnot ovat saatavilla web-protokollan, kuten HTTP, joten on todennäköistä, että sovellukset toimivat takana Web-palvelimet, kuten Apache tai Tomcat. Tämä on kuitenkin vastoin 12 tekijän menetelmää.
lisää sen sijaan www-palvelinkirjasto tai vastaava ydinsovellukseen. Tämä tarkoittaa, että sovellus voi odottaa pyyntöjä määritellyssä port, onko se HTTP tai eri protokolla.
periaate VIII. Konkurenssi
”skaalaa prosessimallin kautta”
todellinen 12-tekijän sovellus on suunniteltu skaalaukseen. Rakenna sovelluksesi niin, että skaalaus pilvessä on saumatonta. Kun kehität sovelluksen samanaikaiseksi, voit pyörittää uusia instansseja pilveen vaivattomasti.
lisätäkseen kapasiteettia (lisätoimintojen käynnistäminen lisäkoneilla), sovelluksen pitäisi pystyä lisäämään lisää instansseja sen sijaan, että paikallisella koneella olisi enemmän muistia tai suoritinta.
periaate IX. Kertakäyttöisyys
”maksimoi kestävyys nopealla käynnistyksellä ja Sirolla sammutuksella”
kertakäyttöisten prosessien käsite tarkoittaa, että sovellus voi kuolla milloin tahansa, mutta se ei vaikuta käyttäjään—sovellus voidaan korvata muilla sovelluksilla tai se voi käynnistyä uudelleen. Building disposability osaksi app varmistaa, että sovellus sammuu sulavasti: sen pitäisi puhdistaa kaikki käytetyt resurssit ja sammuttaa sujuvasti.
kun sovellus on suunniteltu näin, se tulee takaisin ylös nopeasti. Samoin, kun prosessit päättyvät, niiden pitäisi lopettaa nykyinen pyyntö, kieltäytyä saapuvista pyynnöistä ja poistua.
periaate X. Dev/prod pariteetti
”pidä kehitys, lavastus ja tuotanto mahdollisimman samanlaisina”
kehitykseen ja tuotantoon käytetyillä sovelluksilla tulisi olla pariteetti. Periaatteessa molempien sijoitusten välillä pitäisi olla vain pienikin ero.
suuri ero voi johtaa tahattomiin yhteensopivuusongelmiin dev: n ja tuotantokoodin välillä. Kun rakennat 12-tekijän sovelluksen, dev: n ja prod: n välisten tukipalvelujen on oltava samat; ero voi aiheuttaa merkittäviä ongelmia.
periaate XI. lokit
”käsittele lokit tapahtumavirtoina”
toisin kuin monoliittiset ja perinteiset sovellukset, jotka tallentavat lokitietoja tiedostoon, tämän periaatteen mukaan lokit tulisi suoratoistaa valittuun paikkaan—ei vain dumpata ne lokitiedostoon.
tyypillisesti lokit eivät asu samassa paikassa pilvipohjaisissa ympäristöissä jokaisen polttamisen jälkeen. Kun uudet prosessit alkavat tai sovelluksesi kaatuu, lokit jaetaan useisiin pilvikoneisiin; ne eivät istu yhdellä koneella tai isännällä.
ratkaise tämä ongelma nimeämällä yhteinen paikka striimattaville lokeille. Joissakin tapauksissa, voit ohjata Stdout tiedostoon. Todennäköisempää kuitenkin on, että haluat ottaa käyttöön Fluentdin kaltaisen lokireitittimen ja tallentaa lokit Hadoopiin tai tiettyyn palveluun, kuten Splunkiin.
periaate XII. Admin-prosessit
”Suorita admin/management-tehtävät kertaluonteisina prosesseina”
lopullinen 12-tekijän app-periaate ehdottaa hallinnollisten tehtävien erottamista muusta sovelluksesta. Näihin tehtäviin voi kuulua tietokannan siirtäminen tai tietueiden tarkastaminen.
vaikka admin-prosessit ovat erillisiä, sinun täytyy jatkaa niiden ajamista samassa ympäristössä ja itse sovelluksen peruskoodia ja configia vastaan. Admin-tehtäväkoodin lähettäminen sovelluksen rinnalle estää ajautumisen.
aiheeseen liittyvää lukemista
- BMC DevOpsin blogi
- Ketterä vs vesiputous SDLCs: What ’ s The Difference?
- Deployment Pipelights (CI/CD) Ohjelmistotekniikassa
- mitä on Extreme Programming (XP)?
- miten & miksi tulla Ohjelmistotehtaaksi
- ohjelmoinnin Huippukonferenssit & ohjelmistokehitys