Tere, sÔbrad. Enne kursuse kÀivitamist , jagame traditsiooniliselt teiega kasuliku materjali tÔlget.
Tarkvara lahendab ĂŒha rohkem igapĂ€evaseid ĂŒlesandeid, muutudes samas jĂ€rjest keerulisemaks. Kuidas ĂŒtles kord Marc Andreessen, see neelab maailma.

SeetÔttu on viimastel aastatel lÀhenemisviisid rakenduste arendamisele ja kohaletoimetamisele tÔsiselt muutunud. Need on olnud tektoonilised muudatused, mis on lÔpuks viinud uusi pÔhimÔtteid. Need pÔhimÔtted on osutunud kasulikeks teie meeskonna, projekteerimise, arendamise ja rakenduse lÔppkasutajatele kohaletoimetamise kujundamisel.
PÔhimÔtted saab kokku vÔtta jÀrgmiselt: rakendus peab olema vÀike, vÔrkturundus- ja arendajakeskne arhitektuur. Nende kolme pÔhimÔtte abil saate luua usaldusvÀÀrse, kompleksse rakenduse, mida saab lÔppkasutajale kiiresti ja turvaliselt edastada ning mis on hÔlpsasti skaleeritav ja laiendatav.

Iga pakutav pĂ”himĂ”te sisaldab mitmeid aspekte, millest rÀÀgime, et nĂ€idata, kuidas iga pĂ”himĂ”te aitab saavutada lĂ”ppeesmĂ€rki â kiirelt usaldusvÀÀrsete rakenduste tarnimist, mis on lihtsad hooldada ja kasutada. Vaatame pĂ”himĂ”tteid nende vastanditega vĂ”rreldes, et selgitada, mida tĂ€hendab nĂ€iteks "Veenduge, et kasutate vĂ€ikse pĂ”himĂ”tet».
Loodame, et see artikkel innustab teid kasutama kaasaegsete rakenduste ehitamise soovitatud pĂ”himĂ”tteid, mis tagavad ĂŒhtse lĂ€henemise disainile pidevalt kasvavas tehnoloogiate virnas.
Nende pÔhimÔtete rakendamisega avastate, et jÀrgite tarkvaraarenduse uusimaid suundi, sealhulgas lÀhenemist rakenduste arendusele ja tarnimisele, konteinerite kasutamisele (nÀiteks ), konteinerite orkestreerimise raamistike (nÀiteks ), mikroteenuste kasutamisele (sh Mikroteenuste Arhitektuur ja mikroteenuste rakendustele.
Mis on kaasaegne rakendus?
Kaasaegsed rakendused? Kaasaegne tehnoloogia? Mida tĂ€pselt tĂ€hendab âkaasaegneâ?
Enamikel arendajatel on vaid ĂŒldine ettekujutus, millest kaasaegne rakendus koosneb, seetĂ”ttu on oluline selle mĂ”iste selgelt mÀÀratleda.
Kaasaegne rakendus toetab mitut klienti, olgu need siis kasutajaliides JavaScripti raamatukogul React, mobiilirakendus Androidi vÔi iOS-i jaoks vÔi rakendus, mis suhtleb teisega API kaudu. Kaasaegne rakendus tÀhendab, et see teenindab mÀÀramatut arvu kliente, kellele pakutakse andmeid vÔi teenuseid.
Kaasaegne rakendus pakub API-d, et pÀÀseda ligi nĂ”utud andmetele ja teenustele. API peab olema pĂŒsiv ja ĂŒhtne, mitte spetsiaalselt mĂ”ne konkreetse kliendi jaoks kirjutatud. API on saadaval ĂŒle HTTP(S) ja tagab juurdepÀÀsu kogu funktsionaalsusele, mis on saadaval GUI vĂ”i CLI kaudu.
Andmed peavad olema kergesti kĂ€ttesaadavad tuntud, ĂŒhilduvas formaadis, nĂ€iteks JSON. API pakub objekte ja teenuseid arusaadavas, organiseeritud vormis; nĂ€iteks RESTful API vĂ”i GraphQL pakuvad kvaliteetset liidest.
Kaasaegsed rakendused pĂ”hinevad kaasaegsel tehnoloogiakihil, mis toetab selliseid rakendusi. See tehnoloogiakiht vĂ”imaldab arendajal hĂ”lpsasti luua rakendust, millel on HTTP-liides ja selged API lĂ”pp-punktid. Valitud lĂ€henemine vĂ”imaldab teie rakendusel hĂ”lpsasti andmeid vastu vĂ”tta ja edastada JSON-formaadis. TeisisĂ”nu, kaasaegne tehnoloogiakiht vastab KaheteistkĂŒmne Faktoriga Rakenduse elementidele. .
Selle tehnoloogiakihtide populaarsetes versioonides pÔhinevad , , , , ja . Mikroteenuste arhitektuur on nÀide kaasaegsest tehnoloogiakihist, mis on rakendatud igas mainitud keeles.
Pange tĂ€hele, et me ei propageeri ainult mikroteenuste lĂ€henemist. Paljude teie seas töötavad 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Ă”ned rakendavad teile ĂŒlaltoodud kombinatsioone. Artiklis esitatud pĂ”himĂ”tted kehtivad igaĂŒhe kohta, tehes vaid mĂ”ned pisikesed muudatused.
PÔhimÔtted
NĂŒĂŒd, kui oleme saavutanu ĂŒhise arusaama sellest, mis on kaasaegsed rakendused ja kaasaegne tehnoloogia, on aeg sĂŒveneda arhitektuuri ja arenduse pĂ”himĂ”tetesse, mis aitavad teil kaasaegsete rakenduste arendus-, rakendamis- ja hooldusprotsessis.
Ăks pĂ”himĂ”te kĂ”lab nagu âlooge vĂ€ikeseid rakendusiâ, nimetame seda lihtsalt vĂ€ikuse pĂ”himĂ”tteks. On eksisteerivad uskumatult keerulised rakendused, mis koosnevad paljusid liikuvatest komponentidest. SeetĂ”ttu lihtsustab rakenduse loomine vĂ€ikestest eraldiseisvatest komponentidest selle projekteerimist, hooldamist ja ĂŒldiselt selle kasutamist. (TĂ€helepanu, me ĂŒtlesime âlihtsustabâ, mitte âmuudab lihtsaksâ).
Teine pĂ”himĂ”te 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ĂŒhidalt, meie lĂ€henemine on suunatud arendajatele.
LĂ”puks peab kĂ”ik, mis on seotud teie rakendusega, olema ĂŒhendatud vĂ”rguga. Viimase 20 aasta jooksul oleme teinud suuri edusamme vĂ”rgupĂ”hise tuleviku poole, kuna vĂ”rgud on muutunud kiiremateks ja rakendused keerukamateks. Nagu juba selgus, peab kaasaegne rakendus olema kĂ”ige erinevatesse klientidesse kasutusele vĂ”etud ĂŒle vĂ”rgu. VĂ”rgupĂ”hise mĂ”tteviisi rakendamine arhitektuuris toob kaasa olulisi eeliseid, mis sobivad hĂ€sti kokku vĂ€ikuse pĂ”himĂ”tteks ja lĂ€henemise kontseptsiooniga, mis on suunatud arendajatele.
Kui arvestate rakenduse arendamisel ja rakendamisel neid pÔhimÔtteid, on teil konkurentsieelis oma toote arendamisel ja pakkumisel.
Vaatame neid kolme pÔhimÔtet lÀhemalt.
Mugavuse pÔhimÔte
Inimese ajul on raske korraga suurt hulka teavet vastu vĂ”tta. PsĂŒhholoogias tĂ€hendab kognitiivne koormus kogu vaimset pingutust, mis on vajalik teabe meeles hoidmiseks. Arendajate kognitiivse koormuse vĂ€hendamine on prioriteet, kuna see vĂ”imaldab neil keskenduda probleemi lahendamisele, mitte hoida meeles rakenduse keerulist mudelit ja arendatavaid funktsioone.

Rakendused dekoneeritakse mitmel pÔhjusel:
- Arendajate kognitiivse koormuse vÀhendamine;
- Testimise kiirendamine ja lihtsustamine;
- Muudatuste kiire tarnimine rakenduses.
On mitmeid viise arendajate kognitiivse koormuse vÀhendamiseks, ja siin tuleb mÀngu mugavuse pÔhimÔte.
Nii et kolm meetodit kognitiivse koormuse vÀhendamiseks:
- LĂŒhendage aega, mille nad peavad uue funktsiooni vĂ€ljatöötamisel arvesse vĂ”tma â mida lĂŒhem on ajaraam, seda madalam on kognitiivne koormus.
- VĂ€hendage koodi hulka, millega töötatakse korraga â vĂ€hem koodi = vĂ€hem koormust.
- Lihtsustage protsessi inkrementaalsete muudatuste tegemisel rakenduses.
Arenduse ajaraamide vÀhendamine
Naaseme tagasi aega, mil metoodika waterfall oli standard arendusprotsessis ning kuue kuu kuni kahe aasta ajaraamid rakenduse vĂ€ljatöötamiseks vĂ”i vĂ€rskendamiseks olid tavaline praktika. Ăldjuhul lugesid insenerid esmalt vastavaid dokumente, nagu toote nĂ”uded (PRD), sĂŒsteemi viidatud dokument (SRD), arhitektuuriplaan ja hakkasid neid kĂ”iki kokku viima ĂŒhte kognitiivsesse mudelisse, mille alusel nad koodi kirjutasid. NĂ”uete ja seetĂ”ttu ka arhitektuuri muutudes tuli tĂŒkkaega pingutada, et kogu meeskonda vĂ€rskendustest teavitada kognitiivse mudeli osas. Selline lĂ€henemine suutis halvimal juhul lihtsalt tööd tĂ€ielikult halvatud tekitada.
Ainus suurima muudatusena rakenduste arendusprotsessis on muutunud agile metodoloogia rakendamine. Ăks metodoloogia peamisi tunnuseid agile on iteratiivne areng. See omakorda vĂ€hendab inseneride kognitiivset koormust. Selle asemel, et nĂ”uda arendustiimilt rakenduse elluviimist pikaajalise tsĂŒkli jooksul, agile vĂ”imaldab lĂ€henemine keskenduda vĂ€ikestele 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Ă€dalale uue funktsiooni lisamiseks vĂ”i muudatuste tegemiseks, suunates seda rohkem hĂ€gusa arusaamise suunas suurest rakendusest.
Fookuse suunamine suurtelt rakendustelt konkreetsetele vĂ€ikestele funktsioonidele, mis saab lĂ”petada kahe nĂ€dala sprintide jooksul, vaadates ette mitte rohkem kui ĂŒhe funktsiooni jĂ€rgmistest sprintidest, on oluline muudatus. See on vĂ”imaldanud suurendada arenduse tootlikkust, samas vĂ€hendades pidevalt muutuvat kognitiivset koormust.
Metoodikas agile eeldatakse, et lÔplik rakendus on mÔnevÔrra muudetud versioon algsest kontseptsioonist, seetÔttu on lÔplik arenduspunt tingimata ebamugav. Selged ja konkreetsed saavad olla vaid iga konkreetse sprindi tulemused.
VĂ€ikesed koodibaasid
JĂ€rgmine samm kognitiivse koormuse vĂ€hendamisel on koodibaasi vĂ€hendamine. Ăldiselt on tĂ€napĂ€evased rakendused mahukad â usaldusvÀÀrne, ettevĂ”tte tasandi rakendus vĂ”ib koosneda tuhandetest failidest ja sadadest tuhandetest koodiridadest. Olenevalt failide organisatsioonist vĂ”ivad koodi ja failide omavahelised seosed ja sĂ”ltuvused olla ilmseid vĂ”i vastupidi, tĂ€helepanuvÀÀrseid. Isegi koodi soorituse tĂ”rkeotsing vĂ”ib tekitada probleeme, sĂ”ltuvalt kasutatavatest raamatukogudest ja sellest, kuivĂ”rd hĂ€sti tĂ”rkeotsingu vahendid eristavad raamatukogusid/pakette/mooduleid ja kasutajakoodi.
Rakenduse koodi töötava vaimse mudeli loomine vÔib vÔtta mÀrkimisvÀÀrselt 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ÀÀratletud ning tÀhelepanu objektide jagunemine on sageli udune, kuna funktsionaalseid piire ei jÀrgita.
Ăks tĂ”husamaid viise inseneride kognitiivse koormuse vĂ€hendamiseks on ĂŒleminek mikroteenuste arhitektuurile. Mikroteenuste lĂ€henemisviisis keskendub iga teenus ĂŒhele funktsioonide kogumile; teenuse sisuline tĂ€hendus on tavaliselt mÀÀratletud ja arusaadav. Teenuse piirid on samuti selged â pidage meeles, et teenusega suhtlemine toimub API kaudu, seega ĂŒhe teenuse genereeritud andmeid saab hĂ”lpsasti edastada teise teenuse kaudu.
Suhtlemine teiste teenustega on tavaliselt piiratud paari kasutajateenuse ja paari teenusepakkuja teenusega, mis kasutavad lihtsaid ja puhtaid API-kutseid, nĂ€iteks REST-i abil. See tĂ€hendab, et inseneri kognitiivne koormus vĂ€heneb mĂ€rkimisvÀÀrselt. KĂ”ige keerulisemaks ĂŒlesandeks jÀÀb arusaamine teenuste koostöömudelist ja sellest, kuidas erinevad toimingud, nagu tehingud, toimuvad mitmete teenuste vahel. KokkuvĂ”ttes vĂ€hendab mikroteenuste kasutamine kognitiivset koormust, vĂ€hendades koodi hulka, tuvastades teenuse selged piirid ja tagades kasutajate ning teenusepakkujate suhete arusaamise.
VĂ€ikesed inkrementaalsed muudatused
Viimase element prosessis vĂ€ikesused â see on muudatuste juhtimine. Arendajatele on ahvatlev vaadata koodibaasi (vĂ”ib-olla isegi oma vanamat koodi) ja öelda: 'See on jama, me peame selle kĂ”ik ĂŒmber kirjutama.' MĂ”nikord on see Ă”ige 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Ă€rel Ă”igel ajal vajalik funktsionaalsus vĂ€lja tuua, isegi kui see toimub jĂ€rk-jĂ€rgult. LĂ”pptoot peab meenutama eelnevalt planeeritud, kuid mĂ”ningate muudatustega ja testimisega, et vastata kliendi vajadustele.
Suuremate koodilĂ”ikude ĂŒle kirjutamise korral ei pruugi muudatuste kiirel edastamisel alati Ă”nnestuda, kuna mĂ€ngu tulevad sisse sĂŒsteemi teised sĂ”ltuvused. Kuidas muutuste voogu kontrollida? Selleks saab kasutada funktsioonide varjamist (feature hiding). Sisuliselt tĂ€hendab see, et funktsioon on tootmisserveris olemas, kuid pole saadaval keskkonnamuutujate seadistuse (env-var) vĂ”i mĂ”ne muu konfigureerimismehhanismi kaudu. Kui kood on lĂ€binud kĂ”ik kvaliteedikontrolli etapid, vĂ”ib see tootmisse jĂ”uda varjatud olekus. Siiski toimib see strateegia vaid siis, kui funktsioon saab lĂ”puks aktiveeritud. Vastupidisel juhul koormab see lihtsalt koodi ja lisab arendajale kognitiivset koormust, millega tuleb produktiivse töö tegemiseks toime tulla. Muudatuste juhtimine ja inkrementaalsed muudatused aitavad isegi iseenesest hoida arendajate kognitiivset koormust normaalsetes piirides.
Arendajad peavad paljusid keerulisi kitsendusi ĂŒletama, isegi kui nad rakendavad uusi funktsioone. Juhtkonna poolelt oleks mĂ”istlik vĂ€hendada meeskondade liigset koormust, et nad saaksid keskenduda funktsioonide vĂ”tmeelementidele. On kolm asja, mida saate teha, et aidata oma arendajate meeskonda:
- Kasutage metoodikat
agile, et piirata ajaraame, mille jooksul meeskond peab keskenduma vÔtmefunktsioonidele. - Rakendage oma rakendus mitme mikroteenusena. See piirab rakendatavate funktsioonide arvu ja tugevdab piire, mis aitavad hallata kognitiivset koormust tööl.
- Eelistage inkrementaalseid muutusi suurtele ja mahukatele, muutes vÀikseid koodilÔike. Rakendage funktsioonide peitmist, et muudatusi rakendada, isegi kui need ei ole kohe pÀrast lisamist nÀhtavad.
Kui te rakendate oma töös vÀikese suuruse pÔhimÔtet, muutub teie meeskond palju Ônnelikumaks, suudab paremini keskenduda vajalike funktsioonide rakendamisele ja on tÔenÀolisemalt kiiremini kvaliteetseid muudatusi toomas. Kuid see ei tÀhenda, et töö ei saaks keerulisemaks minna; mÔnikord nÔuab uue funktsiooni rakendamine mitme teenuse kohandamist ja see protsess vÔib olla keerulisem kui analoogne monoliitses arhitektuuris. Igal juhul tasuvad vÀikese suuruse lÀhenemise eelised end Àra.
Esimese osa lÔpp.
Peagi avaldame tÔlke teise osa, kuid praegu ootame teie kommentaare ja kutsume teid osalema , mis toimub juba tÀna kell 20.00.
Allikas: habr.com
