Principi per u sviluppu di applicazioni muderni da NGINX. Parte 1

Salutami amichi. In anticipazione di u lanciu di u cursu "Sviluppatore di backend in PHP", avemu tradiziunale sparte cun voi a traduzzione di materiale utile.

U software risolve più è più prublemi di ogni ghjornu, mentre chì diventa più è più cumplessu. Comu Marc Andreessen hà dettu una volta, hè cunsuma u mondu.

Principi per u sviluppu di applicazioni muderni da NGINX. Parte 1

In u risultatu, u modu chì l'applicazioni sò sviluppate è furnite hè cambiatu dramaticamente in l'ultimi anni. Il s'agissait de changements à l'échelle tectonique qui ont donné lieu à un ensemble de principes. Questi principii anu dimustratu utili à custruisce una squadra, cuncependu, sviluppà è furnisce a vostra applicazione à l'utilizatori finali.

I principii ponu esse riassunti cum'è seguente: l'applicazione deve esse chjuca, basata in u web, è avè una architettura centrata in u sviluppatore. Basendu nantu à questi trè principii, pudete creà una applicazione robusta, end-to-end chì pò esse furnita rapidamente è in modu sicuru à l'utilizatori finali, è hè facilmente scalabile è estensibile.

Principi per u sviluppu di applicazioni muderni da NGINX. Parte 1

Ciascunu di i principii pruposti hà una quantità di aspetti chì discuteremu per dimustrà cumu ogni principiu cuntribuisce à u scopu finale di furnisce rapidamente applicazioni affidabili chì sò faciuli di mantene è di utilizà. Fighjemu i principii in paragunà cù i so opposti per esse chjarificatu ciò chì significa dì: "Assicuratevi di aduprà principiu di piccula».

Speremu chì questu articulu vi incuraghjenu à aduprà i principii pruposti per custruisce applicazioni muderne chì furnisceranu un approcciu di disignu unificatu in u cuntestu di una pila di tecnulugia sempre crescente.

Appliendu sti principii, vi truverete à prufittà di l'ultime tendenze in u sviluppu di software, cumpresu u DevOps à u sviluppu di l'applicazioni è a consegna, l'usu di cuntenituri (per esempiu, Docker) è quadri di orchestrazione di container (per esempiu, Kubernetes), l'usu di i microservizi (cumpresa l'Architettura di Microservice NGINX и architettura di cumunicazione in rete per l'applicazioni di microserviziu.

Cosa hè una app muderna?

Applicazioni muderni? Pila moderna? Chì significà esattamente "mudernu"?

A maiò parte di i sviluppatori anu solu una cunniscenza basica di ciò chì hè custituitu una applicazione muderna, cusì hè necessariu di definisce chjaramente stu cuncettu.

Una applicazione muderna supporta parechji clienti, sia una interfaccia d'utilizatore cù a biblioteca React JavaScript, una applicazione mobile per Android o iOS, o una applicazione chì si cunnetta à l'altru via una API. Una applicazione muderna implica un numeru indefinitu di clienti per quale furnisce dati o servizii.

Una applicazione muderna furnisce una API per accede à i dati è servizii dumandati. L'API deve esse immutable è custanti, è micca scrittu specificamente per una dumanda specifica da un cliente specificu. L'API hè dispunibule nantu à HTTP (S) è furnisce l'accessu à tutte e funziunalità truvate in a GUI o CLI.

I dati devenu esse dispunibili in un formatu cumuni è interoperabile cum'è JSON. Una API espone l'uggetti è i servizii in una forma chjara è organizata; per esempiu, una API RESTful o GraphQL furnisce una interfaccia decente.

L'applicazioni muderne sò custruite nantu à una pila moderna, è una pila moderna hè a pila chì sustene tali applicazioni, rispettivamente. Questa pila permette à u sviluppatore di creà facilmente una applicazione cù una interfaccia HTTP è i punti finali di l'API chjaru. L'approcciu chì sceglite permetterà a vostra applicazione per accettà facilmente è mandà dati in formatu JSON. In altri palori, a pila muderna currisponde à l'elementi di l'Applicazione Dodici Fattori per microservices.

Versioni populari di stu tipu di stack sò basati Java, pitone, Nodu, Ruby, PHP и Go. Architettura di microserviziu NGINX rapprisenta un esempiu di una pila muderna implementata in ognuna di e lingue citate.

Per piacè nutate chì ùn avemu micca favuritu un approcciu puramente microservizi. Parechji di voi sò travagliendu cù monoliti chì anu bisognu di evoluzione, mentri àutri si trattanu di l'applicazioni SOA chì si sviluppanu è evoluzione per diventà applicazioni di microserviziu. Ancora altri si movenu versu l'applicazioni senza servitore, è alcuni implementanu cumminazzioni di sopra. I principii delineati in questu articulu s'applicanu à ognunu di sti sistemi cù solu uni pochi di mudificazioni minori.

Principi

Avà chì avemu una cunniscenza basica di ciò chì sò una applicazione muderna è una pila muderna, hè ora di tuffà in i principii di l'architettura è di u disignu chì vi serviranu bè in cuncepimentu, implementazione è mantene una applicazione muderna.

Unu di i principii hè "custruisce picculi app", chjamemu solu u principiu di a piccula. Ci sò appricazzioni incredibbilmente cumplessi chì anu assai parti in muvimentu. A so volta, a custruzzione di una applicazione da cumpunenti chjuchi è discreti facilita a cuncepimentu, u mantenimentu è l'usu generale. (Nota chì avemu dettu "a rende simplice" è micca "a rende simplice").

U sicondu principiu hè chì pudemu aumentà a produtividade di u sviluppatore aiutendu à fucalizza nantu à e funzioni chì sviluppanu, mentre li liberate da a preoccupazione di l'infrastruttura è CI / CD durante l'implementazione. Dunque, in poche parole, u nostru approcciu orientatu à i sviluppatori.

Infine, tuttu ciò chì riguarda a vostra applicazione deve esse cunnessu à a reta. In l'ultimi 20 anni, avemu avanzatu assai versu un futuru in rete cum'è e rete sò diventate più veloci è l'applicazioni sò diventate più cumplesse. Comu avemu digià vistu, una applicazione muderna deve esse aduprata in una reta da parechji clienti diffirenti. L'applicazione di u pensamentu di a rete à l'architettura hà benefici significativi chì si adattanu bè u principiu di a piccula è u cuncettu di l'approcciu, orientatu à i sviluppatori.

Se tenete questi principii in mente quandu cuncepite è implementate una applicazione, averete un vantaghju distintu in u sviluppu è a consegna di u vostru pruduttu.

Fighjemu sti trè principii in più detail.

U principiu di a piccula

Hè difficiuli per u cervellu umanu per percive una grande quantità di informazioni in una volta. In a psiculugia, u terminu carica cognitiva si riferisce à a quantità tutale di sforzu mentale necessariu per mantene l'infurmazioni in memoria. A riduzzione di a carica cognitiva nantu à i sviluppatori hè una priorità perchè ponu fucalizza nantu à risolve u prublema invece di mantene u mudellu cumplessu attuale di tutta l'applicazione è e funzioni sviluppate in a so testa.

Principi per u sviluppu di applicazioni muderni da NGINX. Parte 1

L'applicazioni sò scomposte per i seguenti motivi:

  • Reduce a carica cognitiva nantu à i sviluppatori;
  • Accelerazione è simplificazione di teste;
  • Consegna rapida di cambiamenti à l'applicazione.


Ci hè parechje manere di riduce a carica cognitiva nantu à i sviluppatori, è questu hè induve u principiu di a piccula entra in ghjocu.

Dunque, trè manere di riduce a carica cognitiva:

  1. Reduce u marcu di tempu chì anu da cunsiderà quandu si sviluppanu una nova funzione - u più cortu u quadru di tempu, più bassa a carica cognitiva.
  2. Reduce a quantità di codice chì hè travagliatu à tempu - menu codice - menu carica.
  3. Simplificà u prucessu di fà cambiamenti incrementali à a vostra applicazione.

Tempi di sviluppu ridotti

Riturnemu à i tempi quandu a metodulugia waterfall era u standard per u prucessu di sviluppu, è i tempi di sei mesi à dui anni per sviluppà o aghjurnà una applicazione eranu pratica cumuni. Di genere, l'ingegneri lighjeranu prima i ducumenti pertinenti cum'è i requisiti di u produttu (PRD), u documentu di riferimentu di u sistema (SRD), u pianu di l'architettura, è cumincianu à integrà tutte queste cose inseme in un mudellu cognitivu secondu chì anu scrittu codice. Siccomu i requisiti, è dunque l'architettura, cambiavanu, sforzi significativi anu da esse fattu per mantene a squadra sana infurmata nantu à l'aghjurnamenti di u mudellu cognitivu. In u peghju casu, questu approcciu puderia simpricimenti paralizà u travagliu.

U più grande cambiamentu in u prucessu di sviluppu di l'applicazione hè stata l'intruduzione di a metodulugia agile. Una di e caratteristiche principali di a metodulugia agile - Questu hè u sviluppu iterativu. A so volta, questu porta à una riduzione di a carica cognitiva nantu à l'ingegneri. Invece di dumandà à u squadra di sviluppu per implementà l'applicazione in un ciclu longu, agile L'approcciu vi permette di fucalizza nantu à picculi quantità di codice chì ponu esse rapidamente pruvati è implementati, mentre chì ancu riceve feedback. A carica cognitiva di una applicazione hè cambiata da un marcu di tempu di sei mesi à dui anni, cù una quantità enorme di specificazioni, à un aghjuntu o un cambiamentu di funzioni di duie settimane, destinatu à una comprensione più diffusa di una grande applicazione.

Trasferendu l'enfasi da una applicazione massiva à e piccule caratteristiche specifiche chì ponu esse cumplette in un sprint di duie settimane, fighjendu micca più di una funzione da u prossimu sprint in mente hè un cambiamentu significativu. Questu hà permessu di aumentà a produtividade di u sviluppu riducendu a carica cognitiva, chì era constantemente fluttuante.

In metodulugia agile l'applicazione finale hè prevista per esse una versione ligeramente mudificata di u cuncettu originale, cusì u puntu di sviluppu finali hè necessariamente ambiguu. Solu i risultati di ogni sprint specificu ponu esse chjaru è precisu.

Picculi basi di codice

U prossimu passu per riduce a carica cognitiva hè di riduce a basa di codice. Di genere, l'applicazioni muderne sò massive - una robusta applicazione di l'impresa pò esse composta da millaie di schedari è centinaie di millaie di linee di codice. Sicondu l'urganizazione di i schedari, i cunnessione è e dependenzii trà u codice è i schedari ponu esse o micca evidenti. Ancu debugging l'esekzione di u codice stessu pò esse problematicu, secondu e biblioteche aduprate è quantu bè l'arnesi di debugging si differenzianu trà biblioteche / pacchetti / moduli è u codice d'utilizatore.

Custruì un mudellu mentale di travagliu di u codice di l'applicazione pò piglià una quantità significativa di tempu, di novu mette una grande carica cognitiva nantu à u sviluppatore. Questu hè sopratuttu veru per i codebases monolitichi, induve ci hè una grande quantità di codice, l'interazzione trà i cumpunenti funziunali ùn sò micca chjaramente definiti, è a siparazione di l'uggetti di l'attenzione hè spessu sfondata perchè e fruntiere funziunali ùn sò micca rispettate.

Un modu efficace per riduce a carica cognitiva nantu à l'ingegneri hè di passà à una architettura di microservizi. In un approcciu di microserviziu, ogni serviziu fucalizza nantu à un settore di funzioni; u significatu di u serviziu hè di solitu definitu è ​​capiscenu. I cunfini di u serviziu sò ancu chjaru - ricordate chì a cumunicazione cù u serviziu hè realizatu cù una API, cusì e dati generati da un serviziu pò esse facilmente trasferitu à un altru.

L'interazzione cù altri servizii sò generalmente limitati à uni pochi di servizii d'utilizatori è à uni pochi di servizii di fornitore chì utilizanu chjamati API simplici è puliti, cum'è REST. Questu significa chì a carica cognitiva nantu à l'ingegnere hè seriamente ridutta. U più grande sfida resta capisce u mudellu di interazzione di serviziu è cumu e cose cum'è e transazzione passanu in parechji servizii. In ultimamente, l'usu di i microservizi riduce a carica cognitiva riducendu a quantità di codice, definendu frontiere di serviziu chjaru è furnisce una visione di a relazione utilizatore-furnitore.

Picculi cambiamenti incrementali

L'ultimu elementu di u principiu un pocu hè a gestione di u cambiamentu. Hè soprattuttu tentativu per i sviluppatori di guardà una basa di codice (ancu forsi u so propiu codice più anticu) è dicenu: "Questu hè una merda, avemu bisognu di riscrive tuttu questu". A volte hè a decisione ghjusta, è à volte ùn hè micca. Pone u pesu di i cambiamenti di mudelli glubale nantu à a squadra di sviluppu, chì à u turnu risultatu in una carica cognitiva massiva. Hè megliu per l'ingegneri per fucalizza nantu à i cambiamenti ch'elli ponu fà durante u sprint, in modu chì ponu esse implementate a funziunalità necessaria in una manera puntuale, anche gradualmente. U pruduttu finali deve s'assumiglia à u pre-pianificatu, ma cù qualchì mudificazione è teste per adattà à i bisogni di u cliente.

Quandu si riscrive grandi porzioni di codice, à volte hè impussibile di furnisce rapidamente un cambiamentu perchè altre dipendenze di u sistema entranu in ghjocu. Per cuntrullà u flussu di cambiamenti, pudete aduprà a funzione oculta. Bastamente, questu significa chì a funziunalità hè quì in a produzzione, ma ùn hè micca dispunibule per mezu di paràmetri di variabili di l'ambiente (env-var) o qualsiasi altru mecanismu di cunfigurazione. Se u codice hà passatu tutti i prucessi di cuntrollu di qualità, pò finisce in produzzione in un statu oculatu. Tuttavia, sta strategia funziona solu se a funzione hè eventualmente attivata. Altrimenti, solu sbulicà u codice è aghjunghje una carica cognitiva chì u sviluppatore duverà affruntà per esse pruduttivu. A gestione di u cambiamentu è i cambiamenti incrementali stessi aiutanu à mantene a carica cognitiva di i sviluppatori à un livellu accessibile.

L'ingegneri anu da superà parechje difficultà ancu quandu implementanu solu funziunalità supplementari. Saria prudente per a gestione per riduce a carica di travagliu innecessariu nantu à a squadra in modu chì pò fucalizza nantu à elementi chjave di funziunalità. Ci hè trè cose chì pudete fà per aiutà u vostru squadra di sviluppu:

  1. Utilizà a metodulugia agile, per limità u marcu di tempu in quale a squadra deve fucalizza nantu à e caratteristiche chjave.
  2. Implementa a vostra applicazione cum'è parechji microservizii. Questu limiterà u numeru di funzioni introdutte è rinfurzà e fruntiere chì cuntenenu a carica cognitiva mentre travaglia.
  3. Preferite i cambiamenti incrementali à quelli grandi, ingombranti, cambiate picculi pezzi di codice. Aduprate a funzione oculta per implementà cambiamenti ancu s'ellu ùn saranu micca visibili immediatamente dopu chì sò stati aghjuntu.

Sè applicà u principiu di a piccula in u vostru travagliu, u vostru squadra serà assai più felice, megliu focu annantu à furnisce e funzioni necessarie, è più prubabile di sparghje cambiamenti di qualità più veloce. Ma questu ùn significa micca chì u travagliu ùn pò esse più cumplessu; qualchì volta, à u cuntrariu, l'intruduzioni di una nova funziunalità esige mudificazione di parechji servizii è stu prucessu pò esse più cumplessu chè un simile in una architettura monolitica. In ogni casu, i benefizii di l'usu di l'approcciu valenu un pocu.

Fine di a prima parte.

Prestu publicheremu a seconda parte di a traduzzione, ma avà aspettemu i vostri cumenti è vi invitemu à Open Day, chì si ferà oghje à 20.00.

Source: www.habr.com

Add a comment