{"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":"NGINX-i kaasaegsete rakenduste arendamise p\u00f5him\u00f5tted. Osa 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, s\u00f5brad. Kursuse <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/h4Ez\/\">\u00abBackend arendaja PHP-s\u00bb<\/a><\/noindex>, traditsiooniliselt jagame teiega kasulikku materjali.<\/p>\n<p>Tarkvara lahendab \u00fcha enam igap\u00e4evaseid \u00fclesandeid, samal ajal muutudes j\u00e4rjest keerulisemaks. Nagu kord \u00fctles Mark Andreessen, see neelab maailma. <\/p>\n<p><img decoding=\"async\" alt=\"NGINX-i kaasaegsete rakenduste arendamise p\u00f5him\u00f5tted. Osa 1\" src=\"\/wp-content\/uploads\/928924e3036beaac518dd4a2674a8a30.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeet\u00f5ttu on viimase paarik\u00fcmne aasta jooksul rakenduste arendamise ja tarnimise l\u00e4henemised muutunud. Need on olnud tektoonilised muutused, mis on toonud kaasa p\u00f5him\u00f5tete kogumi. Need p\u00f5him\u00f5tted osutusid kasulikuks teie meeskonna loomisel, projekteerimisel, arendamisel ja rakenduse l\u00f5ppkasutajatele tarnimisel. <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\u00f5rgup\u00f5hine ja arendajale suunatud arhitektuuriga<\/i>. Tuginedes nendele kolmele p\u00f5him\u00f5ttele, saate luua usaldusv\u00e4\u00e4rse, keeruka rakenduse, mida saab kiiresti ja turvaliselt l\u00f5ppkasutajale tarnida ning mida on kerge skaleerida ja laiendada.<\/p>\n<p><img decoding=\"async\" alt=\"NGINX-i kaasaegsete rakenduste arendamise p\u00f5him\u00f5tted. Osa 1\" src=\"\/wp-content\/uploads\/9116869a53fb6cf89d92f1d507d7904f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIga ettepaneku p\u00f5him\u00f5tte alusel on mitmeid aspekte, mida arutame, et n\u00e4idata, kuidas iga p\u00f5him\u00f5te aitab kaasa peamise eesm\u00e4rgi saavutamisele, milleks on usaldusv\u00e4\u00e4rsete rakenduste kiire tarnimine, mis on lihtsad hooldada ja kasutada. Arutame p\u00f5him\u00f5tteid nende vastanditega, et selgitada, mida t\u00e4hendab n\u00e4iteks \u201eVeenduge, et kasutate <i>v\u00e4ikuse p\u00f5him\u00f5tet<\/i>\u00bb.<\/p>\n<p>Loodame, et see artikkel julgustab teid kasutama ettepanekut, et luua modernseid rakendusi, mis tagavad \u00fchtse l\u00e4henemise projekteerimisel pidevalt kasvavas tehnoloogia virnas. <\/p>\n<p>Nende p\u00f5him\u00f5tete rakendamisel leiate, et kasutate uusimaid tarkvaraarenduse suundi, sealhulgas l\u00e4henemist <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/devops\/\">DevOps<\/a><\/noindex> rakenduste arendusele ja tarnimisele, konteinerite kasutamine (n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/docker\/\">Docker<\/a><\/noindex>) ja konteinerite orkestreerimise raamistikud (n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/tag\/kubernetes\/\">Kubernetes<\/a><\/noindex>), mikroteenuste kasutamine (sealhulgas Mikroteenuste Arhitektuur <noindex>NGINX<\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/what-is-a-service-mesh\/\">v\u00f5rgusuhtluse arhitektuur<\/a><\/noindex> mikroteenuste rakenduste jaoks.<\/p>\n<p><b>Mis on kaasaegne rakendus?<\/b><\/p>\n<p>Kaasaegsed rakendused? Kaasaegne virn? Mida t\u00e4pselt t\u00e4hendab \u201ekaasaegne\u201c? <\/p>\n<p>Enamik arendajatest omab vaid \u00fcldistatult arusaama, millest t\u00e4nap\u00e4evane rakendus koosneb, seet\u00f5ttu tuleb selle m\u00f5istele selge m\u00e4\u00e4ratlus anda.<\/p>\n<p>T\u00e4nap\u00e4evane rakendus toetab mitut klienti, olgu need siis kasutajaliidese komponent JavaScripti raamatukogus React, mobiilirakendus Androidile v\u00f5i iOS-ile v\u00f5i rakendus, mis \u00fchendub teisega API kaudu. T\u00e4nap\u00e4evane rakendus eeldab, et tal on m\u00e4\u00e4ramata arv kliente, kellele ta andmeid v\u00f5i teenuseid pakub.<\/p>\n<p>T\u00e4nap\u00e4evane rakendus pakub API-t, et p\u00e4\u00e4seda juurde n\u00f5utud andmetele ja teenustele. API peab olema muutumatu ja p\u00fcsiv, mitte kirjutatud spetsiaalselt teatud kliendi \u00fche konkreetse p\u00e4ringu jaoks. API on saadaval HTTP(S) kaudu ja tagab juurdep\u00e4\u00e4su kogu funktsionaalsusele, mis on saadaval GUI v\u00f5i CLI kaudu. <\/p>\n<p>Andmed peavad olema kergesti ligip\u00e4\u00e4setavas, \u00fchilduvas formaadis, n\u00e4iteks JSON. API pakub objekte ja teenuseid arusaadavas, organisatsioonilises vormis, n\u00e4iteks RESTful API v\u00f5i GraphQL tagab kvaliteetse liidese.<\/p>\n<p>T\u00e4nap\u00e4evased rakendused on \u00fcles ehitatud kaasaegsele tehnoloogiapinnale, mis toetab selliseid rakendusi. Selline tehnoloogiapind v\u00f5imaldab arendajal kergesti luua rakendusi, millel on HTTP-liides ja selged API l\u00f5pp-punktid. Valitud l\u00e4henemine v\u00f5imaldab teie rakendusel h\u00f5lpsasti vastu v\u00f5tta ja saata andmeid JSON-formaadis. Teisis\u00f5nu, kaasaegne tehnoloogia vastab Kaheteistk\u00fcmne Faktoriga rakenduse elementidele. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/blog\/microservices-reference-architecture-nginx-twelve-factor-app\/\">Mikroteenused<\/a><\/noindex>. <\/p>\n<p>Selle t\u00fc\u00fcpi tehnoloogiapinna populaarsed versioonid 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\">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> 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> toob esile n\u00e4ite kaasaegsest tehnoloogiapinnast, mis on rakendatud igas eespool nimetatud keeles.<\/p>\n<p>Pange t\u00e4hele, et me ei propageeri ainult mikroteenuste l\u00e4henemist. Paljud teist t\u00f6\u00f6tavad monoliitide kallal, mis peavad arenema, samas kui teised tegelevad SOA rakendustega, mis laienevad ja arenevad, et muutuda mikroteenuste rakendusteks. Kolmandad liiguvad suunas serverita (serverless) rakenduste rakendamine ning m\u00f5ned rakendavad eelpool nimetatud kombinatsioone. Artiklis esitatud p\u00f5him\u00f5tted on kohaldatavad igasugustele nendele s\u00fcsteemidele, ulatudes m\u00f5ningate v\u00e4ikeste muudatusteni. <\/p>\n<p><b>P\u00f5him\u00f5tted<\/b><\/p>\n<p>N\u00fc\u00fcd, kui oleme saavutanud \u00fcldise arusaama sellest, mis on t\u00e4nap\u00e4evane rakendus ja kaasaegne tehnoloogiaplatvorm, on aeg s\u00fcveneda arhitektuuri ja arenduse p\u00f5him\u00f5tetesse, mis toovad kasu teie rakenduse loomisel, elluviimisel ja hooldamisel.<\/p>\n<p>\u00dcks p\u00f5him\u00f5tteid on \u00ablooge v\u00e4ikeseid rakendusi\u00bb, nimetagem seda lihtsalt <i>v\u00e4ike rakendusprintsiip<\/i>. On olemas uskumatult keerulisi rakendusi, mis koosnevad paljusid liikuvatest komponentidest. See omakorda muudab rakenduse ehitamise v\u00e4ikestest eraldiseisvatest komponentidest lihtsamaks projekteerimise, hooldamise ja \u00fcldise kasutamise osas. (Pange t\u00e4hele, et me \u00fctlesime \u00ablihtsamaks\u00bb, mitte \u00ablihtsaks\u00bb).<\/p>\n<p>Teine p\u00f5him\u00f5te seisneb selles, et saame suurendada arendajate tootlikkust, aidates neil keskenduda neile funktsioonidele, mida nad arendavad, vabastades nad samas infrastruktuuri ja CI\/CD hooldamise muredest elluviimise ajal. Nii et l\u00fchidalt \u00f6eldes, meie l\u00e4henemine <i>on arendajale suunatud<\/i>.<\/p>\n<p>L\u00f5puks peab k\u00f5ik teie rakendusega seonduv olema \u00fchendatud v\u00f5rku. Viimase 20 aasta jooksul oleme teinud suuri edusamme v\u00f5rgu tuleviku suunas, kuna v\u00f5rgud on muutunud kiiremaks ja rakendused keerukamaks. Nagu juba selgitasime, peab kaasaegne rakendus olema v\u00f5rgu kaudu saadaval paljude erinevate klientide jaoks. V\u00f5rgup\u00f5hise m\u00f5tlemise rakendamine arhitektuuris toob kaasa m\u00e4rkimisv\u00e4\u00e4rseid eeliseid, mis sobivad h\u00e4sti kokku <i>v\u00e4ike rakendusprintsiip<\/i> ja l\u00e4henemise m\u00f5istega, <i>mille fookus on arendajatel<\/i>.<\/p>\n<p>Kui peate oma rakenduse arendamise ja kasutuselev\u00f5tu k\u00e4igus silmas neid p\u00f5him\u00f5tteid, on teil vaieldamatu eelis oma toote arendamisel ja kohandamisel.<\/p>\n<p>Uurime neid kolme p\u00f5him\u00f5tet l\u00e4hemalt.<\/p>\n<p><b>V\u00e4ike rakendusprintsiip<\/b><\/p>\n<p>Inimese ajul on keeruline samal ajal tajuda suurt hulka teavet. Ps\u00fchholoogias t\u00e4hendab kognitiivne koormus \u00fcldist vaimset pingutust, mis on vajalik info m\u00e4letamiseks. Arendajate kognitiivse koormuse v\u00e4hendamine on prioriteet, kuna sel juhul saavad nad keskenduda probleemide lahendamisele, selle asemel et hoida peas praegust keerulist mudelit kogu rakendusest ja arendatavatest funktsioonidest. <\/p>\n<p><img decoding=\"async\" alt=\"NGINX-i kaasaegsete rakenduste arendamise p\u00f5him\u00f5tted. Osa 1\" src=\"\/wp-content\/uploads\/26df2016a46d8b82b45832fe1df9bf23.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Rakendused dekomponeeritakse j\u00e4rgmiste p\u00f5hjusel:<\/p>\n<ul>\n<li>Arendajate kognitiivse koormuse v\u00e4hendamine;<\/li>\n<li>Testimise kiirendamine ja lihtsustamine;<\/li>\n<li>Muudatuste kiire kohaletoimetamine rakenduses.<\/li>\n<\/ul>\n<p><\/i><br \/>\nOn mitu viisi, kuidas v\u00e4hendada arendajate kognitiivset koormust, ja siin tulebki m\u00e4ngu v\u00e4ikeste asjade p\u00f5him\u00f5te.<\/p>\n<p>Nii et kolm viisi kognitiivse koormuse v\u00e4hendamiseks:<\/p>\n<ol>\n<li>V\u00e4hendage ajavahemikke, mida nad peavad uue funktsiooni arendamisel arvestama \u2013 mida l\u00fchem on ajavahemik, seda madalam on kognitiivne koormus.<\/li>\n<li>V\u00e4hendage korraga k\u00e4sitletava koodi hulka \u2013 v\u00e4hem koodi, v\u00e4hem koormust.<\/li>\n<li>Lihtsustage rakenduses inkrementaalsete muudatustega tegelemise protsessi.<\/li>\n<\/ol>\n<p>\n<b>Ajavahemike l\u00fchendamine arenduses<\/b><\/p>\n<p>Naaseme aega, mil metodoloogia <code>waterfall<\/code> oli arendusprotsessi standardiks ja kuue kuu kuni kahe aasta pikkused ajavahemikud rakenduse arendamiseks v\u00f5i uuendamiseks olid tavaline praktika. \u00dcldiselt lugesid esiteks insenerid asjakohaseid dokumente, nagu toote n\u00f5uded (PRD), s\u00fcsteemi viidatud dokument (SRD), arhitektuuri plaani ja alustasid nende k\u00f5ikide kokku panemist \u00fchte kognitiivsesse mudelisse, mille kohaselt nad koodi kirjutasid. N\u00f5uete ja seega ka arhitektuuri muutudes pidi v\u00e4hemalt tiim olema pidevalt kurssi viidud kognitiivse mudeli uuendamisega. See l\u00e4henemine halvas t\u00f6\u00f6 k\u00f5ige halvemal juhul t\u00e4ielikult.<\/p>\n<p>Suurem muutus rakenduste arendamise protsessis oli agil-semetoodika kasutuselev\u00f5tt. \u00dcks agili metodoloogia peamisi jooni on korduv arendamine. See omakorda toob kaasa inseneride kognitiivse koormuse v\u00e4henemise. Selle asemel, et n\u00f5uda arendajate meeskonnalt rakenduse elluviimist \u00fche pika ts\u00fckli jooksul, <code>lubab l\u00e4henemine keskenduda v\u00e4ikestele koodihulkadele, mida on v\u00f5imalik kiiresti testida ja juurutada, samal ajal kui saadakse ka tagasisidet. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajavahemikust koos tohutu hulkade spetsifikatsioonidega kahele n\u00e4dalasele funktsiooni lisamiseks v\u00f5i muutmiseks, mis on suunatud ebaselgele m\u00f5istmisele suurest rakendusest.<\/code> \u2013 on iteratiivne arendus. See omakorda v\u00e4hendab inseneride kognitiivset koormust. Selle asemel, et n\u00f5uda arendusmeeskonnalt rakenduse elluviimist \u00fche pika ts\u00fckli jooksul, <code>lubab l\u00e4henemine keskenduda v\u00e4ikestele koodihulkadele, mida on v\u00f5imalik kiiresti testida ja juurutada, samal ajal kui saadakse ka tagasisidet. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajavahemikust koos tohutu hulkade spetsifikatsioonidega kahele n\u00e4dalasele funktsiooni lisamiseks v\u00f5i muutmiseks, mis on suunatud ebaselgele m\u00f5istmisele suurest rakendusest.<\/code> v\u00f5imaldab l\u00e4henemine keskenduda v\u00e4ikestele koodimahtudele, mida saab kiiresti testida ja juurutada, samal ajal saades ka tagasisidet. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajakavast, arvestades suuri spetsifikatsioone, kahe n\u00e4dala jooksul toimuvale funktsiooni lisamisele v\u00f5i muutustele, mis on suunatud rohkem h\u00e4gusele arusaamisele suurest rakendusest.<\/p>\n<p>Keskendumine massiivsetest rakendustest konkreetsetele v\u00e4ikestele funktsioonidele, mis saab l\u00f5pule viia kahe n\u00e4dala sprintide jooksul, ja vaadates ette mitte rohkem kui \u00fcks funktsioon j\u00e4rgmisest sprintist, on m\u00e4rkimisv\u00e4\u00e4rne muutus. See on v\u00f5imaldanud suurendada arenduse tootlikkust, v\u00e4hendades samal ajal pidevalt k\u00f5ikuvat kognitiivset koormust.<\/p>\n<p>Metoodikas <code>lubab l\u00e4henemine keskenduda v\u00e4ikestele koodihulkadele, mida on v\u00f5imalik kiiresti testida ja juurutada, samal ajal kui saadakse ka tagasisidet. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajavahemikust koos tohutu hulkade spetsifikatsioonidega kahele n\u00e4dalasele funktsiooni lisamiseks v\u00f5i muutmiseks, mis on suunatud ebaselgele m\u00f5istmisele suurest rakendusest.<\/code> eeldatakse, et l\u00f5plik rakendus on m\u00f5nev\u00f5rra muudetud versioon algsest kontseptsioonist, seega peab arenduse l\u00f5pp-punkt olema kindlasti ebamugavalt m\u00e4\u00e4ratletud. \u00dcksikasjalikud ja selged v\u00f5ivad olla ainult 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. T\u00fc\u00fcpiliselt on t\u00e4nap\u00e4evased rakendused mahukad \u2013 usaldusv\u00e4\u00e4rne, ettev\u00f5tte rakendus v\u00f5ib koosneda tuhandetest failidest ja sadadest tuhandetest koodiridadest. S\u00f5ltuvalt failide struktuurist v\u00f5ivad koodide ja failide seosed ja s\u00f5ltuvused olla ilmsed v\u00f5i vastupidi. Isegi koodi t\u00e4itmise t\u00f5rkeotsing v\u00f5ib tekitada probleeme, s\u00f5ltuvalt kasutatavatest teekidest ja sellest, kui h\u00e4sti t\u00f5rkeotsingu t\u00f6\u00f6riistad eraldavad teegid\/paketid\/moodulid ja kasutajakoode.<\/p>\n<p>Rakenduse koodi t\u00f6\u00f6tava vaimse mudeli loomine v\u00f5ib v\u00f5tta m\u00e4rkimisv\u00e4\u00e4rselt palju aega ja taaskoormata arendajat suurt kognitiivset koormust. See on eriti iseloomulik monoliitsetele koodibaasile, kus palju koodi, mille funktsionaalsete komponentide omavaheline suhtlemine ei ole selgelt m\u00e4\u00e4ratletud, ning t\u00e4helepanerakkude jaotumine on sageli h\u00e4gune, kuna funktsionaalsed piirid ei ole t\u00e4idetud. <\/p>\n<p>\u00dcks t\u00f5husamaid viise inseneride kognitiivse koormuse v\u00e4hendamiseks on mikroteenuste arhitektuurile \u00fcleminek. Mikroteenuste l\u00e4henemisviisis keskendub iga teenus \u00fchele funktsioonide kogumile; samas on teenuse t\u00e4hendus tavaliselt m\u00e4\u00e4ratletud ja arusaadav. Teenuse piirid on samuti selged \u2013 pidage meeles, et teenusega suhtlemine toimub API kaudu, seega v\u00f5ivad \u00fche teenuse genereeritud andmed kergesti edastada teise.<\/p>\n<p>Koostoime teiste teenustega on tavaliselt piiratud m\u00f5ne kasutajateenuse ja m\u00f5ne teenusepakkuja teenusega, mis kasutavad lihtsaid ja selgeid API kutsungeid, 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 teenuste koost\u00f6\u00f6mudeli m\u00f5istmine ja selle m\u00f5istmine, kuidas sellised asjad nagu tehingud toimivad mitmes teenuses. L\u00f5ppkokkuv\u00f5ttes v\u00e4hendab mikroteenuste kasutamine kognitiivset koormust, v\u00e4hendades koodi mahtu, m\u00e4\u00e4ratledes teenuse selged piirid ja tagades kasutajate ja teenusepakkujate suhete m\u00f5istmise.<\/p>\n<p><b>V\u00e4ikesed inkrementaalsed muutused<\/b><\/p>\n<p>P\u00f5him\u00f5tte viimane element <i>t\u00fchine<\/i> \u2013 see on muutuste juhtimine. Arendajatele on suur ahvatlus vaadata koodibaasi (v\u00f5ib-olla isegi omaenda vanemat koodi) ja kuulutada: \u201eSee on jama, peame k\u00f5ik \u00fcmber kirjutama.\u201d M\u00f5nikord on see \u00f5ige otsus, m\u00f5nikord mitte. See seab arendajate meeskonna \u00f5lule globaalse mudeli muutmise koorma, mis omakorda toob kaasa ulatusliku kognitiivse koormuse. Paremini on, kui insenerid keskenduvad muudatustele, mida nad saavad sprinti jooksul ellu viia, et seej\u00e4rel \u00f5ige funktsionaalsus \u00f5igeaegselt v\u00e4lja tuua, isegi kui see juhtub j\u00e4rk-j\u00e4rgult. L\u00f5pp-tulemus peaks meenutama eelnevalt planeeritud tulemust, kuid m\u00f5ningate muudatustega ja testimisega, et vastata kliendi vajadustele.<\/p>\n<p>Suure koodil\u00f5ikude \u00fcmberkirjutamisel osutub aeg-ajalt muudatuste kiire tarnimine v\u00f5imatuks, kuna m\u00e4ngu astuvad s\u00fcsteemi muud s\u00f5ltuvused. Muudatuste voogu kontrollimiseks v\u00f5ib kasutada funktsionaalsuse peitmist (feature hiding). See t\u00e4hendab, et funktsionaalsus on olemas tootmises, kuid ei ole kergelt juurdep\u00e4\u00e4setav keskkonnamuutujate (env-var) v\u00f5i m\u00f5ne muu konfigureerimismehhanismi kaudu. Kui kood on l\u00e4binud k\u00f5ik kvaliteedi kontrollimise protsessid, v\u00f5ib see j\u00f5uda tootmisse varjatud olekus. Siiski toimib see strateegia ainult siis, kui funktsioon l\u00f5ppkokkuv\u00f5ttes aktiveeritakse. Muul juhul lisab see lihtsalt koodi \u00fclekoormust ja t\u00f5stab arendaja kognitiivset koormust, millega tuleb tulemuslikuks t\u00f6\u00f6ks toime tulla. Muudatuste haldamine ja j\u00e4rkj\u00e4rgulised muudatused aitavad iseenesest hoida arendajate kognitiivset koormust talutaval tasemel. <\/p>\n<p>Insenerid peavad isegi lisafunktsionaalsuse lihtsal rakendamisel \u00fcletama palju raskusi. Juhtkonna poolt on m\u00f5istlik v\u00e4hendada tiimi liigset koormust, et nad saaksid keskenduda funktsionaalsuse p\u00f5hielementidele. On kolm asja, mida saate teha, et aidata oma arendustiimi:<\/p>\n<ol>\n<li>Kasutage metoodikat <code>lubab l\u00e4henemine keskenduda v\u00e4ikestele koodihulkadele, mida on v\u00f5imalik kiiresti testida ja juurutada, samal ajal kui saadakse ka tagasisidet. Rakenduse kognitiivne koormus on nihkunud kuue kuu kuni kahe aasta ajavahemikust koos tohutu hulkade spetsifikatsioonidega kahele n\u00e4dalasele funktsiooni lisamiseks v\u00f5i muutmiseks, mis on suunatud ebaselgele m\u00f5istmisele suurest rakendusest.<\/code>, et piirata ajaraame, mille jooksul tiim peab keskenduma v\u00f5tmefunktsioonidele.<\/li>\n<li>Rakendage oma rakendust mitme mikroteenuse kujul. See piirab rakendatavate funktsioonide arvu ja tugevdab piire, mis hoiab kognitiivset koormust t\u00f6\u00f6 meatmisel.<\/li>\n<li>Eelistage j\u00e4rkj\u00e4rgulisi muudatusi massiivsete ja koormavate \u00fcle, muutke v\u00e4ikseid koodil\u00f5ike. Kasutage funktsioonide peitmist, et viia ellu muudatusi, isegi kui need ei ole kohe n\u00e4htavad p\u00e4rast lisamist.<\/li>\n<\/ol>\n<p>\nKui rakendate oma t\u00f6\u00f6s v\u00e4ikese ulatuse p\u00f5him\u00f5tet, muutub teie meeskond kindlasti \u00f5nnelikumaks, suudab paremini keskenduda vajalike funktsioonide elluviimisele ja on t\u00f5en\u00e4olisem, et kvaliteetseid muudatusi hakatakse kiiremini ellu viima. Kuid see ei t\u00e4henda, et t\u00f6\u00f6 ei v\u00f5iks keerulisemaks muutuda; m\u00f5nikord n\u00f5uab uue funktsionaalsuse rakendamine mitme teenuse muutmist ning see protsess v\u00f5ib olla keerulisem kui sarnane monoliitses arhitektuuris. Igatahes tasuvad v\u00e4ikese ulatuse 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 5.0.1.1 - 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\/et\/blog\/administrirovanie\/printsipy-razrabotki-sovremennyh-prilozhenij-ot-nginx-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\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\udd47Kaasaegsete rakenduste arendamise p\u00f5him\u00f5tted NGINX-i poolt. Osa 1 | ProHoster","description":"Tere, s\u00f5brad.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}