Mga prinsipyo sa pagpalambo sa modernong mga aplikasyon gikan sa NGINX. Bahin 1

Hello mga higala. Sa pagpaabot sa paglusad sa kurso PHP backend developer, tradisyonal nga ipaambit kanimo ang paghubad sa mapuslanon nga materyal.

Ang software nagsulbad sa mas daghang adlaw-adlaw nga buluhaton, samtang nahimong mas komplikado. Sama sa giingon kaniadto ni Marc Andressen, gikonsumo niini ang kalibutan.

Mga prinsipyo sa pagpalambo sa modernong mga aplikasyon gikan sa NGINX. Bahin 1

Ingon usa ka sangputanan, ang paagi sa paghimo ug paghatud sa mga aplikasyon nagbag-o pag-ayo sa miaging pipila ka tuig. Kini mga pagbalhin sa tectonic scale nga miresulta sa usa ka hugpong sa mga prinsipyo. Kini nga mga prinsipyo napamatud-an nga makatabang sa paghimo sa team, pagdesinyo, pag-develop, ug paghatud sa imong aplikasyon sa mga end user.

Ang mga prinsipyo mahimong i-summarize sama sa mosunod: ang aplikasyon kinahanglan nga gamay, web-based, ug adunay developer-centric nga arkitektura. Uban niining tulo ka mga prinsipyo sa hunahuna, makahimo ka og usa ka lig-on, katapusan-sa-katapusan nga aplikasyon nga mahimong dali ug luwas nga ihatod ngadto sa katapusan nga tiggamit, ug dali nga masukod ug mapalapad.

Mga prinsipyo sa pagpalambo sa modernong mga aplikasyon gikan sa NGINX. Bahin 1

Ang matag usa sa gisugyot nga mga prinsipyo adunay daghang mga aspeto nga atong hisgutan aron ipakita kung giunsa ang matag prinsipyo nakatampo sa katapusang katuyoan, nga mao ang paspas nga paghatud sa kasaligan nga mga aplikasyon nga dali nga mapadayon ug magamit. Atong tan-awon ang mga prinsipyo nga may kalabotan sa ilang mga kaatbang aron matin-aw kung unsa ang gipasabut niini, ingon, "Siguruha nga imong gigamit prinsipyo sa pagkagamay".

Kami nanghinaut nga kini nga artikulo magdasig kanimo sa paggamit sa gisugyot nga mga prinsipyo alang sa pagtukod sa modernong mga aplikasyon, nga maghatag sa usa ka hiniusa nga pamaagi sa pagdesinyo sa konteksto sa usa ka kanunay nga nagtubo nga teknolohiya stack.

Pinaagi sa paggamit niini nga mga prinsipyo, imong makita ang imong kaugalingon nga nagpahimulos sa pinakabag-o nga mga uso sa software development, lakip na ang DevOps sa pagpalambo ug paghatud sa mga aplikasyon, ang paggamit sa mga sudlanan (pananglitan, Docker) ug container orchestration frameworks (pananglitan, Kubernetes), ang paggamit sa mga microservice (lakip ang Microservice Architecture NGINX ΠΈ arkitektura sa komunikasyon sa network alang sa mga aplikasyon sa microservice.

Unsa ang usa ka modernong aplikasyon?

Modernong mga aplikasyon? Modernong stack? Unsa man gyud ang gipasabot sa "moderno"?

Kadaghanan sa mga nag-develop adunay usa lamang ka kinatibuk-ang ideya kung unsa ang gilangkuban sa usa ka modernong aplikasyon, mao nga kinahanglan nga tin-aw nga ipasabut kini nga konsepto.

Ang usa ka modernong app nagsuporta sa daghang mga kliyente, bisan kini usa ka React JavaScript library user interface, usa ka Android o iOS mobile app, o usa ka app nga nagkonektar sa laing API. Ang usa ka modernong aplikasyon nagpasabot sa usa ka walay tino nga gidaghanon sa mga kliyente diin kini naghatag og data o mga serbisyo.

Ang usa ka modernong aplikasyon naghatag usa ka API aron ma-access ang gihangyo nga datos ug serbisyo. Ang API kinahanglan nga dili mausab ug makanunayon, ug dili espesipikong gisulat alang sa usa ka piho nga hangyo gikan sa usa ka piho nga kliyente. Ang API anaa sa HTTP(S) ug naghatag ug access sa tanang gamit nga anaa sa GUI o CLI.

Ang datos kinahanglang anaa sa kasagarang gidawat, interoperable nga pormat sama sa JSON. Ang API nagbutyag sa mga butang ug serbisyo sa limpyo, organisado nga paagi, sama sa RESTful API o GraphQL nga naghatag ug desente nga interface.

Ang modernong mga aplikasyon gitukod sa modernong stack, ug ang modernong stack mao ang stack nga nagsuporta sa maong mga aplikasyon, matag usa. Gitugotan sa kini nga stack ang usa ka developer nga dali nga makahimo usa ka aplikasyon nga adunay interface sa HTTP ug tin-aw nga mga endpoint sa API. Ang gipili nga pamaagi magtugot sa imong aplikasyon nga dali nga makadawat ug magpadala mga datos sa JSON format. Sa laing pagkasulti, ang modernong stack katumbas sa mga elemento sa Twelve-Factor Application for microservices.

Ang mga sikat nga bersyon niini nga matang sa stack gibase sa Java, Python, binurotan, hubag, Ruby, PHP ΠΈ Go. Microservice nga Arkitektura NGINX nagrepresentar sa usa ka pananglitan sa usa ka modernong stack nga gipatuman sa matag usa sa gihisgutan nga mga pinulongan.

Palihug timan-i nga wala kami nagpasiugda sa usa ka eksklusibo nga pamaagi sa microservice. Daghan kaninyo ang nagtrabaho sa mga monolith nga kinahanglan nga molambo, samtang ang uban nag-atubang sa mga aplikasyon sa SOA nga nagkalapad ug nag-uswag aron mahimong mga aplikasyon sa microservice. Ang uban pa nagpadayon sa mga aplikasyon nga wala’y server, ug ang uban nagpatuman sa mga kombinasyon sa naa sa taas. Ang mga prinsipyo nga gilatid sa artikulo magamit sa matag usa niini nga mga sistema nga adunay pipila lamang ka ginagmay nga mga kausaban.

Mga Prinsipyo

Karon nga kita adunay usa ka komon nga pagsabot kon unsa ang usa ka modernong aplikasyon ug modernong stack mao ang, kini ang panahon sa pag-dive ngadto sa arkitektura ug kalamboan nga mga prinsipyo nga makaalagad kaninyo sa maayo sa pagpalambo, pagpatuman, ug pagmintinar sa usa ka modernong aplikasyon.

Usa sa mga prinsipyo morag "maghimo ug gagmay nga mga aplikasyon", tawgon lang nato kini prinsipyo sa pagkagamay. Adunay dili katuohan nga komplikado nga mga aplikasyon nga gilangkoban sa daghang naglihok nga mga bahin. Sa baylo, ang paghimo og aplikasyon gikan sa gagmay, discrete nga mga sangkap makapasayon ​​sa pagdesinyo, pagmentinar, ug pagtrabaho niini sa kinatibuk-an. (Timan-i nga giingon namon nga "gipasimple" dili "gipasimple").

Ang ikaduhang prinsipyo mao nga madugangan nato ang produktibidad sa developer pinaagi sa pagtabang kanila sa pag-focus sa mga feature nga ilang gipalambo, samtang gipalingkawas sila gikan sa imprastraktura ug mga kabalaka sa CI/CD atol sa pagpatuman. Busa, sa laktud nga pagkasulti, ang among pamaagi naka-focus sa mga developers.

Sa katapusan, ang tanan bahin sa imong aplikasyon kinahanglan nga konektado sa network. Sa milabay nga 20 ka tuig, nakahimo kami ug dagkong mga lakang padulong sa umaabot nga network samtang ang mga network nahimong mas paspas ug ang mga aplikasyon mas komplikado. Sama sa nakita na nato, ang usa ka modernong aplikasyon kinahanglang gamiton sa usa ka network sa daghang lain-laing mga kliyente. Ang pagpadapat sa panghunahuna sa network sa arkitektura adunay hinungdanon nga mga benepisyo nga maayo prinsipyo sa pagkagamay ug ang konsepto sa pamaagi, oriented sa developer.

Kung ibutang nimo kini nga mga prinsipyo sa imong hunahuna sa pagdesinyo ug pagpatuman sa usa ka aplikasyon, makabaton ka usa ka dili ikalimod nga bentaha sa pagpauswag ug paghatud sa imong produkto.

Atong tan-awon kining tulo ka mga prinsipyo sa mas detalyado.

Prinsipyo sa pagkagamay

Lisud alang sa utok sa tawo nga masabtan ang daghang impormasyon sa samang higayon. Sa psychology, ang termino nga cognitive load nagtumong sa kinatibuk-ang kantidad sa mental nga paningkamot nga gikinahanglan aron mahuptan ang impormasyon sa memorya. Ang pagkunhod sa cognitive load sa mga developers usa ka prayoridad tungod kay kini nagtugot kanila sa pag-focus sa pagsulbad sa problema imbis nga ipadayon ang kasamtangan nga komplikado nga modelo sa tibuok nga aplikasyon ug ang mga bahin nga gipalambo sa ilang ulo.

Mga prinsipyo sa pagpalambo sa modernong mga aplikasyon gikan sa NGINX. Bahin 1

Ang mga aplikasyon madunot tungod sa mosunod nga mga rason:

  • Ang pagkunhod sa cognitive load sa mga developers;
  • Pagpadali ug pagpayano sa pagsulay;
  • Dali nga pagpadala sa mga pagbag-o sa aplikasyon.


Adunay ubay-ubay nga mga paagi aron makunhuran ang cognitive load sa mga developer, ug kini diin ang prinsipyo sa pagkagamay moabut sa pagdula.

Mao nga ania ang tulo nga mga paagi aron makunhuran ang pagkarga sa panghunahuna:

  1. Bawasan ang time frame nga kinahanglan nilang tagdon kung maghimo usa ka bag-ong feature - ang mas mubo nga time frame, mas ubos ang cognitive load.
  2. Bawasan ang gidaghanon sa code diin ang usa ka higayon nga trabaho gihimo - gamay nga code - gamay nga load.
  3. Pasimpleha ang proseso sa paghimo og dugang nga mga pagbag-o sa usa ka aplikasyon.

Pagkunhod sa time frame sa pag-uswag

Balikan nato ang mga adlaw nga ang metodolohiya waterfall mao ang sumbanan alang sa proseso sa pagpalambo, ug ang mga time frame nga unom ka bulan ngadto sa duha ka tuig alang sa pagpalambo o pag-update sa usa ka aplikasyon kay kasagarang praktis. Kasagaran, ang mga inhenyero magbasa una sa mga may kalabutan nga mga dokumento sama sa mga kinahanglanon sa produkto (PRD), dokumento sa reference sa sistema (SRD), blueprint sa arkitektura, ug magsugod sa paghiusa sa tanan niini nga mga butang sa usa ka modelo sa panghunahuna, sumala sa ilang gi-code. Ingon nga ang mga kinahanglanon ug, sa ingon, ang arkitektura nabag-o, usa ka seryoso nga paningkamot ang kinahanglan buhaton aron ipahibalo sa tibuuk nga grupo bahin sa mga update sa modelo sa panghunahuna. Ang ingon nga pamaagi, sa pinakagrabe, makaparalisar lang sa trabaho.

Ang pinakadako nga pagbag-o sa proseso sa pagpalambo sa aplikasyon mao ang pagpaila sa agile methodology. Usa sa mga nag-unang bahin sa metodolohiya agile usa ka iterative development. Sa baylo, kini nagdala sa usa ka pagkunhod sa cognitive load sa mga inhenyero. Imbis nga i-require ang development team nga ipatuman ang aplikasyon sa usa ka taas nga siklo, agile Ang pamaagi nagtugot kanimo sa pag-focus sa gamay nga kantidad sa code nga dali nga masulayan ug ma-deploy, samtang makadawat usab og feedback. Ang cognitive load sa app mibalhin gikan sa unom ka bulan ngadto sa duha ka tuig nga time frame nga adunay daghang specs alang sa duha ka semana nga pagdugang o pagbag-o sa feature nga nagpunting sa mas hanap nga pagsabot sa usa ka dako nga app.

Ang pagbalhin sa pokus gikan sa usa ka dako nga aplikasyon ngadto sa piho nga gagmay nga mga bahin nga mahimong makompleto sa usa ka duha ka semana nga sprint, nga wala’y labaw sa usa ka bahin sa unahan sa sunod nga sprint sa hunahuna, usa ka hinungdanon nga pagbag-o. Gitugotan kami niini nga madugangan ang pagka-produktibo sa pag-uswag samtang gikunhuran ang pagkarga sa panghunahuna, nga kanunay nga nag-usab-usab.

Sa metodolohiya agile ang katapusan nga aplikasyon gilauman nga usa ka gamay nga giusab nga bersyon sa orihinal nga konsepto, mao nga ang katapusan nga punto sa kalamboan mao ang kinahanglan nga dili klaro. Ang mga resulta lamang sa matag piho nga sprint mahimong klaro ug tukma.

Gamay nga mga codebase

Ang sunod nga lakang sa pagkunhod sa cognitive load mao ang pagpakunhod sa code base. Ingon sa usa ka lagda, ang mga modernong aplikasyon kay dako - usa ka lig-on, negosyo nga aplikasyon mahimong naglangkob sa liboan ka mga file ug gatusan ka libo nga mga linya sa code. Depende kung giunsa pag-organisar ang mga file, ang mga link ug dependency tali sa code ug mga file mahimong klaro, o vice versa. Bisan ang debugging code execution mismo mahimong problemado, depende sa mga library nga gigamit ug kung unsa ka maayo ang pag-debug sa mga himan sa pag-ila tali sa mga library/packages/modules ug custom code.

Ang paghimo sa usa ka nagtrabaho nga modelo sa pangisip sa code sa usa ka aplikasyon mahimo’g magkinahanglan usa ka impresibo nga oras, ug sa makausa pa magbutang usa ka dako nga palas-anon sa panghunahuna sa nag-develop. Kini mao ang ilabi na nga tinuod alang sa monolithic code base, diin adunay usa ka dako nga kantidad sa code, ang interaksyon tali sa mga functional nga mga sangkap nga dili tin-aw nga gihubit, ug ang pagbulag sa mga butang sa pagtagad sa kasagaran hanap tungod kay ang functional nga mga utlanan wala gitahud.

Usa sa epektibo nga mga paagi aron makunhuran ang cognitive load sa mga inhenyero mao ang pagbalhin sa usa ka arkitektura sa microservice. Sa usa ka pamaagi sa microservice, ang matag serbisyo nagpunting sa usa ka hugpong sa mga bahin; samtang ang kahulogan sa serbisyo kasagaran gihubit ug masabtan. Ang mga utlanan sa usa ka serbisyo klaro usab - hinumdomi nga ang komunikasyon sa usa ka serbisyo gihimo pinaagi sa usa ka API, busa ang datos nga nahimo sa usa ka serbisyo dali nga mapasa sa lain.

Ang interaksyon sa ubang mga serbisyo kasagarang limitado sa pipila ka mga serbisyo sa tiggamit ug pipila ka mga serbisyo sa provider nga naggamit sa yano ug limpyo nga mga tawag sa API, sama sa paggamit sa REST. Kini nagpasabot nga ang cognitive load sa engineer seryoso nga pagkunhod. Ang pinakadako nga hagit nagpabilin nga masabtan ang modelo sa interaksyon sa serbisyo ug kung giunsa ang mga butang sama sa mga transaksyon mahitabo sa daghang mga serbisyo. Ingon usa ka sangputanan, ang paggamit sa mga microservice makapakunhod sa cognitive load pinaagi sa pagkunhod sa kantidad sa code, pagtino sa tin-aw nga mga utlanan sa serbisyo, ug paghatag usa ka pagsabut sa relasyon tali sa mga tiggamit ug mga provider.

Gamay nga incremental nga mga pagbag-o

Ang katapusan nga elemento sa prinsipyo pagkagamay mao ang pagdumala sa pagbag-o. Kini usa ka partikular nga tintasyon alang sa mga developers nga tan-awon ang base sa code (bisan ang ilang kaugalingon, mas karaan nga code) ug moingon, "Kini nga crap, kinahanglan natong isulat pag-usab kining tanan." Usahay kini ang husto nga desisyon, ug usahay dili. Gibutang niini ang palas-anon sa pagbag-o sa modelo sa kalibutan sa tim sa pagpauswag, nga sa baylo nagdala sa daghang pagkarga sa panghunahuna. Mas maayo alang sa mga inhenyero nga mag-focus sa mga pagbag-o nga ilang mahimo sa panahon sa sprint, aron ilang ma-roll out ang gikinahanglan nga pagpaandar sa tukma sa panahon nga paagi, bisan sa hinay-hinay. Ang katapusan nga produkto kinahanglan nga mahisama sa giplano nang daan, apan adunay pipila nga mga pagbag-o ug pagsulay nga mohaum sa mga panginahanglanon sa kliyente.

Kung gisulat pag-usab ang daghang mga bahin sa code, usahay dili posible nga dali nga ihatud ang pagbag-o tungod kay ang ubang mga dependency sa sistema nagdula. Aron makontrol ang dagan sa mga pagbag-o, mahimo nimong gamiton ang pagtago sa feature. Sa prinsipyo, kini nagpasabot nga ang pag-andar anaa sa produksyon, apan kini dili magamit gamit ang environment variable settings (env-var) o uban pang mekanismo sa configuration. Kung ang code nakapasa sa tanan nga mga proseso sa pagkontrol sa kalidad, mahimo’g matapos kini sa produksiyon sa usa ka tinago nga kahimtang. Bisan pa, kini nga estratehiya magamit lamang kung ang bahin sa katapusan mahimo. Kung dili, kini mag-clutter lang sa code ug makadugang usa ka cognitive load nga kinahanglan atubangon sa developer aron mahimong produktibo. Ang pagdumala sa pagbag-o ug mga incremental nga mga pagbag-o mismo makatabang sa pagpadayon sa cognitive load sa mga developer sa usa ka barato nga lebel.

Kinahanglang mabuntog sa mga inhenyero ang daghang mga kalisud bisan sa yano nga pagpaila sa dugang nga pagpaandar. Sa bahin sa pagdumala, maayo nga pakunhuran ang wala kinahanglana nga palas-anon sa team aron kini makapunting sa mga nag-unang elemento sa pagpaandar. Adunay tulo ka butang nga imong mahimo aron matabangan ang imong development team:

  1. Gamit ug metodolohiya agilearon limitahan ang time frame diin ang team kinahanglan mag-focus sa mga importanteng bahin.
  2. Ipatuman ang imong aplikasyon isip daghang microservices. Limitahan niini ang gidaghanon sa mga bahin nga mahimong ipatuman ug mapalig-on ang mga utlanan nga nagpugong sa pagkarga sa panghunahuna sa trabaho.
  3. Pilia ang mga incremental nga mga pagbag-o kaysa dako ug dili magamit, usba ang gagmay nga mga piraso sa code. Gamita ang pagtago sa feature aron ipatuman ang mga pagbag-o bisan kung dili dayon kini makita pagkahuman idugang.

Kung imong ipadapat ang prinsipyo sa pagkagamay sa imong trabaho, ang imong team mahimong mas malipayon, mas maayo nga naka-focus sa pagpatuman sa gikinahanglan nga mga bahin, ug mas lagmit nga mohimo sa mga kausaban sa kalidad nga mas paspas. Apan wala kini magpasabut nga ang trabaho dili mahimong mas komplikado, usahay, sa sukwahi, ang pagpaila sa bag-ong pag-andar nagkinahanglan sa pagbag-o sa daghang mga serbisyo, ug kini nga proseso mahimong mas lisud kay sa susama sa usa ka monolithic nga arkitektura. Sa bisan unsa nga kaso, ang mga benepisyo sa pagkuha sa gamay nga pamaagi takus niini.

Katapusan sa unang bahin.

Sa dili madugay among imantala ang ikaduhang bahin sa hubad, ug karon kami naghulat sa imong mga komento ug nagdapit kanimo sa Bukas nga Adlaw, nga mahitabo karong 20.00.

Source: www.habr.com

Idugang sa usa ka comment