Prinċipji għall-iżvilupp ta 'applikazzjonijiet moderni minn NGINX. Parti 1

Hello ħbieb. B'antiċipazzjoni tat-tnedija tal-kors Iżviluppatur backend PHP, tradizzjonalment jaqsmu miegħek it-traduzzjoni ta 'materjal utli.

Is-softwer isolvi aktar u aktar ħidmiet ta 'kuljum, filwaqt li jsir aktar u aktar kumpless. Kif darba qal Marc Andressen, tikkonsma d-dinja.

Prinċipji għall-iżvilupp ta 'applikazzjonijiet moderni minn NGINX. Parti 1

Bħala riżultat, il-mod kif l-applikazzjonijiet huma żviluppati u mwassla nbidel b'mod drammatiku matul l-aħħar ftit snin. Dawn kienu ċaqliq ta’ skala tettonika li rriżultaw f’sett ta’ prinċipji. Dawn il-prinċipji wrew li huma ta’ għajnuna fil-bini ta’ tim, id-disinn, l-iżvilupp u t-twassil tal-applikazzjoni tiegħek lill-utenti finali.

Il-prinċipji jistgħu jinġabru fil-qosor kif ġej: l-applikazzjoni għandha tkun żgħira, ibbażata fuq il-web, u jkollha arkitettura ċċentrata fuq l-iżviluppatur. B'dawn it-tliet prinċipji f'moħħok, tista 'toħloq applikazzjoni robusta, minn tarf sa tarf li tista' titwassal malajr u b'mod sigur lill-utent aħħari, u hija faċilment skalabbli u estensibbli.

Prinċipji għall-iżvilupp ta 'applikazzjonijiet moderni minn NGINX. Parti 1

Kull wieħed mill-prinċipji proposti għandu numru ta 'aspetti li se niddiskutu biex juru kif kull prinċipju jikkontribwixxi għall-għan aħħari, li huwa l-kunsinna rapida ta' applikazzjonijiet affidabbli li huma faċli biex jinżammu u jintużaw. Aħna se nħarsu lejn il-prinċipji fir-rigward tal-opposti tagħhom sabiex niċċaraw xi tfisser, ngħidu aħna, "Aċċerta ruħek li tuża prinċipju taċ-ċokon".

Nittamaw li dan l-artikolu jinkoraġġixxik tuża l-prinċipji proposti għall-bini ta 'applikazzjonijiet moderni, li se jipprovdu approċċ unifikat għad-disinn fil-kuntest ta' munzell ta 'teknoloġija li dejjem jikber.

Billi tapplika dawn il-prinċipji, issib ruħek li tieħu vantaġġ mill-aħħar tendenzi fl-iżvilupp tas-softwer, inkluż il- DevOps għall-iżvilupp u t-twassil ta’ applikazzjonijiet, l-użu ta’ kontenituri (pereżempju, Docker) u oqfsa tal-orkestrazzjoni tal-kontejners (pereżempju, Kubernetes), l-użu ta’ mikroservizzi (inkluża l-Arkitettura tal-Mikroservizzi NGINX и arkitettura tal-komunikazzjoni tan-netwerk għal applikazzjonijiet ta' mikroservizz.

X'inhi applikazzjoni moderna?

Applikazzjonijiet moderni? Munzell modern? Xi jfisser eżattament "moderna"?

Ħafna mill-iżviluppaturi għandhom biss idea ġenerali ta 'xiex tikkonsisti applikazzjoni moderna, għalhekk huwa meħtieġ li dan il-kunċett jiġi definit b'mod ċar.

App moderna tappoġġja klijenti multipli, kemm jekk hija interface tal-utent tal-librerija React JavaScript, app mobbli Android jew iOS, jew app li tikkonnettja ma API oħra. Applikazzjoni moderna timplika numru indefinit ta' klijenti li għalihom tipprovdi data jew servizzi.

Applikazzjoni moderna tipprovdi API biex taċċessa d-dejta u s-servizzi mitluba. L-API għandha tkun immutabbli u kostanti, u mhux miktuba speċifikament għal talba speċifika minn klijent speċifiku. L-API hija disponibbli fuq HTTP(S) u tipprovdi aċċess għall-funzjonalità kollha disponibbli fil-GUI jew CLI.

Id-dejta għandha tkun disponibbli f'format interoperabbli aċċettat b'mod komuni bħal JSON. API jesponi oġġetti u servizzi b'mod nadif u organizzat, bħal RESTful API jew GraphQL jipprovdu interface deċenti.

L-applikazzjonijiet moderni huma mibnija fuq il-munzell modern, u l-munzell modern huwa l-munzell li jappoġġja applikazzjonijiet bħal dawn, rispettivament. Dan il-munzell jippermetti lil żviluppatur li faċilment joħloq applikazzjoni b'interface HTTP u endpoints ċari tal-API. L-approċċ magħżul jippermetti li l-applikazzjoni tiegħek tirċievi u tibgħat dejta faċilment f'format JSON. Fi kliem ieħor, il-munzell modern jikkorrispondi għall-elementi tal-Applikazzjoni ta 'Tnax-il Fatturi għal mikroservizzi.

Verżjonijiet popolari ta 'dan it-tip ta' munzell huma bbażati fuq Java, Python, nodu, Ruby, PHP и Go. Arkitettura tal-Mikroservizz NGINX jirrappreżenta eżempju ta' munzell modern implimentat f'kull waħda mil-lingwi msemmija.

Jekk jogħġbok innota li aħna mhux qed nirrakkomandaw approċċ esklussivament ta' mikroservizzi. Ħafna minnkom qed jaħdmu ma 'monoliths li jeħtieġ li jevolvu, filwaqt li oħrajn qed jittrattaw ma' applikazzjonijiet SOA li qed jespandu u jevolvu biex isiru applikazzjonijiet ta 'mikroservizz. Xorta waħda oħrajn qed jimxu lejn applikazzjonijiet mingħajr server, u xi wħud qed jimplimentaw kombinazzjonijiet ta 'hawn fuq. Il-prinċipji deskritti fl-artikolu japplikaw għal kull waħda minn dawn is-sistemi bi ftit modifiki żgħar biss.

Prinċipji

Issa li għandna fehim komuni ta 'x'inhuma applikazzjoni moderna u munzell modern, wasal iż-żmien li tgħaddas fl-arkitettura u l-prinċipji ta' żvilupp li ser iservu tajjeb fl-iżvilupp, l-implimentazzjoni u ż-żamma ta 'applikazzjoni moderna.

Wieħed mill-prinċipji ħsejjes bħal "tagħmel applikazzjonijiet żgħar", ejja sempliċement insejħulu prinċipju taċ-ċokon. Hemm applikazzjonijiet oerhört kumplessi li huma magħmula minn ħafna partijiet li jiċċaqilqu. Min-naħa tiegħu, il-bini ta 'applikazzjoni minn komponenti żgħar u diskreti jagħmilha aktar faċli biex tiddisinja, tinżamm u taħdem magħha kollha kemm hi. (Innota li għidna "jissimplifika" mhux "jagħmel sempliċi").

It-tieni prinċipju huwa li nistgħu nżidu l-produttività tal-iżviluppatur billi ngħinuhom jiffokaw fuq il-karatteristiċi li qed jiżviluppaw, filwaqt li neħilsu minn tħassib dwar l-infrastruttura u CI/CD waqt l-implimentazzjoni. Allura, fil-qosor, l-approċċ tagħna iffukat fuq l-iżviluppaturi.

Fl-aħħarnett, kollox dwar l-applikazzjoni tiegħek għandu jkun konness man-netwerk. Matul l-aħħar 20 sena, għamilna passi kbar lejn futur f'netwerk hekk kif in-netwerks isiru aktar mgħaġġla u l-applikazzjonijiet aktar kumplessi. Kif diġà rajna, applikazzjoni moderna trid tintuża fuq netwerk minn ħafna klijenti differenti. L-applikazzjoni tal-ħsieb tan-netwerk għall-arkitettura għandha benefiċċji sinifikanti li jmorru tajjeb magħhom prinċipju taċ-ċokon u l-kunċett tal-approċċ, orjentat lejn l-iżviluppatur.

Jekk iżżomm dawn il-prinċipji f'moħħok meta tfassal u timplimenta applikazzjoni, ser ikollok vantaġġ innegabbli fl-iżvilupp u t-twassil tal-prodott tiegħek.

Ejja nħarsu lejn dawn it-tliet prinċipji f'aktar dettall.

Prinċipju taċ-ċokon

Huwa diffiċli għall-moħħ tal-bniedem li jipperċepixxi ammont kbir ta 'informazzjoni fl-istess ħin. Fil-psikoloġija, it-terminu tagħbija konjittiva jirreferi għall-ammont totali ta 'sforz mentali meħtieġ biex tinżamm l-informazzjoni fil-memorja. It-tnaqqis tat-tagħbija konjittiva fuq l-iżviluppaturi hija prijorità għaliex tippermettilhom li jiffokaw fuq is-soluzzjoni tal-problema minflok iżommu l-mudell kumpless attwali tal-applikazzjoni kollha u l-karatteristiċi li qed jiġu żviluppati fir-ras tagħhom.

Prinċipji għall-iżvilupp ta 'applikazzjonijiet moderni minn NGINX. Parti 1

L-applikazzjonijiet jiddekomponu għar-raġunijiet li ġejjin:

  • Tagħbija konjittiva mnaqqsa fuq l-iżviluppaturi;
  • Aċċelerazzjoni u simplifikazzjoni tal-ittestjar;
  • Twassil veloċi tal-bidliet fl-applikazzjoni.


Hemm diversi modi kif titnaqqas it-tagħbija konjittiva fuq l-iżviluppaturi, u dan huwa fejn jidħol il-prinċipju taċ-ċokon.

Allura hawn tliet modi kif titnaqqas it-tagħbija konjittiva:

  1. Naqqas il-qafas ta 'żmien li għandhom jikkunsidraw meta jiżviluppaw karatteristika ġdida - aktar ma jkun qasir il-qafas ta' żmien, inqas tkun it-tagħbija konjittiva.
  2. Naqqas l-ammont ta 'kodiċi li fuqu jitwettaq xogħol ta' darba - inqas kodiċi - inqas tagħbija.
  3. Issimplifika l-proċess li tagħmel bidliet inkrementali għal applikazzjoni.

Tnaqqis tal-qafas ta 'żmien ta' żvilupp

Ejja mmorru lura għall-jiem meta l-metodoloġija waterfall kien l-istandard għall-proċess ta' żvilupp, u perjodi ta' żmien ta' sitt xhur sa sentejn għall-iżvilupp jew l-aġġornament ta' applikazzjoni kienu prattika komuni. Tipikament, l-inġiniera l-ewwel jaqraw dokumenti rilevanti bħar-rekwiżiti tal-prodott (PRD), id-dokument ta 'referenza tas-sistema (SRD), il-blueprint tal-arkitettura, u jibdew jgħaqqdu dawn l-affarijiet kollha flimkien f'mudell konjittiv wieħed, skont liema huma kkodifikaw. Hekk kif ir-rekwiżiti u, konsegwentement, l-arkitettura inbidlu, kellu jsir sforz serju biex it-tim kollu jiġi infurmat dwar aġġornamenti għall-mudell konjittiv. Approċċ bħal dan, fl-agħar każ, jista 'sempliċement jipparalizza x-xogħol.

L-akbar bidla fil-proċess ta 'żvilupp ta' applikazzjoni kienet l-introduzzjoni tal-metodoloġija b'aġilità. Waħda mill-karatteristiċi ewlenin tal-metodoloġija agile huwa żvilupp iterattiv. Min-naħa tiegħu, dan iwassal għal tnaqqis fit-tagħbija konjittiva fuq l-inġiniera. Minflok ma teħtieġ li t-tim tal-iżvilupp jimplimenta l-applikazzjoni f'ċiklu twil wieħed, agile approċċ jippermettilek li tiffoka fuq ammonti żgħar ta 'kodiċi li jistgħu jiġu ttestjati u skjerati malajr, filwaqt li tirċievi wkoll feedback. It-tagħbija konjittiva tal-app inbidlet minn qafas ta 'żmien ta' sitt xhur għal sentejn b'ammont kbir ta 'speċifikazzjonijiet għal żidiet ta' ġimgħatejn jew bidla fil-karatteristika mmirata għal fehim aktar imċajpar ta 'app kbira.

Iċ-ċaqliq tal-fokus minn applikazzjoni massiva għal karatteristiċi żgħar speċifiċi li jistgħu jitlestew fi sprint ta 'ġimagħtejn, b'mhux aktar minn karatteristika waħda qabel l-isprint li jmiss f'moħħu, hija bidla sinifikanti. Dan ippermetta li nżidu l-produttività tal-iżvilupp filwaqt li nnaqqsu t-tagħbija konjittiva, li kontinwament varjat.

Fil-metodoloġija agile l-applikazzjoni finali hija mistennija li tkun verżjoni kemmxejn modifikata tal-kunċett oriġinali, għalhekk il-punt finali tal-iżvilupp huwa neċessarjament ambigwu. Ir-riżultati ta' kull sprint speċifiku biss jistgħu jkunu ċari u preċiżi.

Codebases żgħar

Il-pass li jmiss fit-tnaqqis tat-tagħbija konjittiva huwa li titnaqqas il-bażi tal-kodiċi. Bħala regola, l-applikazzjonijiet moderni huma massivi - applikazzjoni robusta, intrapriża tista 'tikkonsisti f'eluf ta' fajls u mijiet ta 'eluf ta' linji ta 'kodiċi. Skont kif jiġu organizzati l-fajls, ir-rabtiet u d-dipendenzi bejn il-kodiċi u l-fajls jistgħu jkunu ovvji, jew viċeversa. Anke l-eżekuzzjoni tal-kodiċi tad-debugging innifsu tista 'tkun problematika, skont il-libreriji użati u kemm l-għodod tad-debugging jiddistingwu bejn libreriji/pakketti/moduli u kodiċi tad-dwana.

Il-bini ta 'mudell mentali li jaħdem ta' kodiċi ta 'applikazzjoni jista' jieħu ammont ta 'żmien impressjonanti, u għal darb'oħra jpoġġi piż konjittiv kbir fuq l-iżviluppatur. Dan jgħodd speċjalment għal bażijiet ta 'kodiċi monolitiċi, fejn hemm ammont kbir ta' kodiċi, li l-interazzjoni bejn il-komponenti funzjonali tagħhom mhix definita b'mod ċar, u s-separazzjoni ta 'oġġetti ta' attenzjoni ħafna drabi hija mċajpra minħabba li l-konfini funzjonali mhumiex rispettati.

Wieħed mill-modi effettivi biex titnaqqas it-tagħbija konjittiva fuq l-inġiniera huwa li timxi għal arkitettura ta 'mikroservizz. F'approċċ ta 'mikroservizz, kull servizz jiffoka fuq sett wieħed ta' karatteristiċi; filwaqt li t-tifsira tas-servizz normalment tkun definita u tinftiehem. Il-konfini ta’ servizz huma ċari wkoll – ftakar li l-komunikazzjoni ma’ servizz issir permezz ta’ API, u għalhekk id-dejta ġġenerata minn servizz wieħed tista’ faċilment tiġi mgħoddija lil ieħor.

L-interazzjoni ma 'servizzi oħra hija ġeneralment limitata għal ftit servizzi tal-utent u ftit servizzi tal-fornitur li jużaw sejħiet API sempliċi u nodfa, bħall-użu ta' REST. Dan ifisser li t-tagħbija konjittiva fuq l-inġinier titnaqqas serjament. L-akbar sfida tibqa 'fehim tal-mudell ta' interazzjoni tas-servizz u kif affarijiet bħal tranżazzjonijiet iseħħu f'diversi servizzi. Bħala riżultat, l-użu ta 'mikroservizzi jnaqqas it-tagħbija konjittiva billi jnaqqas l-ammont ta' kodiċi, jiddefinixxi konfini ċari tas-servizz, u jipprovdi fehim tar-relazzjoni bejn l-utenti u l-fornituri.

Bidliet inkrementali żgħar

L-aħħar element tal-prinċipju iċ-ċokon hija ġestjoni tal-bidla. Hija tentazzjoni partikolari għall-iżviluppaturi li jħarsu lejn il-bażi tal-kodiċi (anki forsi l-kodiċi tagħhom stess, anzjani) u jgħidu, "Dan huwa ħażin, għandna bżonn nerġgħu niktbuha kollha." Xi drabi din hija d-deċiżjoni t-tajba, u xi drabi le. Tpoġġi l-piż tal-bidla tal-mudell globali fuq it-tim tal-iżvilupp, li mbagħad iwassal għal tagħbija konjittiva massiva. Huwa aħjar għall-inġiniera li jiffokaw fuq il-bidliet li jistgħu jagħmlu matul l-isprint, sabiex ikunu jistgħu joħorġu l-funzjonalità meħtieġa fil-ħin, għalkemm gradwalment. Il-prodott finali għandu jixbah lil dak ippjanat minn qabel, iżda b'xi modifiki u ttestjar biex jaqdi l-ħtiġijiet tal-klijent.

Meta tikteb mill-ġdid porzjonijiet kbar ta 'kodiċi, xi drabi mhux possibbli li titwassal malajr il-bidla minħabba li jiddependu fis-sistema l-oħra. Sabiex tikkontrolla l-fluss tal-bidliet, tista 'tuża l-ħabi tal-karatteristiċi. Fil-prinċipju, dan ifisser li l-funzjonalità tinsab fil-produzzjoni, iżda mhix disponibbli bl-użu tas-settings tal-varjabbli tal-ambjent (env-var) jew xi mekkaniżmu ta 'konfigurazzjoni ieħor. Jekk il-kodiċi għadda mill-proċessi kollha ta 'kontroll tal-kwalità, allura jista' jispiċċa fil-produzzjoni fi stat moħbi. Madankollu, din l-istrateġija taħdem biss jekk il-karatteristika eventwalment tiġi attivata. Inkella, se biss imbarazz il-kodiċi u żżid tagħbija konjittiva li l-iżviluppatur ikollu jittratta biex ikun produttiv. Il-ġestjoni tal-bidla u l-bidliet inkrementali nfushom jgħinu biex iżommu t-tagħbija konjittiva tal-iżviluppaturi f'livell affordabbli.

L-inġiniera jridu jegħlbu ħafna diffikultajiet anke bl-introduzzjoni sempliċi ta 'funzjonalità addizzjonali. Min-naħa tal-maniġment, ikun prudenti li jitnaqqas il-piż bla bżonn fuq it-tim sabiex ikun jista’ jiffoka fuq elementi funzjonali ewlenin. Hemm tliet affarijiet li tista' tagħmel biex tgħin lit-tim ta' żvilupp tiegħek:

  1. Uża metodoloġija agilebiex jillimitaw il-qafas ta’ żmien li fih it-tim irid jiffoka fuq karatteristiċi ewlenin.
  2. Implimenta l-applikazzjoni tiegħek bħala mikroservizzi multipli. Dan se jillimita n-numru ta 'karatteristiċi li jistgħu jiġu implimentati u jsaħħaħ il-konfini li jżommu t-tagħbija konjittiva fuq ix-xogħol.
  3. Ippreferi bidliet inkrementali fuq kbar u diffiċli, ibdel biċċiet żgħar ta 'kodiċi. Uża l-ħabi tal-karatteristiċi biex timplimenta bidliet anke jekk ma jkunux viżibbli immedjatament wara li jkunu miżjuda.

Jekk tapplika l-prinċipju taċ-ċokon fix-xogħol tiegħek, it-tim tiegħek ikun ferm aktar ferħan, iffokat aħjar fuq l-implimentazzjoni tal-karatteristiċi meħtieġa, u aktar probabbli li jwettaq bidliet kwalitattivi aktar malajr. Iżda dan ma jfissirx li x-xogħol ma jistax isir aktar ikkumplikat, xi kultant, għall-kuntrarju, l-introduzzjoni ta 'funzjonalità ġdida teħtieġ il-modifika ta' diversi servizzi, u dan il-proċess jista 'jkun aktar diffiċli milli simili f'arkitettura monolitika. Fi kwalunkwe każ, il-benefiċċji li jittieħed l-approċċ taċ-ċokon huma worth it.

Tmiem l-ewwel parti.

Dalwaqt se nippubblikaw it-tieni parti tat-traduzzjoni, u issa qed nistennew il-kummenti tiegħek u nistednuk biex Open Day, li se ssir illum fit-20.00.

Sors: www.habr.com

Żid kumment