{"id":34140,"date":"2019-10-31T21:56:35","date_gmt":"2019-10-31T18:56:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\/"},"modified":"2019-10-31T21:56:35","modified_gmt":"2019-10-31T18:56:35","slug":"printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","title":{"rendered":"Principi di sviluppo delle moderne applicazioni da NGINX. Parte 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, amici. In vista del lancio del corso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u00abSviluppatore Backend in PHP\u00bb<\/a><\/noindex>, condividiamo tradizionalmente con voi la traduzione di materiale utile.<\/p>\n<p>Il software sta risolvendo sempre pi\u00f9 compiti quotidiani, diventando al contempo sempre pi\u00f9 complesso. Come ha detto una volta Marc Andreessen, esso sta assorbendo il mondo. <\/p>\n<p><img decoding=\"async\" alt=\"Principi di sviluppo delle moderne applicazioni da NGINX. Parte 1\" src=\"\/wp-content\/uploads\/928924e3036beaac518dd4a2674a8a30.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDi conseguenza, negli ultimi anni gli approcci allo sviluppo e alla consegna delle applicazioni sono cambiati radicalmente. Si sono verificati spostamenti di portata tettonica, che hanno portato all'emergere di un insieme di principi. Questi principi si sono rivelati utili nella formazione del team, nella progettazione, nello sviluppo e nella consegna della tua applicazione agli utenti finali. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I principi possono essere riassunti come segue: <i>l'applicazione deve essere piccola, orientata alla rete e avere un'architettura focalizzata sullo sviluppatore<\/i>. Basandoti su questi tre principi, puoi creare un'applicazione robusta e complessa, che pu\u00f2 essere consegnata rapidamente e in sicurezza all'utente finale, oltre a essere facilmente scalabile e ampliabile.<\/p>\n<p><img decoding=\"async\" alt=\"Principi di sviluppo delle moderne applicazioni da NGINX. Parte 1\" src=\"\/wp-content\/uploads\/9116869a53fb6cf89d92f1d507d7904f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOgnuno dei principi proposti ha diversi aspetti che discuteremo per dimostrare come ciascun principio contribuisca al raggiungimento dell'obiettivo finale, ovvero la rapida consegna di applicazioni affidabili, facili da gestire e da utilizzare. Esamineremo i principi confrontandoli con i loro opposti per chiarire cosa significhino, ad esempio, \"Assicurati di utilizzare <i>il principio della piccolezza<\/i>\u00bb.<\/p>\n<p>Ci auguriamo che questo articolo ti inviti a utilizzare i principi suggeriti per la costruzione di applicazioni moderne, che garantiranno un approccio unificato al design nel contesto di un stack tecnologico in continua crescita. <\/p>\n<p>Applicando questi principi, scoprirai di seguire le ultime tendenze nello sviluppo software, incluso l'approccio <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> allo sviluppo e alla consegna delle applicazioni, all'uso di container (ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/docker\/\">Docker<\/a><\/noindex>) e framework per l'orchestrazione dei container (ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), e all'uso di microservizi (inclusa l'Architettura a Microservizi <noindex>NGINX<\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">architettura di rete<\/a><\/noindex> per applicazioni basate su microservizi.<\/p>\n<p><b>Che cos'\u00e8 un'applicazione moderna?<\/b><\/p>\n<p>Applicazioni moderne? Stack moderno? Cosa significa esattamente \"moderno\"? <\/p>\n<p>La maggior parte degli sviluppatori ha solo una comprensione generale di cosa componga un'applicazione moderna, quindi \u00e8 necessario fornire una definizione chiara di questo concetto.<\/p>\n<p>Un'applicazione moderna supporta pi\u00f9 client, che si tratti di un'interfaccia utente realizzata con la libreria JavaScript React, di un'app mobile per Android o iOS, o di un'applicazione che si connette a un'altra tramite API. Un'applicazione moderna implica la presenza di un numero indefinito di client per cui fornisce dati o servizi.<\/p>\n<p>Un'applicazione moderna offre un'API per accedere ai dati e ai servizi richiesti. L'API deve essere invariabile e costante, piuttosto che scritta specificamente per una richiesta proveniente da un determinato client. L'API \u00e8 accessibile via HTTP(S) e fornisce accesso a tutte le funzionalit\u00e0 presenti nell'interfaccia grafica o nella CLI. <\/p>\n<p>I dati devono essere disponibili in un formato comune e compatibile, come JSON. L'API fornisce oggetti e servizi in una forma chiara e organizzata; ad esempio, un'API RESTful o GraphQL offre un'interfaccia adeguata.<\/p>\n<p>Le applicazioni moderne sono costruite su stack moderni, e uno stack moderno \u00e8 quello che supporta tali applicazioni. Questo stack consente agli sviluppatori di creare facilmente applicazioni con interfacce HTTP e punti finali API chiari. L'approccio scelto permetter\u00e0 alla tua applicazione di ricevere e inviare dati in formato JSON senza difficolt\u00e0. In altre parole, lo stack moderno \u00e8 conforme agli elementi dell'App a Dodici Fattori. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">microservizi<\/a><\/noindex>. <\/p>\n<p>Le versioni pi\u00f9 popolari di questo tipo di stack si basano su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-photoresizer\">Java<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-user-manager\">Python<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-photouploader\">Node<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-album-manager\">Ruby<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-pages\">PHP<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-content-service\">Go<\/a><\/noindex>. L'Architettura a Microservizi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-ingenious\">NGINX<\/a><\/noindex> rappresenta un esempio di stack moderno, implementato in ciascuno dei linguaggi menzionati.<\/p>\n<p>Si prega di notare che non promuoviamo esclusivamente un approccio microservizi. Molti di voi lavorano con monoliti che devono evolversi, mentre altri affrontano applicazioni SOA che si espandono e si sviluppano per diventare applicazioni microservizi. Altri stanno implementando applicazioni senza server, mentre alcuni integrano combinazioni di quanto sopra. I principi esposti nell'articolo si applicano a ciascuno di questi sistemi con alcune lievi modifiche. <\/p>\n<p><b>Principi<\/b><\/p>\n<p>Ora che abbiamo raggiunto una comprensione comune su cosa siano le applicazioni moderne e lo stack moderno, \u00e8 tempo di esplorare i principi architettonici e di sviluppo che vi saranno di grande aiuto nello sviluppo, nell'implementazione e nel supporto di un'applicazione moderna.<\/p>\n<p>Uno dei principi \u00e8 \"creare piccole applicazioni\"; chiamiamolo semplicemente <i>il principio della piccolezza<\/i>. Esistono applicazioni incredibilmente complesse, composte da un gran numero di componenti mobili. A sua volta, costruire un'applicazione da piccoli componenti discreti semplifica la sua progettazione, manutenzione e funzionalit\u00e0 complessiva. (Nota che abbiamo detto \u00absemplifica\u00bb, e non \u00abrende semplice\u00bb).<\/p>\n<p>Il secondo principio consiste nel fatto che possiamo aumentare la produttivit\u00e0 degli sviluppatori, aiutandoli a concentrarsi sulle funzionalit\u00e0 che stanno sviluppando, liberandoli al contempo dalle preoccupazioni riguardanti l'infrastruttura e il CI\/CD durante l'implementazione. Quindi, in breve, il nostro approccio <i>\u00e8 incentrato sugli sviluppatori.<\/i>.<\/p>\n<p>Infine, tutto ci\u00f2 che riguarda la tua applicazione deve essere connesso in rete. Negli ultimi 20 anni, abbiamo fatto grandi progressi verso un futuro in rete, poich\u00e9 le reti sono diventate pi\u00f9 veloci e le applicazioni pi\u00f9 complesse. Come abbiamo gi\u00e0 scoperto, un'applicazione moderna deve essere utilizzata in rete da molti diversi client. L'applicazione della logica di rete nell'architettura presenta vantaggi significativi che si abbinano bene con <i>il principio della piccolezza<\/i> e il concetto di approccio, <i>incentrato sugli sviluppatori.<\/i>.<\/p>\n<p>Se terrete a mente i principi elencati durante lo sviluppo e l'implementazione dell'applicazione, avrete un indiscutibile vantaggio nello sviluppo e nella consegna del vostro prodotto.<\/p>\n<p>Esaminiamo pi\u00f9 da vicino questi tre principi.<\/p>\n<p><b>Principio della piccolezza<\/b><\/p>\n<p>\u00c8 difficile per il cervello umano elaborare contemporaneamente una grande quantit\u00e0 di informazioni. In psicologia, il termine carico cognitivo descrive la quantit\u00e0 totale di sforzi mentali necessari per mantenere le informazioni nella memoria. Ridurre il carico cognitivo sugli sviluppatori \u00e8 una priorit\u00e0, in quanto consente loro di concentrarsi sulla risoluzione dei problemi invece di dover mantenere in mente un modello complesso dell'intera applicazione e delle funzionalit\u00e0 in fase di sviluppo. <\/p>\n<p><img decoding=\"async\" alt=\"Principi di sviluppo delle moderne applicazioni da NGINX. Parte 1\" src=\"\/wp-content\/uploads\/26df2016a46d8b82b45832fe1df9bf23.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Le applicazioni vengono decomposte per i seguenti motivi:<\/p>\n<ul>\n<li>Riduzione del carico cognitivo sugli sviluppatori;<\/li>\n<li>Accelerazione e semplificazione dei test;<\/li>\n<li>Consegna rapida delle modifiche all'applicazione.<\/li>\n<\/ul>\n<p><\/i><br \/>\nEsistono diversi modi per ridurre il carico cognitivo sugli sviluppatori, ed \u00e8 qui che entra in gioco il principio della piccolezza.<\/p>\n<p>Quindi, tre modi per ridurre il carico cognitivo:<\/p>\n<ol>\n<li>Ridurre i tempi che devono essere presi in considerazione durante lo sviluppo di una nuova funzione: pi\u00f9 breve \u00e8 il periodo, minore \u00e8 il carico cognitivo.<\/li>\n<li>Ridurre il numero di righe di codice su cui si lavora contemporaneamente: meno codice significa meno lavoro.<\/li>\n<li>Semplificare il processo di apportare modifiche incrementali all'applicazione.<\/li>\n<\/ol>\n<p>\n<b>Riduzione dei tempi di sviluppo<\/b><\/p>\n<p>Torniamo ai tempi in cui la metodologia <code>waterfall<\/code> era lo standard per il processo di sviluppo, e i tempi di sei mesi a due anni per lo sviluppo o l'aggiornamento di un'applicazione erano comuni. In genere, gli ingegneri leggevano prima i documenti pertinenti, come il documento sui requisiti del prodotto (PRD), il documento di riferimento del sistema (SRD), il piano di architettura e iniziavano a combinare tutti questi elementi in un unico modello cognitivo, secondo il quale scrivevano codice. Man mano che i requisiti e, di conseguenza, l'architettura cambiavano, era necessario fare uno sforzo considerevole per informare l'intero team degli aggiornamenti del modello cognitivo. Questo approccio, nel peggiore dei casi, poteva semplicemente paralizzare il lavoro.<\/p>\n<p>Il cambiamento pi\u00f9 significativo nel processo di sviluppo delle applicazioni \u00e8 stata l'implementazione della metodologia agile. Una delle caratteristiche fondamentali della metodologia <code>agile<\/code> \u00e8 lo sviluppo iterativo. Questo, a sua volta, riduce il carico cognitivo degli ingegneri. Invece di richiedere al team di sviluppatori di realizzare un'applicazione in un lungo ciclo, <code>agile<\/code> l'approccio consente di concentrarsi su piccole porzioni di codice che possono essere rapidamente testate e distribuite, ricevendo anche feedback. Il carico cognitivo dell'applicazione \u00e8 passato da un lasso di tempo di sei mesi a due anni, considerando l'enorme quantit\u00e0 di specifiche, a due settimane per l'aggiunta o la modifica di funzionalit\u00e0, focalizzandosi su una comprensione pi\u00f9 sfumata di un'applicazione complessa.<\/p>\n<p>Spostare l'attenzione da applicazioni massicce a piccole funzioni specifiche, che possono essere completate in uno sprint di due settimane, con uno sguardo avanti che non contempla pi\u00f9 di una funzione del prossimo sprint, rappresenta un cambiamento significativo. Questo ha consentito di aumentare la produttivit\u00e0 dello sviluppo riducendo al contempo il carico cognitivo, che oscillava costantemente.<\/p>\n<p>Nella metodologia <code>agile<\/code> si presume che l'applicazione finale sar\u00e0 una versione leggermente modificata del concetto originale, quindi il punto finale dello sviluppo \u00e8 necessariamente ambiguo. Solo i risultati di ciascun sprint specifico possono essere chiari e definiti.<\/p>\n<p><b>Piccole basi di codice<\/b><\/p>\n<p>Il passo successivo per ridurre il carico cognitivo consiste nell'alleggerire la base di codice. Di norma, le applicazioni moderne sono massicce: un'applicazione aziendale affidabile pu\u00f2 essere composta da migliaia di file e centinaia di migliaia di righe di codice. A seconda di come sono organizzati i file, le relazioni e le dipendenze tra codici e file possono essere pi\u00f9 o meno evidenti. Anche il debug dell'esecuzione del codice pu\u00f2 presentare delle difficolt\u00e0, a seconda delle librerie utilizzate e di quanto bene gli strumenti di debug separano librerie\/pacchetti\/moduli dal codice utente.<\/p>\n<p>Costruire un modello mentale funzionale del codice dell'applicazione pu\u00f2 richiedere un tempo considerevole, imponendo nuovamente un carico cognitivo significativo allo sviluppatore. Questo \u00e8 particolarmente vero per le basi di codice monolitiche, dove c'\u00e8 una grande quantit\u00e0 di codice e l'interazione tra i componenti funzionali non \u00e8 ben definita, mentre le separazioni tra gli oggetti di attenzione sono spesso sfocate, poich\u00e9 non vengono rispettati i confini funzionali. <\/p>\n<p>Uno dei modi pi\u00f9 efficaci per ridurre il carico cognitivo degli ingegneri \u00e8 passare a un'architettura a microservizi. In un approccio a microservizi, ogni servizio si concentra su un insieme specifico di funzioni; il significato del servizio \u00e8 di solito ben definito e comprensibile. I confini del servizio sono chiari: ricordate che la comunicazione con il servizio avviene tramite API, quindi i dati generati da un servizio possono essere facilmente trasferiti a un altro.<\/p>\n<p>L'interazione con altri servizi \u00e8 generalmente limitata a pochi servizi utente e a diversi servizi del fornitore, che utilizzano chiamate API semplici e pulite, ad esempio tramite REST. Questo riduce notevolmente il carico cognitivo sull'ingegnere. La sfida pi\u00f9 complessa \u00e8 comprendere il modello di interazione tra i servizi e come avvengono cose come le transazioni tra pi\u00f9 servizi. In definitiva, l'uso dei microservizi riduce il carico cognitivo, diminuendo la quantit\u00e0 di codice, delineando confini chiari per i servizi e garantendo una comprensione delle relazioni tra utenti e fornitori.<\/p>\n<p><b>Piccole modifiche incrementali<\/b><\/p>\n<p>L'ultimo elemento del principio <i>piccole cose<\/i> \u00e8 la gestione delle modifiche. Una particolare tentazione per gli sviluppatori \u00e8 esaminare il codice sorgente (anche, forse, il proprio codice pi\u00f9 vecchio) e dichiarare: \"Questo \u00e8 spazzatura, dobbiamo riscrivere tutto.\" A volte questa \u00e8 la scelta giusta, ma altre volte no. Impone al team di sviluppatori il peso di un cambiamento globale del modello, il che, a sua volta, porta a un'alta carico cognitivo. \u00c8 meglio che gli ingegneri si concentrino su modifiche che possono apportare durante lo sprint, in modo da poter rilasciare le funzionalit\u00e0 necessarie in modo tempestivo, anche se in modo graduale. Il prodotto finale dovrebbe somigliare a ci\u00f2 che era stato pianificato, ma con alcune modifiche e test per soddisfare le esigenze del cliente.<\/p>\n<p>Quando si riscrive grandi parti di codice, a volte risulta impossibile effettuare rapidamente la consegna delle modifiche, poich\u00e9 qui entrano in gioco altre dipendenze del sistema. Per controllare il flusso delle modifiche, \u00e8 possibile utilizzare la disattivazione delle funzionalit\u00e0 (feature hiding). In pratica, questo significa che la funzionalit\u00e0 esiste in produzione, ma non \u00e8 accessibile tramite impostazioni delle variabili di ambiente (env-var) o qualche altro meccanismo di configurazione. Se il codice ha superato tutti i processi di qualit\u00e0, pu\u00f2 trovarsi in produzione in uno stato nascosto. Tuttavia, questa strategia funziona solo se la funzione verr\u00e0 infine attivata. In caso contrario, si limiter\u00e0 a ingombrare il codice e a creare un carico cognitivo che lo sviluppatore dovr\u00e0 gestire per lavorare in modo produttivo. La gestione delle modifiche e le modifiche incrementali aiutano a mantenere il carico cognitivo degli sviluppatori su un livello gestibile. <\/p>\n<p>Gli ingegneri devono affrontare molte difficolt\u00e0 anche quando si tratta di implementare semplici funzionalit\u00e0 aggiuntive. \u00c8 saggio da parte della dirigenza ridurre il carico superfluo sul team, affinch\u00e9 possa concentrarsi sugli elementi chiave delle funzionalit\u00e0. Ci sono tre cose che puoi fare per supportare il tuo team di sviluppo:<\/p>\n<ol>\n<li>Utilizzare una metodologia <code>agile<\/code>, per limitare le scadenze entro le quali il team deve concentrarsi sulle funzioni chiave.<\/li>\n<li>Implementare la propria applicazione come un insieme di microservizi. Questo limiter\u00e0 il numero di funzionalit\u00e0 da implementare e rafforzer\u00e0 i confini che riducono il carico cognitivo durante il lavoro.<\/li>\n<li>Preferire modifiche incrementali a quelle grandi e ingombranti, apportando piccole modifiche al codice. Utilizzare l'hiding delle funzionalit\u00e0 per implementare cambiamenti, anche se non saranno visibili subito dopo l'aggiunta.<\/li>\n<\/ol>\n<p>\nSe applicherai il principio della piccolezza nel tuo lavoro, il tuo team sar\u00e0 molto pi\u00f9 felice, si concentrer\u00e0 meglio sull'implementazione delle funzionalit\u00e0 necessarie e avr\u00e0 maggiori probabilit\u00e0 di rilasciare rapidamente cambiamenti di qualit\u00e0. Ci\u00f2 non significa, per\u00f2, che il lavoro non possa diventare complesso; talvolta, al contrario, l'implementazione di nuove funzionalit\u00e0 richiede modifiche a diversi servizi e questo processo pu\u00f2 essere pi\u00f9 difficile rispetto a un'architettura monolitica. In ogni caso, i vantaggi derivanti dall'applicazione dell'approccio della piccolezza ne valgono la pena.<\/p>\n<p>Fine della prima parte.<\/p>\n<p>Presto pubblicheremo la seconda parte della traduzione, ma ora attendiamo i vostri commenti e vi invitiamo a <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/mJ6e\/\">giorno delle porte aperte<\/a><\/noindex>, che si terr\u00e0 oggi alle 20.00.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/452748\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00abBackend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041a\u0430\u043a \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u043a\u0430\u0437\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u043d\u0434\u0440\u0435\u0441\u0441\u0435\u043d, \u043e\u043d\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442 \u043c\u0438\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34140","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00abBackend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041a\u0430\u043a \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u043a\u0430\u0437\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u043d\u0434\u0440\u0435\u0441\u0441\u0435\u043d, \u043e\u043d\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442 \u043c\u0438\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 NGINX. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00abBackend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041a\u0430\u043a \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u043a\u0430\u0437\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u043d\u0434\u0440\u0435\u0441\u0441\u0435\u043d, \u043e\u043d\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442 \u043c\u0438\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:56:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:56:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Principi di sviluppo delle moderne applicazioni da NGINX. Parte 1 | ProHoster","description":"Ciao, amici. In vista del lancio del corso 'Sviluppatore Backend in PHP', condividiamo tradizionalmente con voi la traduzione di materiale utile. Il software risolve sempre pi\u00f9 compiti quotidiani, diventando altres\u00ec sempre pi\u00f9 complesso. Come disse una volta Marc Andreessen, esso sta assorbendo il mondo. Di conseguenza, negli ultimi anni, gli approcci allo sviluppo e alla distribuzione delle applicazioni sono cambiati seriamente.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043e\u0442 NGINX. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f. \u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00abBackend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430 PHP\u00bb, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041a\u0430\u043a \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u043a\u0430\u0437\u0430\u043b \u041c\u0430\u0440\u043a \u0410\u043d\u0434\u0440\u0435\u0441\u0441\u0435\u043d, \u043e\u043d\u043e \u043f\u043e\u0433\u043b\u043e\u0449\u0430\u0435\u0442 \u043c\u0438\u0440. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:56:35+00:00","article:modified_time":"2019-10-31T18:56:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34140","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 18:05:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:27:30","updated":"2026-01-21 18:05:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/34140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=34140"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/34140\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=34140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=34140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=34140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}