{"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\/et\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","title":{"rendered":"Kaasaegsete rakenduste arendamise printsiibid NGINX-ilt. Osa 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, s\u00f5brad. Enne kursuse k\u00e4ivitamist <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u201ePHP tagasiside arendaja\u201d<\/a><\/noindex>, jagame traditsiooniliselt teiega kasuliku materjali t\u00f5lget.<\/p>\n<p>Tarkvara lahendab \u00fcha rohkem igap\u00e4evaseid \u00fclesandeid, muutudes samas j\u00e4rjest keerulisemaks. Kuidas \u00fctles kord Marc Andreessen, see neelab maailma. <\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsete rakenduste arendamise printsiibid NGINX-ilt. Osa 1\" src=\"\/wp-content\/uploads\/928924e3036beaac518dd4a2674a8a30.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeet\u00f5ttu on viimastel aastatel l\u00e4henemisviisid rakenduste arendamisele ja kohaletoimetamisele t\u00f5siselt muutunud. Need on olnud tektoonilised muudatused, mis on l\u00f5puks viinud uusi p\u00f5him\u00f5tteid. Need p\u00f5him\u00f5tted on osutunud kasulikeks teie meeskonna, projekteerimise, arendamise ja rakenduse l\u00f5ppkasutajatele kohaletoimetamise kujundamisel. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>P\u00f5him\u00f5tted saab kokku v\u00f5tta j\u00e4rgmiselt: <i>rakendus peab olema v\u00e4ike, v\u00f5rkturundus- ja arendajakeskne arhitektuur<\/i>. Nende kolme p\u00f5him\u00f5tte abil saate luua usaldusv\u00e4\u00e4rse, kompleksse rakenduse, mida saab l\u00f5ppkasutajale kiiresti ja turvaliselt edastada ning mis on h\u00f5lpsasti skaleeritav ja laiendatav.<\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsete rakenduste arendamise printsiibid NGINX-ilt. Osa 1\" src=\"\/wp-content\/uploads\/9116869a53fb6cf89d92f1d507d7904f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIga pakutav p\u00f5him\u00f5te sisaldab mitmeid aspekte, millest r\u00e4\u00e4gime, et n\u00e4idata, kuidas iga p\u00f5him\u00f5te aitab saavutada l\u00f5ppeesm\u00e4rki \u2014 kiirelt usaldusv\u00e4\u00e4rsete rakenduste tarnimist, mis on lihtsad hooldada ja kasutada. Vaatame p\u00f5him\u00f5tteid nende vastanditega v\u00f5rreldes, et selgitada, mida t\u00e4hendab n\u00e4iteks \"Veenduge, et kasutate <i>v\u00e4ikse p\u00f5him\u00f5tet<\/i>\u00bb.<\/p>\n<p>Loodame, et see artikkel innustab teid kasutama kaasaegsete rakenduste ehitamise soovitatud p\u00f5him\u00f5tteid, mis tagavad \u00fchtse l\u00e4henemise disainile pidevalt kasvavas tehnoloogiate virnas. <\/p>\n<p>Nende p\u00f5him\u00f5tete rakendamisega avastate, et j\u00e4rgite tarkvaraarenduse uusimaid suundi, sealhulgas l\u00e4henemist <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> rakenduste arendusele ja tarnimisele, konteinerite kasutamisele (n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/docker\/\">Docker<\/a><\/noindex>), konteinerite orkestreerimise raamistike (n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), mikroteenuste kasutamisele (sh Mikroteenuste Arhitektuur <noindex>NGINX<\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">v\u00f5rgustiku arhitektuur<\/a><\/noindex> mikroteenuste rakendustele.<\/p>\n<p><b>Mis on kaasaegne rakendus?<\/b><\/p>\n<p>Kaasaegsed rakendused? Kaasaegne tehnoloogia? Mida t\u00e4pselt t\u00e4hendab \u2018kaasaegne\u2019? <\/p>\n<p>Enamikel arendajatel on vaid \u00fcldine ettekujutus, millest kaasaegne rakendus koosneb, seet\u00f5ttu on oluline selle m\u00f5iste selgelt m\u00e4\u00e4ratleda.<\/p>\n<p>Kaasaegne rakendus toetab mitut klienti, olgu need siis kasutajaliides JavaScripti raamatukogul React, mobiilirakendus Androidi v\u00f5i iOS-i jaoks v\u00f5i rakendus, mis suhtleb teisega API kaudu. Kaasaegne rakendus t\u00e4hendab, et see teenindab m\u00e4\u00e4ramatut arvu kliente, kellele pakutakse andmeid v\u00f5i teenuseid.<\/p>\n<p>Kaasaegne rakendus pakub API-d, et p\u00e4\u00e4seda ligi n\u00f5utud andmetele ja teenustele. API peab olema p\u00fcsiv ja \u00fchtne, mitte spetsiaalselt m\u00f5ne konkreetse kliendi jaoks kirjutatud. API on saadaval \u00fcle HTTP(S) ja tagab juurdep\u00e4\u00e4su kogu funktsionaalsusele, mis on saadaval GUI v\u00f5i CLI kaudu. <\/p>\n<p>Andmed peavad olema kergesti k\u00e4ttesaadavad tuntud, \u00fchilduvas formaadis, n\u00e4iteks JSON. API pakub objekte ja teenuseid arusaadavas, organiseeritud vormis; n\u00e4iteks RESTful API v\u00f5i GraphQL pakuvad kvaliteetset liidest.<\/p>\n<p>Kaasaegsed rakendused p\u00f5hinevad kaasaegsel tehnoloogiakihil, mis toetab selliseid rakendusi. See tehnoloogiakiht v\u00f5imaldab arendajal h\u00f5lpsasti luua rakendust, millel on HTTP-liides ja selged API l\u00f5pp-punktid. Valitud l\u00e4henemine v\u00f5imaldab teie rakendusel h\u00f5lpsasti andmeid vastu v\u00f5tta ja edastada JSON-formaadis. Teisis\u00f5nu, kaasaegne tehnoloogiakiht vastab Kaheteistk\u00fcmne Faktoriga Rakenduse elementidele. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">mikroteenustena<\/a><\/noindex>. <\/p>\n<p>Selle tehnoloogiakihtide populaarsetes versioonides p\u00f5hinevad <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\">S\u00f5lm<\/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> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-content-service\">Go<\/a><\/noindex>. Mikroteenuste arhitektuur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/mra-ingenious\">NGINX<\/a><\/noindex> on n\u00e4ide kaasaegsest tehnoloogiakihist, mis on rakendatud igas mainitud keeles.<\/p>\n<p>Pange t\u00e4hele, et me ei propageeri ainult mikroteenuste l\u00e4henemist. Paljude teie seas t\u00f6\u00f6tavad monoliitidega, mis peavad arenema, samas kui teised tegelevad SOA rakendustega, mis laienevad ja arenevad mikroteenuste rakendusteks. Kolmandad liiguvad suunas, kus rakendatakse serverita (serverless) lahendusi, ning m\u00f5ned rakendavad teile \u00fclaltoodud kombinatsioone. Artiklis esitatud p\u00f5him\u00f5tted kehtivad iga\u00fche kohta, tehes vaid m\u00f5ned pisikesed muudatused. <\/p>\n<p><b>P\u00f5him\u00f5tted<\/b><\/p>\n<p>N\u00fc\u00fcd, kui oleme saavutanu \u00fchise arusaama sellest, mis on kaasaegsed rakendused ja kaasaegne tehnoloogia, on aeg s\u00fcveneda arhitektuuri ja arenduse p\u00f5him\u00f5tetesse, mis aitavad teil kaasaegsete rakenduste arendus-, rakendamis- ja hooldusprotsessis.<\/p>\n<p>\u00dcks p\u00f5him\u00f5te k\u00f5lab nagu \u201elooge v\u00e4ikeseid rakendusi\u201c, nimetame seda lihtsalt <i>v\u00e4ikuse p\u00f5him\u00f5tteks<\/i>. On eksisteerivad uskumatult keerulised rakendused, mis koosnevad paljusid liikuvatest komponentidest. Seet\u00f5ttu lihtsustab rakenduse loomine v\u00e4ikestest eraldiseisvatest komponentidest selle projekteerimist, hooldamist ja \u00fcldiselt selle kasutamist. (T\u00e4helepanu, me \u00fctlesime \u201elihtsustab\u201c, mitte \u201emuudab lihtsaks\u201c).<\/p>\n<p>Teine p\u00f5him\u00f5te on, et saame suurendada arendajate tootlikkust, aidates neil keskenduda neile funktsioonidele, mida nad arendavad, samal ajal vabastades nad infrastruktuuri ja CI\/CD muredest rakendamise ajal. Nii et l\u00fchidalt, meie l\u00e4henemine <i>on suunatud arendajatele<\/i>.<\/p>\n<p>L\u00f5puks peab k\u00f5ik, mis on seotud teie rakendusega, olema \u00fchendatud v\u00f5rguga. Viimase 20 aasta jooksul oleme teinud suuri edusamme v\u00f5rgup\u00f5hise tuleviku poole, kuna v\u00f5rgud on muutunud kiiremateks ja rakendused keerukamateks. Nagu juba selgus, peab kaasaegne rakendus olema k\u00f5ige erinevatesse klientidesse kasutusele v\u00f5etud \u00fcle v\u00f5rgu. V\u00f5rgup\u00f5hise m\u00f5tteviisi rakendamine arhitektuuris toob kaasa olulisi eeliseid, mis sobivad h\u00e4sti kokku <i>v\u00e4ikuse p\u00f5him\u00f5tteks<\/i> ja l\u00e4henemise kontseptsiooniga, <i>mis on suunatud arendajatele<\/i>.<\/p>\n<p>Kui arvestate rakenduse arendamisel ja rakendamisel neid p\u00f5him\u00f5tteid, on teil konkurentsieelis oma toote arendamisel ja pakkumisel.<\/p>\n<p>Vaatame neid kolme p\u00f5him\u00f5tet l\u00e4hemalt.<\/p>\n<p><b>Mugavuse p\u00f5him\u00f5te<\/b><\/p>\n<p>Inimese ajul on raske korraga suurt hulka teavet vastu v\u00f5tta. Ps\u00fchholoogias t\u00e4hendab kognitiivne koormus kogu vaimset pingutust, mis on vajalik teabe meeles hoidmiseks. Arendajate kognitiivse koormuse v\u00e4hendamine on prioriteet, kuna see v\u00f5imaldab neil keskenduda probleemi lahendamisele, mitte hoida meeles rakenduse keerulist mudelit ja arendatavaid funktsioone. <\/p>\n<p><img decoding=\"async\" alt=\"Kaasaegsete rakenduste arendamise printsiibid NGINX-ilt. Osa 1\" src=\"\/wp-content\/uploads\/26df2016a46d8b82b45832fe1df9bf23.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Rakendused dekoneeritakse mitmel p\u00f5hjusel:<\/p>\n<ul>\n<li>Arendajate kognitiivse koormuse v\u00e4hendamine;<\/li>\n<li>Testimise kiirendamine ja lihtsustamine;<\/li>\n<li>Muudatuste kiire tarnimine rakenduses.<\/li>\n<\/ul>\n<p><\/i><br \/>\nOn mitmeid viise arendajate kognitiivse koormuse v\u00e4hendamiseks, ja siin tuleb m\u00e4ngu mugavuse p\u00f5him\u00f5te.<\/p>\n<p>Nii et kolm meetodit kognitiivse koormuse v\u00e4hendamiseks:<\/p>\n<ol>\n<li>L\u00fchendage aega, mille nad peavad uue funktsiooni v\u00e4ljat\u00f6\u00f6tamisel arvesse v\u00f5tma \u2013 mida l\u00fchem on ajaraam, seda madalam on kognitiivne koormus.<\/li>\n<li>V\u00e4hendage koodi hulka, millega t\u00f6\u00f6tatakse korraga \u2013 v\u00e4hem koodi = v\u00e4hem koormust.<\/li>\n<li>Lihtsustage protsessi inkrementaalsete muudatuste tegemisel rakenduses.<\/li>\n<\/ol>\n<p>\n<b>Arenduse ajaraamide v\u00e4hendamine<\/b><\/p>\n<p>Naaseme tagasi aega, mil metoodika <code>waterfall<\/code> oli standard arendusprotsessis ning kuue kuu kuni kahe aasta ajaraamid rakenduse v\u00e4ljat\u00f6\u00f6tamiseks v\u00f5i v\u00e4rskendamiseks olid tavaline praktika. \u00dcldjuhul lugesid insenerid esmalt vastavaid dokumente, nagu toote n\u00f5uded (PRD), s\u00fcsteemi viidatud dokument (SRD), arhitektuuriplaan ja hakkasid neid k\u00f5iki kokku viima \u00fchte kognitiivsesse mudelisse, mille alusel nad koodi kirjutasid. N\u00f5uete ja seet\u00f5ttu ka arhitektuuri muutudes tuli t\u00fckkaega pingutada, et kogu meeskonda v\u00e4rskendustest teavitada kognitiivse mudeli osas. Selline l\u00e4henemine suutis halvimal juhul lihtsalt t\u00f6\u00f6d t\u00e4ielikult halvatud tekitada.<\/p>\n<p>Ainus suurima muudatusena rakenduste arendusprotsessis on muutunud agile metodoloogia rakendamine. \u00dcks metodoloogia peamisi tunnuseid <code>agile<\/code> on iteratiivne areng. See omakorda v\u00e4hendab inseneride kognitiivset koormust. Selle asemel, et n\u00f5uda arendustiimilt rakenduse elluviimist pikaajalise ts\u00fckli jooksul, <code>agile<\/code> v\u00f5imaldab l\u00e4henemine keskenduda v\u00e4ikestele koodikogumitele, mida saab kiiresti testida ja juurutada, samal ajal saadud tagasisidet kaasates. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajaraamist suure hulga spetsifikatsioonide arvelt kahele n\u00e4dalale uue funktsiooni lisamiseks v\u00f5i muudatuste tegemiseks, suunates seda rohkem h\u00e4gusa arusaamise suunas suurest rakendusest.<\/p>\n<p>Fookuse suunamine suurtelt rakendustelt konkreetsetele v\u00e4ikestele funktsioonidele, mis saab l\u00f5petada kahe n\u00e4dala sprintide jooksul, vaadates ette mitte rohkem kui \u00fche funktsiooni j\u00e4rgmistest sprintidest, on oluline muudatus. See on v\u00f5imaldanud suurendada arenduse tootlikkust, samas v\u00e4hendades pidevalt muutuvat kognitiivset koormust.<\/p>\n<p>Metoodikas <code>agile<\/code> eeldatakse, et l\u00f5plik rakendus on m\u00f5nev\u00f5rra muudetud versioon algsest kontseptsioonist, seet\u00f5ttu on l\u00f5plik arenduspunt tingimata ebamugav. Selged ja konkreetsed saavad olla vaid iga konkreetse sprindi tulemused.<\/p>\n<p><b>V\u00e4ikesed koodibaasid<\/b><\/p>\n<p>J\u00e4rgmine samm kognitiivse koormuse v\u00e4hendamisel on koodibaasi v\u00e4hendamine. \u00dcldiselt on t\u00e4nap\u00e4evased rakendused mahukad \u2013 usaldusv\u00e4\u00e4rne, ettev\u00f5tte tasandi rakendus v\u00f5ib koosneda tuhandetest failidest ja sadadest tuhandetest koodiridadest. Olenevalt failide organisatsioonist v\u00f5ivad koodi ja failide omavahelised seosed ja s\u00f5ltuvused olla ilmseid v\u00f5i vastupidi, t\u00e4helepanuv\u00e4\u00e4rseid. Isegi koodi soorituse t\u00f5rkeotsing v\u00f5ib tekitada probleeme, s\u00f5ltuvalt kasutatavatest raamatukogudest ja sellest, kuiv\u00f5rd h\u00e4sti t\u00f5rkeotsingu vahendid eristavad raamatukogusid\/pakette\/mooduleid ja kasutajakoodi.<\/p>\n<p>Rakenduse koodi t\u00f6\u00f6tava vaimse mudeli loomine v\u00f5ib v\u00f5tta m\u00e4rkimisv\u00e4\u00e4rselt aega, ja see seab taas suure kognitiivse koormuse arendajale. See on eriti iseloomulik monoliitsetele koodibaasidele, kus on suur hulk koodi, mille funktsionaalsete komponentide vaheline seos ei ole selgelt m\u00e4\u00e4ratletud ning t\u00e4helepanu objektide jagunemine on sageli udune, kuna funktsionaalseid piire ei j\u00e4rgita. <\/p>\n<p>\u00dcks t\u00f5husamaid viise inseneride kognitiivse koormuse v\u00e4hendamiseks on \u00fcleminek mikroteenuste arhitektuurile. Mikroteenuste l\u00e4henemisviisis keskendub iga teenus \u00fchele funktsioonide kogumile; teenuse sisuline t\u00e4hendus on tavaliselt m\u00e4\u00e4ratletud ja arusaadav. Teenuse piirid on samuti selged \u2013 pidage meeles, et teenusega suhtlemine toimub API kaudu, seega \u00fche teenuse genereeritud andmeid saab h\u00f5lpsasti edastada teise teenuse kaudu.<\/p>\n<p>Suhtlemine teiste teenustega on tavaliselt piiratud paari kasutajateenuse ja paari teenusepakkuja teenusega, mis kasutavad lihtsaid ja puhtaid API-kutseid, n\u00e4iteks REST-i abil. See t\u00e4hendab, et inseneri kognitiivne koormus v\u00e4heneb m\u00e4rkimisv\u00e4\u00e4rselt. K\u00f5ige keerulisemaks \u00fclesandeks j\u00e4\u00e4b arusaamine teenuste koost\u00f6\u00f6mudelist ja sellest, kuidas erinevad toimingud, nagu tehingud, toimuvad mitmete teenuste vahel. Kokkuv\u00f5ttes v\u00e4hendab mikroteenuste kasutamine kognitiivset koormust, v\u00e4hendades koodi hulka, tuvastades teenuse selged piirid ja tagades kasutajate ning teenusepakkujate suhete arusaamise.<\/p>\n<p><b>V\u00e4ikesed inkrementaalsed muudatused<\/b><\/p>\n<p>Viimase element prosessis <i>v\u00e4ikesused<\/i> \u2013 see on muudatuste juhtimine. Arendajatele on ahvatlev vaadata koodibaasi (v\u00f5ib-olla isegi oma vanamat koodi) ja \u00f6elda: 'See on jama, me peame selle k\u00f5ik \u00fcmber kirjutama.' M\u00f5nikord on see \u00f5ige otsus, teinekord mitte. See seab arendustiimi peale globaalsete muudatuste koorma, mis omakorda toob kaasa suurt kognitiivset koormust. Paremini on, kui insenerid keskenduvad muudatustele, mida nad saavad sprintide jooksul teha, et seej\u00e4rel \u00f5igel ajal vajalik funktsionaalsus v\u00e4lja tuua, isegi kui see toimub j\u00e4rk-j\u00e4rgult. L\u00f5pptoot peab meenutama eelnevalt planeeritud, kuid m\u00f5ningate muudatustega ja testimisega, et vastata kliendi vajadustele.<\/p>\n<p>Suuremate koodil\u00f5ikude \u00fcle kirjutamise korral ei pruugi muudatuste kiirel edastamisel alati \u00f5nnestuda, kuna m\u00e4ngu tulevad sisse s\u00fcsteemi teised s\u00f5ltuvused. Kuidas muutuste voogu kontrollida? Selleks saab kasutada funktsioonide varjamist (feature hiding). Sisuliselt t\u00e4hendab see, et funktsioon on tootmisserveris olemas, kuid pole saadaval keskkonnamuutujate seadistuse (env-var) v\u00f5i m\u00f5ne muu konfigureerimismehhanismi kaudu. Kui kood on l\u00e4binud k\u00f5ik kvaliteedikontrolli etapid, v\u00f5ib see tootmisse j\u00f5uda varjatud olekus. Siiski toimib see strateegia vaid siis, kui funktsioon saab l\u00f5puks aktiveeritud. Vastupidisel juhul koormab see lihtsalt koodi ja lisab arendajale kognitiivset koormust, millega tuleb produktiivse t\u00f6\u00f6 tegemiseks toime tulla. Muudatuste juhtimine ja inkrementaalsed muudatused aitavad isegi iseenesest hoida arendajate kognitiivset koormust normaalsetes piirides. <\/p>\n<p>Arendajad peavad paljusid keerulisi kitsendusi \u00fcletama, isegi kui nad rakendavad uusi funktsioone. Juhtkonna poolelt oleks m\u00f5istlik v\u00e4hendada meeskondade liigset koormust, et nad saaksid keskenduda funktsioonide v\u00f5tmeelementidele. On kolm asja, mida saate teha, et aidata oma arendajate meeskonda:<\/p>\n<ol>\n<li>Kasutage metoodikat <code>agile<\/code>, et piirata ajaraame, mille jooksul meeskond peab keskenduma v\u00f5tmefunktsioonidele.<\/li>\n<li>Rakendage oma rakendus mitme mikroteenusena. See piirab rakendatavate funktsioonide arvu ja tugevdab piire, mis aitavad hallata kognitiivset koormust t\u00f6\u00f6l.<\/li>\n<li>Eelistage inkrementaalseid muutusi suurtele ja mahukatele, muutes v\u00e4ikseid koodil\u00f5ike. Rakendage funktsioonide peitmist, et muudatusi rakendada, isegi kui need ei ole kohe p\u00e4rast lisamist n\u00e4htavad.<\/li>\n<\/ol>\n<p>\nKui te rakendate oma t\u00f6\u00f6s v\u00e4ikese suuruse p\u00f5him\u00f5tet, muutub teie meeskond palju \u00f5nnelikumaks, suudab paremini keskenduda vajalike funktsioonide rakendamisele ja on t\u00f5en\u00e4olisemalt kiiremini kvaliteetseid muudatusi toomas. Kuid see ei t\u00e4henda, et t\u00f6\u00f6 ei saaks keerulisemaks minna; m\u00f5nikord n\u00f5uab uue funktsiooni rakendamine mitme teenuse kohandamist ja see protsess v\u00f5ib olla keerulisem kui analoogne monoliitses arhitektuuris. Igal juhul tasuvad v\u00e4ikese suuruse l\u00e4henemise eelised end \u00e4ra.<\/p>\n<p>Esimese osa l\u00f5pp.<\/p>\n<p>Peagi avaldame t\u00f5lke teise osa, kuid praegu ootame teie kommentaare ja kutsume teid osalema <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/mJ6e\/\">avatud uste p\u00e4ev<\/a><\/noindex>, mis toimub juba t\u00e4na kell 20.00.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47Moodulite arendamise p\u00f5him\u00f5tted NGINX-ilt. Osa 1 | ProHoster","description":"Tere, s\u00f5brad. Kursuse \u201ePHP tagaosa arendaja\u201d k\u00e4ivitamise eel jagame traditsiooniliselt teiega kasulikku materjali t\u00f5lget. Tarkvara lahendab \u00fcha rohkem igap\u00e4evaseid \u00fclesandeid, muutes samal ajal kauem ja keerulisemaks. Nagu \u00fctles Mark Andreessen, \"tarkvara s\u00f6\u00f6b maailma.\" Seet\u00f5ttu on viimastel aastatel rakenduste arendamise ja tarnimise l\u00e4henemised t\u00f5siselt","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/34140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34140"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34140\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}