Prensip pou devlope aplikasyon modèn nan NGINX. Pati 1

Bonjou zanmim yo. Nan patisipe nan lansman kou a PHP backend devlopè, tradisyonèlman pataje avèk ou tradiksyon materyèl itil.

Lojisyèl rezoud pi plis ak plis travay chak jou, pandan y ap vin pi plis ak plis konplèks. Kòm Marc Andressen te di yon fwa, li konsome mond lan.

Prensip pou devlope aplikasyon modèn nan NGINX. Pati 1

Kòm yon rezilta, fason aplikasyon yo devlope ak delivre te chanje dramatikman pandan kèk ane ki sot pase yo. Sa yo te chanjman nan echèl tektonik ki te lakòz yon seri prensip. Prensip sa yo pwouve yo itil nan kreye ekip, konsepsyon, devlope, ak livrezon aplikasyon w lan bay itilizatè final yo.

Prensip yo ka rezime jan sa a: aplikasyon an ta dwe piti, ki baze sou entènèt, epi li gen yon achitekti devlopè ki santre. Avèk twa prensip sa yo nan tèt ou, ou ka kreye yon aplikasyon solid, fen-a-fen ki ka byen vit ak an sekirite delivre bay itilizatè final la, epi li fasil évolutive ak extensible.

Prensip pou devlope aplikasyon modèn nan NGINX. Pati 1

Chak nan prensip yo pwopoze yo gen yon kantite aspè ke nou pral diskite pou montre kijan chak prensip kontribye nan objektif final la, ki se livrezon rapid nan aplikasyon serye ki fasil pou kenbe ak itilize. Nou pral gade nan prensip yo an relasyon ak opoze yo nan lòd yo klarifye sa sa vle di, di, "Asire w ke ou itilize prensip ti kras'.

Nou espere ke atik sa a pral ankouraje w sèvi ak prensip yo pwopoze pou bati aplikasyon modèn, ki pral bay yon apwòch inifye nan konsepsyon nan yon kontèks yon pil teknoloji k ap grandi.

Lè w aplike prensip sa yo, ou pral jwenn ou menm pran avantaj de dènye tandans nan devlopman lojisyèl, ki gen ladan DevOps nan devlopman ak livrezon aplikasyon, itilizasyon resipyan (pa egzanp, Koupre) ak kad òkestrasyon veso yo (pa egzanp, Kubernetes), itilizasyon mikwosèvis (ki gen ladan Achitekti mikwosèvis la NGINX и Achitekti kominikasyon rezo pou aplikasyon pou mikwosèvis.

Ki sa ki se yon aplikasyon modèn?

Aplikasyon modèn? Pile modèn? Ki sa egzakteman "modèn" vle di?

Pifò devlopè gen sèlman yon lide jeneral sou ki sa yon aplikasyon modèn konsiste de, kidonk li nesesè defini klèman konsèp sa a.

Yon aplikasyon modèn sipòte plizyè kliyan, kit se yon koòdone itilizatè bibliyotèk React JavaScript, yon aplikasyon mobil Android oswa iOS, oswa yon aplikasyon ki konekte ak yon lòt API. Yon aplikasyon modèn implique yon kantite kliyan endefini pou ki li bay done oswa sèvis.

Yon aplikasyon modèn bay yon API pou jwenn aksè nan done ak sèvis yo mande yo. API a ta dwe imuiabl ak konstan, epi yo pa ekri espesyalman pou yon demann espesifik nan men yon kliyan espesifik. API a disponib sou HTTP(S) epi li bay aksè a tout fonksyonalite ki disponib nan GUI oswa CLI.

Done yo dwe disponib nan yon fòma entèoperab akseptab tankou JSON. Yon API ekspoze objè ak sèvis nan yon fason pwòp, òganize, tankou RESTful API oswa GraphQL bay yon koòdone desan.

Aplikasyon modèn yo bati sou pil modèn la, ak chemine modèn la se pil ki sipòte aplikasyon sa yo, respektivman. Pile sa a pèmèt yon pwomotè fasil kreye yon aplikasyon ak yon koòdone HTTP ak pwen final API klè. Apwòch yo chwazi a pral pèmèt aplikasyon w lan fasil resevwa epi voye done nan fòma JSON. Nan lòt mo, chemine modèn la koresponn ak eleman yo nan Aplikasyon an Douz Faktè pou mikwosèvis.

Vèsyon popilè nan kalite sa a pile yo baze sou Java, Piton, Node, Ruby, PHP и Go. Achitekti Microservice NGINX reprezante yon egzanp yon pil modèn ki aplike nan chak lang mansyone yo.

Tanpri sonje ke nou pa defann yon apwòch sèlman mikwosèvis. Anpil nan nou ap travay ak monolit ki bezwen evolye, pandan ke lòt moun ap fè fas ak aplikasyon SOA ki ap elaji ak evolye yo vin aplikasyon mikwosèvis. Gen lòt toujou ap deplase nan direksyon pou aplikasyon pou san sèvè, ak kèk ap aplike konbinezon de sa ki anwo yo. Prensip yo dekri nan atik la aplike nan chak nan sistèm sa yo ak sèlman kèk modifikasyon minè.

Prensip

Kounye a ke nou gen yon konpreyansyon komen sou sa yon aplikasyon modèn ak pil modèn yo ye, li lè yo plonje nan achitekti yo ak prensip devlopman ki pral sèvi ou byen nan devlope, aplike, ak kenbe yon aplikasyon modèn.

Youn nan prensip yo son tankou "fè ti aplikasyon", an n jis rele l prensip ti kras. Gen aplikasyon ekstrèmman konplèks ki fèt ak anpil pati k ap deplase. Nan vire, bati yon aplikasyon ki soti nan ti eleman disrè fè li pi fasil pou konsepsyon, kenbe, ak travay avèk li kòm yon antye. (Remake byen ke nou te di "senplifye" pa "fè senp").

Dezyèm prensip la se ke nou ka ogmante pwodiktivite pwomotè lè nou ede yo konsantre sou karakteristik yo ap devlope, pandan y ap libere yo anba enfrastrikti ak enkyetid CI/CD pandan aplikasyon an. Se konsa, nan yon Nutshell, apwòch nou an konsantre sou devlopè yo.

Finalman, tout bagay sou aplikasyon w lan dwe konekte ak rezo a. Pandan 20 ane ki sot pase yo, nou te fè gwo pwogrè nan direksyon pou yon avni rezo kòm rezo yo vin pi rapid ak aplikasyon yo pi konplèks. Kòm nou te wè, yon aplikasyon modèn dwe itilize sou yon rezo pa anpil kliyan diferan. Aplike rezo panse a achitekti gen benefis enpòtan ki ale byen ak prensip ti kras ak konsèp apwòch la, oryante pwomotè.

Si w kenbe prensip sa yo nan tèt ou lè w ap desine ak aplike yon aplikasyon, w ap gen yon avantaj ki pa ka nye nan devlopman ak livrezon pwodwi w la.

Ann gade sou twa prensip sa yo an plis detay.

Prensip ti kras

Li difisil pou sèvo imen an wè yon gwo kantite enfòmasyon an menm tan. Nan sikoloji, tèm kognitif chay la refere a kantite total efò mantal ki nesesè pou kenbe enfòmasyon nan memwa. Diminye chay kognitif sou devlopè yo se yon priyorite paske li pèmèt yo konsantre sou rezoud pwoblèm nan olye pou yo kenbe modèl konplèks aktyèl la nan aplikasyon an antye ak karakteristik yo ap devlope nan tèt yo.

Prensip pou devlope aplikasyon modèn nan NGINX. Pati 1

Aplikasyon yo dekonpoze pou rezon sa yo:

  • Redwi chaj mantal sou devlopè yo;
  • Akselerasyon ak senplifikasyon nan tès la;
  • Livrezon rapid nan chanjman nan aplikasyon an.


Gen plizyè fason pou redwi chaj mantal sou devlopè yo, e sa se kote prensip ti antre nan jwèt.

Se konsa, isit la gen twa fason pou diminye chaj mantal:

  1. Diminye tan yo dwe konsidere lè yo devlope yon nouvo karakteristik - pi kout tan an, se pi ba chaj mantal la.
  2. Diminye kantite kòd ki fè yon sèl-fwa travay - mwens kòd - mwens chaj.
  3. Senplifye pwosesis pou fè chanjman incrémentielles nan yon aplikasyon.

Diminye tan devlopman an

Ann tounen nan jou yo lè metodoloji a waterfall te estanda pou pwosesis devlopman an, ak delè de sis mwa a de ane pou devlope oswa mete ajou yon aplikasyon yo te pratik komen. Tipikman, enjenyè yo ta premye li dokiman ki enpòtan tankou kondisyon pwodwi (PRD), dokiman referans sistèm (SRD), plan achitekti, epi kòmanse konbine tout bagay sa yo ansanm nan yon modèl mantal, dapre sa yo kode. Kòm kondisyon yo epi, kidonk, achitekti a te chanje, yo te dwe fè yon efò grav pou enfòme tout ekip la sou mizajou nan modèl la mantal. Yon apwòch konsa, nan pi move, ta ka tou senpleman paralize travay la.

Pi gwo chanjman nan pwosesis devlopman aplikasyon an te entwodiksyon metodoloji ajil la. Youn nan karakteristik prensipal yo nan metodoloji a agile se yon devlopman iteratif. Nan vire, sa a mennen nan yon rediksyon nan chaj la mantal sou enjenyè. Olye pou yo mande ekip devlopman an aplike aplikasyon an nan yon sik long, agile apwòch pèmèt ou konsantre sou ti kantite kòd ki ka byen vit teste ak deplwaye, pandan y ap resevwa fidbak. Chaj kognitif aplikasyon an te deplase soti nan yon kad tan sis mwa pou de ane ak yon gwo kantite espesifikasyon pou yon ajoute de semèn oswa chanjman karakteristik vize yon konpreyansyon ki pi twoub sou yon gwo app.

Chanje konsantrasyon an soti nan yon aplikasyon masiv nan ti karakteristik espesifik ki ka ranpli nan yon Sprint de semèn, ak pa plis pase yon karakteristik devan pwochen Sprint nan tèt ou, se yon chanjman enpòtan. Sa a te pèmèt nou ogmante pwodiktivite devlopman pandan y ap diminye chay la mantal, ki toujou ap fluktue.

Nan metodoloji agile aplikasyon final la espere yo dwe yon vèsyon yon ti kras modifye nan konsèp orijinal la, kidonk pwen nan fen devlopman se nesesèman Limit. Se sèlman rezilta yo nan chak Sprint espesifik ka klè ak egzak.

Ti kodbaz

Pwochen etap la nan diminye chaj mantal se diminye baz kòd la. Kòm yon règ, aplikasyon modèn yo masiv - yon aplikasyon solid, antrepriz ka konpoze de dè milye de dosye ak dè santèn de milye de liy kòd. Tou depan de ki jan dosye yo òganize, lyen ak depandans ant kòd ak dosye yo ka evidan, oswa vis vèrsa. Menm ekzekisyon kòd debogaj tèt li ka gen pwoblèm, tou depann de bibliyotèk yo itilize ak kijan zouti debogaj yo fè distenksyon ant bibliyotèk / pakè / modil ak kòd koutim.

Bati yon modèl mantal k ap travay nan kòd aplikasyon an ka pran yon kantite tan enpresyonan, epi yon lòt fwa ankò mete yon gwo fado mantal sou pwomotè a. Sa a se laverite espesyalman pou baz kòd monolitik, kote gen yon gwo kantite kòd, entèraksyon ki genyen ant eleman yo fonksyonèl nan ki pa klèman defini, epi separasyon an nan objè atansyon souvan twoub paske fwontyè fonksyonèl yo pa respekte.

Youn nan fason efikas pou diminye chaj mantal sou enjenyè yo se pou yo deplase nan yon achitekti mikwosèvis. Nan yon apwòch mikwosèvis, chak sèvis konsantre sou yon seri karakteristik; pandan ke siyifikasyon an nan sèvis la anjeneral defini ak konprann. Limit yo nan yon sèvis yo klè tou - sonje ke kominikasyon ak yon sèvis fèt atravè yon API, kidonk done ki te pwodwi pa yon sèvis ka fasilman pase nan yon lòt.

Entèaksyon ak lòt sèvis anjeneral limite a kèk sèvis itilizatè ak kèk sèvis founisè ki itilize apèl API senp ak pwòp, tankou lè l sèvi avèk REST. Sa vle di ke chaj la mantal sou enjenyè a seryezman redwi. Pi gwo defi a rete konprann modèl entèraksyon sèvis la ak fason bagay tankou tranzaksyon yo rive nan plizyè sèvis. Kòm yon rezilta, itilizasyon mikwosèvis diminye chaj mantal lè yo redwi kantite kòd, defini limit sèvis klè, epi bay yon konpreyansyon sou relasyon ki genyen ant itilizatè yo ak founisè yo.

Ti chanjman incrémentielle

Dènye eleman prensip la ti piti se jesyon chanjman. Li se yon tantasyon patikilye pou devlopè yo gade nan baz la kòd (menm petèt pwòp yo, ki pi gran kòd) epi di, "Sa a se krap, nou bezwen reekri li tout." Pafwa sa a se bon desizyon an, epi pafwa pa. Li mete chay chanjman modèl mondyal la sou ekip devlopman an, ki an vire mennen nan chaj mantal masiv. Li pi bon pou enjenyè yo konsantre sou chanjman yo ka fè pandan Sprint la, pou yo ka woule fonksyonalite ki nesesè yo nan yon fason apwopriye, kwake piti piti. Pwodwi final la ta dwe sanble ak yon sèl ki te planifye davans, men ak kèk modifikasyon ak tès yo adapte bezwen kliyan an.

Lè w reekri gwo pòsyon nan kòd, pafwa li pa posib pou delivre chanjman an byen vit paske lòt depandans sistèm antre an jwèt. Yo nan lòd yo kontwole koule nan chanjman, ou ka itilize kache karakteristik. Nan prensip, sa vle di ke fonksyonalite a se nan pwodiksyon, men li pa disponib lè l sèvi avèk anviwònman yo varyab anviwònman (env-var) oswa kèk lòt mekanis konfigirasyon. Si kòd la te pase tout pwosesis kontwòl kalite, Lè sa a, li ka fini nan pwodiksyon nan yon eta inaktif. Sepandan, estrateji sa a ap travay sèlman si karakteristik la evantyèlman pèmèt. Sinon, li pral sèlman ankonbre kòd la epi ajoute yon chaj mantal ke pwomotè a pral gen fè fas ak yo nan lòd yo dwe pwodiktif. Jesyon chanjman ak chanjman incrémentielles tèt yo ede kenbe chaj mantal devlopè yo nan yon nivo abòdab.

Enjenyè gen simonte anpil difikilte menm ak entwodiksyon an senp nan fonksyonalite adisyonèl. Sou pati nan jesyon, li ta pridan diminye fado a nesesè sou ekip la pou ke li ka konsantre sou eleman kle fonksyonèl. Gen twa bagay ou ka fè pou ede ekip devlopman ou a:

  1. Sèvi ak metodoloji agilelimite delè ekip la dwe konsantre sou karakteristik kle yo.
  2. Aplike aplikasyon w lan kòm plizyè mikwosèvis. Sa a pral limite kantite karakteristik ki ka aplike epi ranfòse limit ki kenbe chay kognitif la nan travay.
  3. Pito chanjman incrémentielles pase gwo Et peu, chanje ti moso kòd. Sèvi ak karakteristik kache pou aplike chanjman menm si yo pa pral vizib imedyatman apre yo fin ajoute yo.

Si ou aplike prensip ti nan travay ou, ekip ou a pral pi kontan, pi byen konsantre sou aplikasyon karakteristik ki nesesè yo, ak plis chans pou yo woule chanjman kalitatif pi vit. Men, sa pa vle di ke travay la pa ka vin pi konplike, pafwa, okontrè, entwodiksyon an nan nouvo fonksyonalite mande pou modifikasyon nan plizyè sèvis, ak pwosesis sa a ka pi difisil pase menm jan an nan yon achitekti monolitik. Nan nenpòt ka, benefis ki genyen nan pran apwòch la ti yo vo li.

Fen premye pati a.

Byento nou pral pibliye dezyèm pati tradiksyon an, epi kounye a nou ap tann kòmantè ou yo epi envite ou Jounen Ouvè, ki pral pran plas jodi a nan 20.00.

Sous: www.habr.com

Add nouvo kòmantè