{"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\/nl\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","title":{"rendered":"Principes van het ontwikkelen van moderne applicaties door NGINX. Deel 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo vrienden. Ter voorbereiding op de lancering van de cursus <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u2018Backend ontwikkelaar in PHP\u2019<\/a><\/noindex>, delen we traditiegetrouw een vertaling van nuttig materiaal met jullie.<\/p>\n<p>Software lost steeds meer alledaagse problemen op, terwijl het steeds complexer wordt. Zoals Marc Andreessen ooit zei, het \u2018eet\u2019 de wereld op. <\/p>\n<p><img decoding=\"async\" alt=\"Principes van het ontwikkelen van moderne applicaties door NGINX. Deel 1\" src=\"\/wp-content\/uploads\/928924e3036beaac518dd4a2674a8a30.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAls gevolg hiervan zijn de benaderingen voor de ontwikkeling en levering van applicaties de laatste jaren aanzienlijk veranderd. Dit waren verschuivingen van tektonische omvang die hebben geleid tot de opkomst van een set principes. Deze principes bleken nuttig bij het vormen van teams, het ontwerpen, ontwikkelen en leveren van jullie applicatie aan de eindgebruikers. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>De principes kunnen als volgt worden samengevat: <i>de applicatie moet klein, netwerkt en ontwikkelaarsgericht zijn<\/i>. Op basis van deze drie principes kun je een betrouwbare, uitgebreide applicatie bouwen die snel en veilig aan de eindgebruiker kan worden geleverd, en die ook gemakkelijk kan worden opgeschaald en uitgebreid.<\/p>\n<p><img decoding=\"async\" alt=\"Principes van het ontwikkelen van moderne applicaties door NGINX. Deel 1\" src=\"\/wp-content\/uploads\/9116869a53fb6cf89d92f1d507d7904f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nElk van de voorgestelde principes heeft verschillende aspecten die we zullen bespreken om te laten zien hoe elk principe bijdraagt aan het einddoel: het snel leveren van betrouwbare applicaties die eenvoudig te onderhouden en te gebruiken zijn. We zullen de principes in vergelijking met hun tegenstellingen bekijken om te verduidelijken wat het betekent om bijvoorbeeld \u2018Zorg ervoor dat je het <i>kleinheidsprincipe toepast\u2019<\/i>\u00bb.<\/p>\n<p>We hopen dat dit artikel je aanmoedigt om de voorgestelde principes voor moderne applicaties toe te passen, die een eendrachtige benadering van het ontwerp zullen waarborgen in de context van de voortdurend groeiende technologie-stack. <\/p>\n<p>Door deze principes toe te passen, zul je merken dat je de nieuwste trends in softwareontwikkeling volgt, inclusief de benadering <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> voor de ontwikkeling en levering van applicaties, het gebruik van containers (bijvoorbeeld <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/docker\/\">Docker<\/a><\/noindex>) en frameworks voor het orkestreren van containers (bijvoorbeeld <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), het gebruik van microservices (inclusief Microservices Architectuur <noindex>NGINX<\/noindex> en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">netwerkarchitectuur<\/a><\/noindex> voor microservices applicaties.<\/p>\n<p><b>Wat is een moderne applicatie?<\/b><\/p>\n<p>Moderne applicaties? Moderne stack? Wat betekent \u2018modern\u2019 precies? <\/p>\n<p>De meeste ontwikkelaars hebben slechts een algemeen begrip van wat een moderne applicatie is, daarom is het noodzakelijk om deze term duidelijk te defini\u00ebren.<\/p>\n<p>Een moderne applicatie ondersteunt meerdere clients, of het nu gaat om een gebruikersinterface in de JavaScript-bibliotheek React, een mobiele applicatie voor Android of iOS, of een applicatie die verbinding maakt met een andere via een API. Een moderne applicatie impliceert het bestaan van een onbepaald aantal clients waarvoor het gegevens of services levert.<\/p>\n<p>Een moderne applicatie biedt een API voor toegang tot de gevraagde gegevens en services. De API moet onveranderlijk en consistent zijn, en niet specifiek geschreven voor een bepaalde aanvraag van een specifieke client. De API is beschikbaar via HTTP(S) en biedt toegang tot alle functionaliteiten die beschikbaar zijn in de GUI of CLI. <\/p>\n<p>Gegevens moeten beschikbaar zijn in een gangbaar, compatibel formaat, zoals JSON. De API levert objecten en diensten in een begrijpelijke, georganiseerde vorm; bijvoorbeeld, RESTful API's of GraphQL bieden een geschikt interface.<\/p>\n<p>Moderne applicaties zijn gebouwd op een moderne stack, en een moderne stack is die stack die dergelijke applicaties ondersteunt. Een dergelijke stack stelt de ontwikkelaar in staat om gemakkelijk een applicatie met een HTTP-interface en duidelijke API-eindpunten te cre\u00ebren. De gekozen aanpak zorgt ervoor dat uw applicatie eenvoudig gegevens kan verzenden en ontvangen in JSON-formaat. Met andere woorden, de moderne stack komt overeen met de elementen van de Twelve-Factor-applicatie voor. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">microservices<\/a><\/noindex>. <\/p>\n<p>Populaire versies van dit type stack zijn gebaseerd op <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> en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-content-service\">Go<\/a><\/noindex>. Microservicesarchitectuur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-ingenious\">NGINX<\/a><\/noindex> belichaamt een voorbeeld van een moderne stack, ge\u00efmplementeerd in elk van de genoemde talen.<\/p>\n<p>Let op dat we niet uitsluitend de microservicesaanpak bevorderen. Velen van u werken met monolithen die moeten evolueren, terwijl anderen werken met SOA-applicaties die uitbreiden en evolueren naar microservicesapplicaties. Sommigen gaan de richting op van serverless applicaties, terwijl anderen combinaties van het bovenstaande implementeren. De principes die in het artikel worden uiteengezet, zijn toepasbaar op elk van deze systemen met slechts enkele kleine wijzigingen. <\/p>\n<p><b>De principes<\/b><\/p>\n<p>Nu we een gemeenschappelijk begrip hebben bereikt van wat moderne applicaties en moderne stacks zijn, is het tijd om ons te verdiepen in de architectuur- en ontwikkelingsprincipes die u goed van dienst zullen zijn bij de ontwikkeling, implementatie en ondersteuning van een moderne applicatie.<\/p>\n<p>Een van de principes luidt: \"maak kleine applicaties\", laten we het gewoon <i>de kleine-principes noemen.<\/i>Er zijn ongelooflijk complexe applicaties die uit veel bewegende componenten bestaan. Het bouwen van een applicatie uit kleine discreet componenten vergemakkelijkt de ontwerp-, onderhouds- en operationele processen. (Let op, we zeiden \"vereenvoudigt\" en niet \"doet het eenvoudig\").<\/p>\n<p>Het tweede principe is dat we de productiviteit van ontwikkelaars kunnen verhogen door hen te helpen zich te concentreren op de functies die ze ontwikkelen, terwijl we hen ontlasten van zorgen over infrastructuur en CI\/CD gedurende de implementatie. Kortom, onze aanpak <i>is gericht op ontwikkelaars.<\/i>.<\/p>\n<p>Tot slot moet alles wat met uw applicatie te maken heeft, verbonden zijn met het netwerk. In de afgelopen 20 jaar hebben we grote vooruitgang geboekt richting een netwerktoekomst, aangezien netwerken sneller zijn geworden en applicaties complexer. Zoals we al hebben vastgesteld, moet een moderne applicatie door een verscheidenheid aan klanten via het netwerk worden gebruikt. Het toepassen van netwerkmicrodenken in architectuur heeft aanzienlijke voordelen die goed passen bij <i>de kleine-principes noemen.<\/i> en het concept van de aanpak, <i>gericht op ontwikkelaars.<\/i>.<\/p>\n<p>Als u deze principes in gedachten houdt tijdens de ontwikkeling en implementatie van uw applicatie, heeft u een onmiskenbaar voordeel in de evolutie en levering van uw product.<\/p>\n<p>Laten we deze drie principes nader bekijken.<\/p>\n<p><b>Het kleine principe.<\/b><\/p>\n<p>Het is moeilijk voor de menselijke geest om een groot aantal informatie tegelijkertijd te verwerken. In de psychologie verwijst de term cognitieve belasting naar de totale hoeveelheid mentale inspanning die nodig is om informatie in het geheugen vast te houden. Het verlagen van de cognitieve belasting voor ontwikkelaars is een prioriteit, zodat zij zich kunnen concentreren op het oplossen van problemen in plaats van de complexe huidige model van de gehele applicatie en de te ontwikkelen functies in hun hoofd te houden. <\/p>\n<p><img decoding=\"async\" alt=\"Principes van het ontwikkelen van moderne applicaties door NGINX. Deel 1\" src=\"\/wp-content\/uploads\/26df2016a46d8b82b45832fe1df9bf23.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Toepassingen worden om de volgende redenen gedematerialiseerd:<\/p>\n<ul>\n<li>Vermindering van de cognitieve belasting voor ontwikkelaars;<\/li>\n<li>Versnellen en vereenvoudigen van testprocessen;<\/li>\n<li>Snelle levering van wijzigingen in de applicatie.<\/li>\n<\/ul>\n<p><\/i><br \/>\nEr zijn verschillende manieren om de cognitieve belasting voor ontwikkelaars te verlagen, en hier komt het principe van kleinheid in het spel.<\/p>\n<p>Dus, drie manieren om de cognitieve belasting te verminderen:<\/p>\n<ol>\n<li>De tijdsduur die ze moeten overwegen bij het ontwikkelen van een nieuwe functie verkorten - hoe korter de tijdsduur, hoe lager de cognitieve belasting.<\/li>\n<li>Het aantal regels code dat tegelijkertijd onder handen is verminderen - minder code betekent minder belasting.<\/li>\n<li>Het proces van incrementele wijzigingen in de applicatie vereenvoudigen.<\/li>\n<\/ol>\n<p>\n<b>Vermindering van ontwikkeltijdsloten<\/b><\/p>\n<p>Laten we teruggaan naar de tijd waarin de methodologie <code>waterfall<\/code> de standaard was voor het ontwikkelingsproces, en tijdsbestekken van zes maanden tot twee jaar voor de ontwikkeling of update van een applicatie waren gebruikelijk. Gewoonlijk las het engineeringteam eerst de relevante documenten, zoals de productvereisten (PRD), het systeemreferentiedocument (SRD), het architectuurplan en begonnen ze al deze zaken samen te voegen in \u00e9\u00e9n cognitief model volgens welke ze code schreven. Naarmate de eisen en dus de architectuur veranderden, moesten er aanzienlijke inspanningen worden geleverd om het hele team op de hoogte te brengen van de updates van het cognitieve model. Een dergelijke aanpak kon in het slechtste geval simpelweg tot stagnatie van het werk leiden.<\/p>\n<p>De grootste verandering in het proces van applicatieontwikkeling was de introductie van de agile-methodologie. Een van de belangrijkste kenmerken van de <code>agile<\/code> -methodologie is iteratieve ontwikkeling. Dit leidt op zijn beurt tot een vermindering van de cognitieve belasting voor ingenieurs. In plaats van het team van ontwikkelaars te vragen om de applicatie in \u00e9\u00e9n lange cyclus te implementeren, <code>agile<\/code> maakt de aanpak het mogelijk om zich te concentreren op kleine hoeveelheden code die snel kunnen worden getest en uitgerold, terwijl er ook feedback wordt verkregen. De cognitieve belasting van de applicatie is verschoven van tijdsbestekken van zes maanden tot twee jaar met een enorme hoeveelheid specificaties naar een tweewekelijkse toevoeging of wijziging van functies, gericht op een minder strikte definitie van een grote applicatie.<\/p>\n<p>De verschuiving van een massieve applicatie naar specifieke kleine functies die in een tweewekelijkse sprint kunnen worden voltooid, met vooruitkijkend naar niet meer dan \u00e9\u00e9n functie van de volgende sprint in gedachten, is een significante verandering. Dit heeft de productiviteit van de ontwikkeling verhoogd terwijl de cognitieve belasting die constant varieerde, is verminderd.<\/p>\n<p>In de methode <code>agile<\/code> wordt aangenomen dat de eindapplicatie een enigszins gewijzigde versie van het oorspronkelijke concept zal zijn, waardoor de eindpunt van de ontwikkeling per definitie dubbelzinnig is. Alleen de resultaten van elke specifieke sprint kunnen duidelijk en eenduidig zijn.<\/p>\n<p><b>Kleine codebases<\/b><\/p>\n<p>De volgende stap in het verminderen van de cognitieve belasting is het verkleinen van de codebase. Over het algemeen zijn moderne applicaties massief; een betrouwbaar, bedrijfsapplicatie kan bestaan uit duizenden bestanden en honderdduizenden regels code. Afhankelijk van de organisatie van de bestanden kunnen de relaties en afhankelijkheden tussen de code en de bestanden voor de hand liggend zijn of juist niet. Zelfs het debuggen van de uitvoering van de code kan problemen opleveren, afhankelijk van de gebruikte bibliotheken en hoe goed de debugtools bibliotheken\/pakketten\/modules en gebruikerscode scheiden.<\/p>\n<p>Het opbouwen van een werkende mentale model van de code van de applicatie kan een aanzienlijke hoeveelheid tijd vergen en legt opnieuw een grote cognitieve belasting op de ontwikkelaar. Dit is vooral kenmerkend voor monolithische codebases, waar er een grote hoeveelheid code is, maar de interactie tussen de functionele componenten niet duidelijk is gedefinieerd, en het onderscheid tussen aandachtsobjecten vaak vaag is, omdat de functionele grenzen niet worden nageleefd. <\/p>\n<p>Een van de effectieve manieren om de cognitieve belasting op ingenieurs te verminderen, is het overstappen naar een microservices-architectuur. In de microservices-benadering richt elke service zich op een set van functies; de betekenis van de service is meestal gedefinieerd en duidelijk. De grenzen van de service zijn ook helder \u2013 onthoud dat de communicatie met de service via API's verloopt, waardoor gegevens die door de ene service zijn gegenereerd eenvoudig naar een andere kunnen worden overgedragen.<\/p>\n<p>Interactie met andere diensten is meestal beperkt tot enkele gebruikersservices en enkele provider services die eenvoudige en schone API-aanroepen gebruiken, bijvoorbeeld met REST. Dit betekent dat de cognitieve belasting voor de ingenieur aanzienlijk wordt verlaagd. De moeilijkste taak blijft het begrijpen van het model van interactie tussen services en hoe zaken zoals transacties plaatsvinden over verschillende services. Al met al verlaagt het gebruik van microservices de cognitieve belasting door de hoeveelheid code te verminderen, duidelijke grenzen voor de service aan te geven en inzicht te geven in de relaties tussen gebruikers en providers.<\/p>\n<p><b>Kleine incrementele wijzigingen<\/b><\/p>\n<p>Laatste element van het principe <i>kleinheid<\/i> \u2013 is het beheer van veranderingen. Voor ontwikkelaars is het een grote verleiding om naar de codebase te kijken (misschien zelfs naar hun eigen, oudere code) en te zeggen: 'Dit is troep, we moeten alles herschrijven.' Soms is dat de juiste beslissing en soms niet. Het legt een zware last op het team van ontwikkelaars om een wereldwijde wijziging van het model door te voeren, wat op zijn beurt leidt tot een aanzienlijke cognitieve belasting. Het is beter dat ingenieurs zich concentreren op de wijzigingen die ze kunnen aanbrengen binnen een sprint, zodat ze op tijd de noodzakelijke functionaliteit kunnen uitrollen, ook al gebeurt dat geleidelijk. Het uiteindelijke product moet lijken op wat van tevoren was gepland, maar met enkele wijzigingen en testen, om aan de behoeften van de klant te voldoen.<\/p>\n<p>Bij het herschrijven van grote delen van code blijkt het soms moeilijk om wijzigingen snel door te voeren, omdat andere systeemafhankelijkheden hier een rol spelen. Om de stroom van veranderingen te beheersen, kan feature hiding worden gebruikt. Dit betekent in feite dat de functionaliteit aanwezig is in de productie, maar niet toegankelijk is via omgevingsvariabelen (env-var) of een ander configuratiemechanisme. Als de code alle kwaliteitscontroles heeft doorstaan, kan deze in de productie in een verborgen staat komen. Deze strategie werkt echter alleen als de functie uiteindelijk wordt ingeschakeld. Anders rommelt het de code op en voegt het cognitieve belasting toe, waarmee de ontwikkelaar moet omgaan om productief te blijven. Wijzigingsbeheer en incrementele veranderingen helpen beide om de cognitieve belasting voor ontwikkelaars op een draaglijk niveau te houden. <\/p>\n<p>Ingenieurs moeten veel uitdagingen overwinnen, zelfs bij het eenvoudig implementeren van extra functionaliteit. Vanuit het management perspectief is het verstandig om de extra belasting op het team te verminderen, zodat ze zich kunnen concentreren op de kernaspecten van de functionaliteit. Er zijn drie dingen die u kunt doen om uw ontwikkelteam te helpen:<\/p>\n<ol>\n<li>Gebruik een methodologie <code>agile<\/code>, om de tijdslimieten te beperken waarbinnen het team zich moet concentreren op de belangrijkste functies.<\/li>\n<li>Implementeer uw applicatie als meerdere microservices. Dit beperkt het aantal te implementeren functies en versterkt de grenzen die de cognitieve belasting tijdens het werk behouden.<\/li>\n<li>Geef voorkeur aan incrementele veranderingen boven grote en omvangrijke, wijzig kleine delen van de code. Pas function hiding toe om veranderingen door te voeren, zelfs als ze niet direct zichtbaar zijn na toevoeging.<\/li>\n<\/ol>\n<p>\nAls u het principe van kleinschaligheid in uw werk toepast, zal uw team veel gelukkiger worden, beter gefocust zijn op het implementeren van noodzakelijke functies en met grotere waarschijnlijkheid sneller kwaliteitsverbeteringen doorvoeren. Maar dit betekent niet dat het werk niet ingewikkelder kan worden; soms vereist de implementatie van nieuwe functionaliteiten juist een aanpassing van verschillende diensten en kan dit proces moeilijker zijn dan in een monolithische architectuur. In ieder geval zijn de voordelen van het toepassen van het kleinschalige principe de moeite waard.<\/p>\n<p>Einde van het eerste deel.<\/p>\n<p>Binnenkort publiceren we het tweede deel van de vertaling, maar voorlopig wachten we op uw opmerkingen en nodigen we u uit voor <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/mJ6e\/\">open day<\/a><\/noindex>, dat vandaag om 20.00 uur plaatsvindt.<br \/>\n<br \/>Bron: <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 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0434\u0440\u0443\u0437\u044c\u044f.\" \/>\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\/nl\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/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\udd47Principes van de ontwikkeling van moderne applicaties door NGINX. Deel 1 | ProHoster","description":"Hallo, vrienden.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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.","og:url":"https:\/\/prohoster.info\/nl\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/34140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=34140"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/34140\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=34140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=34140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=34140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}