Programovanie

Čo sú mikroslužby? Vaša ďalšia softvérová architektúra

Takmer každý počítačový systém vykonáva viac úloh pomocou zdieľaných zdrojov a jednou z otázok počítačového programovania je, ako úzko by mali byť kúsky kódu, ktoré tieto úlohy vykonávajú, navzájom spojené. Stále populárnejšou odpoveďou je koncept mikroslužbymalý, diskrétny blok funkcií, ktorý interaguje s inými mikroslužbami a vytvára tak väčší systém.

Aj keď základná myšlienka mať takéto diskrétne komponenty nie je nová, spôsob implementácie mikroslužieb z nich robí prirodzený základ pre obe moderné cloudové aplikácie. Mikroslužby tiež zapadajú do filozofie devops, ktorá podporuje rýchle a neustále zavádzanie nových funkcií.

Čo sú mikroslužby?

„Mikro“ v mikroslužbách znamená, že ide o malé aplikácie. To je niekedy pravda, ale lepší spôsob, ako o nich premýšľať, je, že by mali byť len také veľké, ako je potrebné na vykonanie jednej konkrétnej veci alebo na vyriešenie konkrétneho problému. Tento problém by mal byť koncepčný, nie technický. Ako hovorí Microsoft, „mikroslužby by mali byť navrhnuté okolo obchodných schopností, nie horizontálnych vrstiev, ako je prístup k dátam alebo zasielanie správ.“ Komunikujú s ostatnými mikroslužbami a externými používateľmi prostredníctvom relatívne stabilných rozhraní API, aby vytvorili väčšiu aplikáciu.

Internú funkcionalitu individuálnej mikroslužby teda možno vylepšiť alebo radikálne upgradovať bez toho, aby to malo vplyv na zvyšok systému. To zase súvisí s tým, ako sa obchody Devops snažia fungovať: Ak sú špecifické funkcie väčšej aplikácie segmentované do samostatných, nezávisle fungujúcich častí kódu, je jednoduchšie žiť devops mantru CI / CD (nepretržitá integrácia a nepretržité doručovanie). . Vďaka dobre definovaným rozhraniam API je ľahké automaticky testovať mikroslužby.

Architektúra mikroslužieb vs. monolitická architektúra

Mikroslužby budete často počuť ako „architektúra mikroslužieb“.” Táto fráza nezahŕňa iba samotné mikroslužby, ale aj komponenty pre správu a zisťovanie služieb, ako aj bránu API, ktorá spracováva komunikáciu medzi mikroslužbami a vonkajším svetom.

„Monolitická aplikácia“ je opakom toho, čo sú mikroslužby. Je to retronym aplikácie, kde je celý kód v jednom veľkom binárnom spustiteľnom súbore. Ako vysvetľuje TechTarget, monolitická aplikácia je ťažšie škálovateľná a ťažšie sa vylepšuje. Pretože je však postavený ako jedna súdržná aplikácia, nevyžaduje toľko správy ako architektúra mikroslužieb.

Ohraničené koncepty: Ako definovať mikroslužbu

Vráťme sa na chvíľu k nášmu predchádzajúcemu prikázaniu, že mikroslužby by mali robiť jednu konkrétnu vec. Je ľahké povedať, ale v praxi sa funkčnosť často zamieňa a kreslenie divízií je ťažšie, ako vyzerá. Analýza domén a návrh riadený doménami sú teoretické prístupy, ktoré vám pomôžu rozdeliť vašu úlohu v obraze na jednotlivé problémy, ktoré môže mikroslužba vyriešiť. V tomto procese načrtnutom v osvetľujúcej sérii blogových príspevkov od spoločnosti Microsoft vytvoríte abstraktný model svojej obchodnej domény a v tomto procese objavíte ohraničené kontexty., ktoré zoskupujú funkčnosť, ktorá konkrétnym spôsobom interaguje so svetom.

Môžete mať napríklad jeden ohraničený kontext pre dopravu a druhý pre účty. Fyzický objekt v reálnom svete by mal mať samozrejme cenu aj miesto, kam musí ísť, ale ohraničené kontexty predstavujú konkrétne spôsoby, akými vaša aplikácia myslí a interaguje s týmito objektmi. Každá mikroslužba by mala existovať úplne v jednom ohraničenom kontexte, aj keď niektoré ohraničené kontexty môžu zahŕňať viac ako jednu mikroslužbu.

Mikroslužby vs. architektúra orientovaná na služby vs. webové služby

V tomto okamihu, ak ste profesionál v oblasti IT a ktorý už nejaký čas pracuje v tomto odbore, možno si myslíte, že veľa z toho znie povedome. Myšlienka spolupráce malých jednotlivých programov vám môže pripomínať SOA (architektúra orientovaná na služby) aj webové služby, dve módne slová z opojného webu 2.0 dni 2000. Aj keď v jednom zmysle pod slnkom skutočne nejde o nič nové, medzi týmito konceptmi a mikroslužbami existujú dôležité rozdiely. Rozdelenie rozdielov obsahuje dobré údaje, ale tu je krátka verzia:

  • V architektúre orientovanej na služby sú jednotlivé komponenty relatívne úzko spojené, často zdieľajú aktíva, ako napríklad úložisko, a komunikujú prostredníctvom špeciálneho softvéru nazývaného podniková zbernica.. Mikroslužby sú nezávislejšie, zdieľajú menej zdrojov a komunikujú prostredníctvom ľahších protokolov. Stojí za zmienku, že mikroslužby vznikli v prostredí SOA a niekedy sa považujú za druh SOA alebo nástupcu koncepcie.
  • Webová služba je verejne orientovaný súbor funkcií, ku ktorým majú iné aplikácie prístup prostredníctvom webu; pravdepodobne najrozšírenejším príkladom sú Mapy Google, ktoré by mohol vložiť web reštaurácie, aby poskytoval pokyny zákazníkom. Toto je oveľa voľnejšie pripojenie, ako by ste videli v architektúre mikroslužieb.

Komunikácia mikroslužieb

Fráza, ktorú budete často počuť v súvislosti s architektúrami mikroslužieb, je tá, že by mali obsahovať „inteligentné koncové body a nemé kanály“. Inými slovami, mikroslužby by sa mali zameriavať skôr na použitie základných a osvedčených komunikačných metód ako na zložitú a tesnú integráciu. Ako už bolo uvedené, ide o ďalšiu vec, ktorá odlišuje mikroslužby od SOA.

Komunikácia medzi mikroslužbami by mala byť vo všeobecnosti asynchrónna, v tom zmysle, že vlákna kódu nie sú blokované čakaním na odpovede. (Stále je v poriadku používať synchrónne komunikačné protokoly, ako je HTTP, aj keď v architektúrach mikroslužieb sú bežné aj asynchrónne protokoly, ako je AMQP (Advanced Message Queuing Protocol).) Tento druh voľnej väzby robí architektúru mikroslužieb flexibilnejšou oproti zlyhaniu. jednotlivých komponentov alebo častí siete, čo je kľúčovou výhodou.

Microservices, Java a Spring Boot a Spring Cloud

Niektoré z prvých prác v mikroslužbách vznikli v komunite Java; Martin Fowler bol skorým navrhovateľom. Konferencia Java v Poľsku, ktorá sa konala v roku 2012, obsahovala jednu z najdôležitejších raných prezentácií na túto tému s názvom „Mikroslužby - Java, cesta Unixu.“ Odporúčala uplatniť zásady, ktorými sa riadil vývoj prvých aplikácií Unix v 70. rokoch („Write programy, ktoré robia jednu vec a robia ich dobre. Programy píšte tak, aby spolupracovali “) na vývoj Java.

Ako výsledok tejto histórie existuje veľa rámcov Java, ktoré vám umožňujú vytvárať mikroslužby. Jedným z najpopulárnejších je Spring Boot, ktorý je špeciálne navrhnutý pre mikroslužby; Boot rozširuje Spring Cloud, ktorý, ako už názov napovedá, umožňuje nasadiť tieto služby aj do cloudu. Pivotal Software, vývojár spoločnosti Spring, má dobrý návod, ako začať s vývojom mikroslužieb pomocou týchto rámcov.

Mikroslužby a kontajnery: Docker, Kubernetes a ďalšie

Najdôležitejšou technológiou, ktorá šla najďalej smerom k tomu, aby sa mikroslužby dostali do hlavného prúdu, sú kontajnery. Kontajner je podobný inštancii VM, ale namiesto zahrnutia celého samostatného operačného systému je kontajner iba izolovaným používateľským priestorom, ktorý využíva jadro hostiteľského operačného systému, ale inak udržuje spustený kód v ňom. Kontajnery sú oveľa menšie ako inštancie virtuálnych počítačov a dajú sa ľahko rýchlo nasadiť, či už lokálne alebo v cloude, a môžu sa otáčať hore alebo dole, aby zodpovedali dopytu a dostupným zdrojom.

Príťažlivosť kontajnerov pre mikroslužby by mala byť zrejmá: Každá jednotlivá mikroslužba môže bežať vo svojom vlastnom kontajneri, čo výrazne znižuje réžiu riadenia služieb. Väčšina implementácií kontajnerov má doplnkové nástroje na orchestráciu, ktoré automatizujú nasadenie, správu, zmenu mierky, vytváranie sietí a dostupnosť aplikácií založených na kontajneroch. Filozofia devops je možná vďaka kombinácii malých, ľahko zostaviteľných mikroslužieb a ľahko nasaditeľných kontajnerov. Existuje niekoľko implementácií konceptu kontajnera, ale zďaleka najpopulárnejší je Docker, ktorý je zvyčajne spárovaný s Kubernetes ako orchestračnou platformou.

Jar, hoci je populárna, sa viaže na platformu Java. Systémy založené na kontajneroch sú na druhej strane polyglotové: Akýkoľvek programovací jazyk, ktorý OS podporuje, môže bežať v kontajneri, čo dáva programátorom väčšiu flexibilitu. Veľkou výhodou mikroslužieb je, že každá jednotlivá služba môže byť napísaná v akomkoľvek jazyku, ktorý má najväčší zmysel, alebo pre ktorý je vývojárom najpohodlnejšia. Službu je možné skutočne úplne prestavať v novom jazyku bez toho, aby to malo vplyv na systém ako celok, pokiaľ zostanú stabilné jeho API. DZone má článok diskutujúci o výhodách a nevýhodách Spring Cloud vs. Kubernetes pre mikroslužby.

Návrhové vzory mikroslužieb

Bez ohľadu na to, aký jazyk použijete na vývoj mikroslužieb, narazíte na problémy, s ktorými sa predtým stretli iní vývojári. Dizajnové vzory sú formalizované, abstraktné riešenia opakujúcich sa problémov v informatike a množstvo z nich je špeciálne určených pre mikroslužby. Devopedia má skvelý zoznam, ktorý obsahuje:

  • Servisný register: na pripojenie klientov k dostupným inštanciám mikroslužieb
  • Istič: aby sa zabránilo opakovanému volaniu zlyhaných služieb
  • Záložné riešenie: poskytnutie alternatívy k zlyhanej službe
  • Sajdkár: na poskytovanie doplnkovej služby k hlavnému kontajneru, napríklad na prihlasovanie, synchronizáciu služieb alebo monitorovanie
  • Adaptér: na štandardizáciu alebo normalizáciu rozhrania medzi hlavným kontajnerom a vonkajším svetom
  • Veľvyslanec: na pripojenie hlavného kontajnera k vonkajšiemu svetu, napríklad pri proxyovaní spojenia localhost s vonkajšími spojeniami

Mikroslužby a cloud: AWS a Azure

Ako už bolo uvedené vyššie, jednou z výhod používania kontajnerov je, že sa dajú ľahko nasadiť do cloudu, kde sú k dispozícii flexibilné výpočtové zdroje, aby ste mohli maximalizovať efektivitu svojej aplikácie. Ako si možno viete predstaviť, hlavní dodávatelia verejného cloudu sú dychtiví, aby ste ich platformy mohli používať na spúšťanie aplikácií založených na mikroslužbách. Ďalšie informácie nájdete v zdrojoch od spoločností Amazon, Microsoft a Google.

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