Programavimas

Kas yra mikro paslaugos? Kita jūsų programinės įrangos architektūra

Beveik kiekviena kompiuterinė sistema atlieka kelias užduotis naudodama bendrus išteklius, o vienas iš kompiuterinio programavimo klausimų yra tai, kaip glaudžiai tas užduotis atliekantys kodo bitai turėtų būti susieti vienas su kitu. Vis labiau populiarėjantis atsakymas yra mikroserviso sąvokamaža, atskira funkcionalumo dalis, sąveikaujanti su kitomis mikropaslaugomis ir sukurianti didesnę sistemą.

Nors pagrindinė idėja turėti tokius atskirus komponentus nėra nauja, tačiau mikropaslaugų diegimo būdas suteikia jiems natūralų pagrindą tiek modernioms debesų programoms. Mikroservisai taip pat sutampa su „devops“ filosofija, kuri skatina greitai ir nuolat diegti naują funkcionalumą.

Kas yra mikro paslaugos?

„Mikro“, esantis mikropaslaugose, reiškia, kad tai yra mažos programos. Kartais tai tiesa, bet geresnis būdas apie juos galvoti yra tai, kad jie turėtų būti tik tiek dideli, kiek reikia norint atlikti vieną konkretų dalyką ar išspręsti tam tikrą problemą. Ta problema turėtų būti konceptuali, o ne techninė. Kaip teigia „Microsoft“, „mikropaslaugos turėtų būti kuriamos atsižvelgiant į verslo galimybes, o ne horizontalius sluoksnius, tokius kaip prieiga prie duomenų ar pranešimų siuntimas“. Jie bendrauja su kitomis mikro paslaugomis ir išoriniais vartotojais per palyginti stabilias API, kad sukurtų didesnę programą.

Taigi atskiros mikropaslaugos vidinis funkcionalumas gali būti patobulintas arba radikaliai atnaujintas, nepažeidžiant likusios sistemos dalies. Tai savo ruožtu susieja tai, kaip stengiasi veikti „devops“ parduotuvės: jei konkrečios didesnės programos funkcijos yra suskirstytos į atskirus, nepriklausomai veikiančius kodo elementus, lengviau gyventi CI / CD devopo mantrą (nuolatinė integracija ir nepertraukiamas pristatymas) . Be to, tiksliai apibrėžtos API leidžia lengvai automatiškai išbandyti mikro paslaugas.

Mikroservikų architektūra ir monolitinė architektūra

Dažnai girdėsite kalbant apie mikropaslaugas, kalbant apie „mikropaslaugų architektūrą.” Ši frazė apima ne tik pačias mikropaslaugas, bet ir valdymo bei paslaugų atradimo komponentus, taip pat API šliuzą, kuris tvarko ryšį tarp mikroservikų ir išorinio pasaulio.

„Monolitinis pritaikymas“ yra priešingas tam, kas yra mikroservisai. Tai yra programos retronimas, kai visas kodas yra viename dideliame dvejetainiame vykdomajame faile. Kaip paaiškina „TechTarget“, monolitinę programą yra sunkiau išplėsti ir patobulinti. Bet kadangi ji sukurta kaip viena vientisa programa, jai nereikia tiek valdyti, kiek mikropaslaugų architektūrai.

Apribotos sąvokos: kaip apibrėžti mikropaslaugą

Trumpam grįžkime prie ankstesnio mūsų įsakymo, kad mikropaslaugos turėtų atlikti vieną konkretų dalyką. Tai lengva pasakyti, bet praktiškai funkcionalumas dažnai yra supainiotas, o brėžti skirtumus yra sunkiau, nei atrodo. Domeno analizė ir domeno valdomas dizainas yra teoriniai metodai, padėsiantys atskirti savo užduotį dideliais vaizdais atskirose problemose, kurias gali išspręsti mikroservisas. Šiame procese, aprašytame šviečiamoje „Microsoft“ tinklaraščio įrašų serijoje, sukuriate abstraktų savo verslo domeno modelį ir atrandate ribotus kontekstus, kuri grupuoja funkcionalumą, kuris sąveikauja su pasauliu tam tikru būdu.

Pvz., Galite turėti vieną apribotą pristatymo kontekstą, o kitą - sąskaitas. Realus fizinis objektas, be abejo, turėtų ir kainą, ir vietą, kur jam reikia eiti, tačiau apriboti kontekstai atspindi konkrečius būdus, kuriais jūsų programa galvoja apie tuos objektus ir sąveikauja su jais. Kiekviena mikropaslauga turėtų egzistuoti visiškai viename ribotame kontekste, nors kai kurie riboti kontekstai gali apimti daugiau nei vieną mikropaslaugą.

Mikroservisai, palyginti su paslaugomis, architektūra ir žiniatinklio paslaugos

Šiuo metu, jei esate IT profesionalas, kurį laiką dirbantis pramonėje, galite pagalvoti, kad daug kas skamba gerai. Mažų atskirų programų, veikiančių kartu, idėja gali priminti tiek SOA (į paslaugas orientuotą architektūrą), tiek žiniatinklio paslaugas, du madingi žodžiai iš svaiginančių „Web 2.0“ dienų 2000-aisiais. Nors viena prasme po saule tikrai nėra nieko naujo, tarp šių sąvokų ir mikro paslaugų yra labai svarbu atskirti. Duomenų bazėje yra gerai suskirstyti skirtumai, tačiau pateikiama trumpa versija:

  • Į paslaugą orientuotoje architektūroje atskiri komponentai yra gana glaudžiai susieti, dažnai dalijasi turtu, pvz., Saugykla, ir jie bendrauja per specializuotą programinę įrangą, vadinamą įmonės saugyklos magistrale.. Mikroservistai yra labiau nepriklausomi, dalijasi mažiau išteklių ir bendrauja per lengvesnius protokolus. Verta paminėti, kad mikropaslaugos atsirado iš SOA aplinkos ir kartais laikomos tam tikra SOA arba šios koncepcijos tęsėja.
  • Žiniatinklio paslauga yra viešai rodomas funkcijų rinkinys, kurį kitos programos gali pasiekti per internetą; turbūt labiausiai paplitęs pavyzdys yra „Google Maps“, kurį restorano svetainė galėtų įdėti, kad pateiktų klientams nurodymus. Tai daug laisvesnis ryšys, nei matytumėte mikroservikų architektūroje.

Mikroservisų komunikacija

Frazė, kurią dažnai girdite apie mikropaslaugų architektūras, yra ta, kad jose turėtų būti „išmanieji galiniai taškai ir nebylūs vamzdžiai“. Kitaip tariant, mikropaslaugomis turėtų būti siekiama naudoti pagrindinius ir nusistovėjusius komunikacijos metodus, o ne sudėtingą ir griežtą integraciją. Kaip pažymėta, tai dar vienas dalykas, kuris išskiria mikroservisus nuo SOA.

Apskritai ryšys tarp mikroservikų turėtų būti asinchroninis, ta prasme, kad kodo gijos nėra blokuojamos laukiant atsakymų. (Vis tiek gerai naudoti sinchroninio ryšio protokolus, pvz., HTTP, nors asinchroniniai protokolai, pvz., AMQP (išplėstinis pranešimų eilės nustatymo protokolas), taip pat yra įprasti mikropaslaugų architektūrose.) Toks laisvas susiejimas daro mikropakalčių architektūrą lankstesnę gedimo akivaizdoje. atskirų tinklo komponentų ar dalių, o tai yra pagrindinis privalumas.

Mikroservisai, „Java“, „Spring Boot“ ir „Spring Cloud“

Kai kurie iš pirmųjų mikropaslaugų darbų atsirado „Java“ bendruomenėje; Martinas Fowleris buvo ankstyvas šalininkas. 2012 m. Lenkijoje vykusioje „Java“ konferencijoje vyko vienas svarbiausių ankstyvų pranešimų šia tema „Mikro paslaugos -„ Java “,„ Unix “kelias“. Joje buvo rekomenduojama taikyti principus, kuriais vadovaujantis buvo kuriamos pirmosios aštuntojo dešimtmečio „Unix“ programos („Rašyti programos, kurios daro vieną dalyką ir daro tai gerai. Parašykite programas, kad jos veiktų kartu “) į„ Java “kūrimą.

Dėl šios istorijos yra daugybė „Java“ sistemų, leidžiančių kurti mikropaslaugas. Vienas populiariausių yra „Spring Boot“, kuris yra specialiai sukurtas mikropaslaugoms; „Boot“ pratęsia „Spring Cloud“, kuris, kaip rodo pavadinimas, leidžia šias paslaugas diegti ir debesyje. „Pivotal Software“, „Spring“ kūrėjas, turi gerą pamoką, kaip pradėti kurti mikroservisus naudojant šias sistemas.

Mikroservisai ir talpyklos: „Docker“, „Kubernetes“ ir ne tik

Pagrindinė technologija, kuri labiausiai atiteko mikroservių patekimui į pagrindinę srovę, yra konteineriai. Sudėtinis rodinys yra panašus į VM egzempliorių, tačiau, užuot įtraukęs visą savarankišką OS, konteineris yra tik izoliuota vartotojo erdvė, naudojanti pagrindinės operacinės sistemos branduolį, tačiau kitaip vykdanti kodą viduje. Konteineriai yra daug mažesni nei VM egzemplioriai, juos lengva greitai įdiegti vietoje arba debesyje, ir juos galima sukti aukštyn arba žemyn, kad atitiktų paklausą ir turimus išteklius.

Talpyklų patrauklumas mikropaslaugoms turėtų būti akivaizdus: kiekviena atskira mikroservisa gali veikti savo talpykloje, o tai žymiai sumažina paslaugų valdymo pridėtines išlaidas. Daugumoje konteinerių diegimų yra papildomų orkestravimo įrankių, kurie automatizuoja talpyklų programų diegimą, valdymą, mastelio keitimą, tinklų kūrimą ir prieinamumą. Tai yra mažų, lengvai pastatomų mikropaslaugų ir lengvai diegiamų konteinerių derinys, leidžiantis „devops“ filosofijai. Yra keletas konteinerių koncepcijos įgyvendinimų, tačiau kol kas populiariausias yra „Docker“, kuris paprastai derinamas su „Kubernetes“ kaip orkestro platforma.

Nors pavasaris yra populiarus, jis yra susietas su „Java“ platforma. Kita vertus, konteinerių sistemos yra daugialypės: bet kuri programavimo kalba, kurią palaiko OS, gali būti naudojama talpykloje, o tai suteikia daugiau lankstumo programuotojams. Iš tiesų, didelis mikropaslaugų privalumas yra tas, kad kiekvieną atskirą paslaugą galima parašyti ta kalba, kuri yra prasmingiausia ar kuria kūrėjai jaučiasi patogiausiai. Iš tiesų, paslauga gali būti visiškai pertvarkyta nauja kalba, nepaveikiant visos sistemos, jei jos API išlieka stabilios. „DZone“ yra straipsnis, kuriame aptariami „Spring Cloud“ ir „Kubernetes“ pliusai ir minusai, susiję su mikropriešomis.

„Microservices“ dizaino modeliai

Nesvarbu, kokia kalba naudojate kurdami mikropaslaugas, susidursite su problemomis, su kuriomis anksčiau susidūrė kiti kūrėjai. Dizaino modeliai yra įforminti, abstraktūs pasikartojančių informatikos problemų sprendimai, ir daugelis jų yra skirti būtent mikroslaugoms. „Devopedia“ turi puikų sąrašą, kuriame yra:

  • Paslaugų registras: skirtas klientams prijungti prie galimų mikropaslaugų egzempliorių
  • Grandinės pertraukiklis: kad būtų išvengta pakartotinių iškvietimų dėl nepavykusių paslaugų
  • Atsarginis: už alternatyvos teikimą nepavykusiai paslaugai
  • Šoninis automobilis: skirtas pagrindinio konteinerio pagalbinėms paslaugoms teikti, pvz., Registravimui, paslaugų sinchronizavimui ar stebėjimui
  • Adapteris: standartizuoti arba normalizuoti sąsają tarp pagrindinio konteinerio ir išorinio pasaulio
  • Ambasadorius: prijungti pagrindinį konteinerį prie išorinio pasaulio, pavyzdžiui, norint priartinti vietinio kompiuterio ryšius su išoriniais ryšiais

Mikroservisai ir debesys: AWS ir „Azure“

Kaip minėta pirmiau, vienas iš konteinerių naudojimo pranašumų yra tas, kad juos galima lengvai pritaikyti debesyje, kur yra lanksčių skaičiavimo išteklių, kad galėtumėte maksimaliai padidinti savo programos efektyvumą. Kaip jūs galite įsivaizduoti, pagrindiniai viešųjų debesų pardavėjai labai nori, kad jūs galėtumėte naudoti jų platformas norėdami paleisti savo mikroservisais pagrįstas programas. Norėdami gauti daugiau informacijos, peržiūrėkite „Amazon“, „Microsoft“ ir „Google“ išteklius.

$config[zx-auto] not found$config[zx-overlay] not found