Arhitectura microserviciilor: un semn distinctiv pentru competență

Publicat: 2022-08-02

Sistemele monolitice nu mai sunt fezabile în epoca contemporană a containerizării și cloud computing. A existat o creștere a complexității sistemelor software în ultimii ani, iar sistemele monolitice devin din ce în ce mai complexe de creat și de întreținut.

Componentele sistemului sunt produse și grupate ca o singură unitate într-un sistem monolitic. Întregul sistem ar trebui redistribuit dacă o singură componentă ar fi modificată. Acest lucru îl face mai dificil de scalat și mai puțin versatil. Structura interconectată și interconectată a unui sistem autonom poate fi un efort dificil pentru dezvoltatori atunci când construiesc aplicații cuprinzătoare. Sistemele afectate fac, de asemenea, dificilă efectuarea de modificări cheie, adoptarea de noi stive de tehnologie sau livrarea de upgrade-uri și actualizări. O arhitectură orientată spre servicii, care constă dintr-o varietate de servicii care pot comunica între ele în interiorul unui sistem, stabilește în primul rând cadrul pentru tranziția de la programarea monolitică.

Arhitectura de microservicii a fost următorul pas în domeniu și a fost un mijloc mai unificat, dar mai granular, pentru a stabili o strategie de dezvoltare software de succes. Expresia „Arhitectură de microservicii” a apărut în ultimii ani pentru a descrie o anumită tehnică de construire a sistemelor software ca suită de servicii implementabile independent. Deși nu există o definiție specifică a acestui stil arhitectural, există câteva trăsături similare care înconjoară organizarea în jurul capacității de afaceri, implementării automate, inteligenței în punctele finale și gestionării descentralizate a limbilor și a datelor.

Este o abordare de dezvoltare software care descompune un sistem în secțiuni mai mici, independente și apoi le leagă între ele. Serviciile autonome sunt reunite pentru a satisface cerințele specializate ale unui anumit sector. Spotify, Amazon, PayPal, Netflix și Twitter au luat toate notă de această nouă descoperire și o fac publicitate pe scară largă.

Cuprins

Ce este arhitectura microserviciilor?

Expresia „Arhitectură de microservicii” a devenit mai populară în ultimii ani pentru a se referi la o abordare specifică a arhitecturii programelor software ca suită de servicii care pot fi implementate independent unele de altele. În ciuda faptului că acest stil arhitectural nu poate fi definit cu precizie, el împărtășește anumite caracteristici cu alte abordări arhitecturale. Acestea includ organizarea bazată pe capacitatea de afaceri, implementarea automată, inteligența în punctele finale și controlul descentralizat al limbilor și al datelor. Altfel spus, capacitatea microserviciilor de a funcționa independent este forța motrice din spatele ascensiunii lor în vârful scenei dezvoltării software.

Arhitectura de microservicii, denumită mai frecvent microservicii, este o paradigmă de proiectare care este utilizată în timpul dezvoltării software-ului de aplicație. Microserviciile fac posibilă împărțirea unei aplicații mari în mai multe părți mai mici, autonome, fiecare dintre acestea fiind responsabilă pentru propriul set unic de sarcini. O singură solicitare de utilizator poate determina ca o aplicație construită pe microservicii să efectueze multe apeluri către propriile microservicii interne pentru a-și construi răspunsul.

Containerele sunt un exemplu excelent de arhitectură de microservicii, deoarece vă eliberează de nevoia de a vă face griji cu privire la dependențele serviciilor, permițându-vă astfel să vă concentrați pe dezvoltarea serviciilor în sine. Containerele sunt adesea instrumentul de alegere pentru dezvoltarea aplicațiilor cloud-native pentru platformele contemporane sub formă de microservicii. Termenul „arhitectură de microservicii” se referă la un tip de arhitectură de aplicație în care aplicația în sine este construită ca o colecție de servicii. Oferă un cadru pentru construirea, implementarea și gestionarea în mod independent a diagramelor arhitecturale și a serviciilor pentru microservicii.

Nevoia de dezvoltare a arhitecturii microservicii și limitările arhitecturii monolitice

arhitectură monolitică și microservicii
arhitectură monolitică și microservicii Middleware

1. Scalarea aplicației

Deoarece afacerile de succes la scară web se confruntă cu o expansiune exponențială, software-ul lor trebuie, de asemenea, să permită o scalabilitate orizontală mare. Ocazional, doar o porțiune a software-ului care are o greutate de CPU sau I/O trebuie să fie scalată și gestionată individual (implementată cu programare poliglotă). Software-ul care este monolitic funcționează ca o singură entitate și este creat utilizând un singur limbaj de programare și Tech Stack. Pentru a realiza scalarea orizontală, este necesar să scalați întreaga aplicație. Deoarece software-ul monolitic acceptă doar un singur limbaj de programare, este imposibil să dezvoltați chiar și un singur modul într-un alt limbaj de programare sau Tech Stack.

2. Viteza de dezvoltare

Pentru a reduce timpul de lansare pe piață, fiecare afacere dorește în zilele noastre o dezvoltare rapidă a caracteristicilor. Într-o aplicație monolitică mare, complicată și uneori de mai multe milioane de linii, adăugarea de noi funcții este extrem de lentă din cauza încărcăturii cognitive enorme plasate pe Dezvoltator. Modulele de programe monolitice masive sunt strâns conectate, ceea ce face mai dificilă dezvoltarea de noi funcționalități. În consecință, adăugarea de noi funcționalități la un program monolitic este adesea lent și costisitoare.

3. Scalare de dezvoltare

Pentru a câștiga un avantaj competitiv sau pentru a profita de fructele slabe, companiile caută frecvent să paralelizeze dezvoltarea angajând mai mulți dezvoltatori. Dezvoltatorii nu pot lucra independent pe o bază de cod masivă, monolitică, strâns conectată și necesită frecvent sincronizare și vigilență suplimentare pentru a evita interferarea cu munca celuilalt. Adăugarea de dezvoltatori suplimentari nu duce la o creștere a funcțiilor și, ocazional, poate duce la mai puține funcții. În mod similar, datorită încărcăturii cognitive ridicate necesare pentru a înțelege întreaga bază de cod monolitic, de obicei, noilor recruți sau absolvenților recenti este nevoie de o perioadă considerabilă de timp pentru a-și crea primele linii de cod productiv. În 2008, am avut un interviu cu o afacere de telecomunicații din Berlin, unde managerul tehnic mi-a spus cu un rânjet îngâmfat că baza de coduri C++ a companiei includea milioane de linii și că noii ingineri pot produce cod productiv doar după patru până la șase luni.

4. Ciclul de eliberare

Ciclul de lansare al programelor monolitice mari este de obicei excesiv de lung, variind de la șase până la doi ani și jumătate, cu o întârziere suplimentară de câteva luni până la câțiva ani din cauza dimensiunii lor. Ciclurile mari de lansare plasează frecvent o corporație într-un dezavantaj competitiv în zilele noastre, deoarece un nou concurent poate intra pe piață în timpul intervalului de lansare.

5. Modularizare

În arhitectura monolitică, bariera dintre module este de obicei o interfață internă. De îndată ce dimensiunea programului crește, separația dintre module începe să se destrame. În consecință, modulele din arhitectura monolitică sunt adesea strâns legate în loc de cuplate slab și foarte coezive. Dacă comparăm dezvoltarea software-ului cu societatea, atunci modularizarea monolitică este analogă cu principiile moraliste și religioase, care nu pot garanta legea și ordinea în societate.

6. Modernizare

Aplicațiile de succes existente au necesitat modernizare dintr-o varietate de motive (de exemplu, profitând de hardware-ul modern, browser, lățime de bandă de rețea, Tech Stack sau Atrageți dezvoltatori buni). Modernizarea unui program monolitic poate fi costisitoare și consumatoare de timp, deoarece necesită o modernizare Big Bang a întregii aplicații fără a afecta Serviciul.

Tipuri de microservicii

Microservicii diferențiate și integrale sunt cele două tipuri distincte de microservicii.

A. Diferenţial

În această formă de arhitectură, arhitectura se descompune în servicii independente care sunt capabile să se separe în tranzacții. Acest lucru are ca rezultat distribuirea unei singure tranzacții către mai multe servicii.

b. Integral

Aplicațiile de microservicii sunt concepute pentru a combina o multitudine de microservicii în experiențe de utilizator individualizate. Aceste programe acoperă mai multe nevoi distincte, inclusiv managementul nivelului de servicii, furnizarea la cerere și compoziția dinamică.

Caracteristicile microserviciilor

1. Autonome

O arhitectură de microservicii permite ca fiecare componentă a serviciului să fie construită, implementată, gestionată și scalată separat de celelalte servicii. Serviciile nu trebuie să partajeze codul lor sau modul în care fac lucrurile cu alte servicii. Toată comunicarea între diferite părți se realizează prin intermediul API-urilor bine definite.

2. Specializat

arhitectura_microservicii
Oracol

Fiecare serviciu se bazează pe un set diferit de abilități și pe o problemă diferită. În timp, dacă dezvoltatorii adaugă mai mult cod la un serviciu, serviciul poate fi împărțit în servicii mai mici.

3. Componentizare prin Servicii

Deși arhitecturile de microservicii vor folosi biblioteci, metoda principală prin care își vor componente software-ul este descompunerea acestuia în servicii. Bibliotecile sunt componente care sunt legate într-un program și apelate folosind apeluri de funcții în memorie, în timp ce serviciile sunt componente în afara procesului care comunică cu un mecanism, cum ar fi o solicitare de serviciu web sau un apel de procedură la distanță. Definim bibliotecile ca componente care sunt legate într-un program și apelate folosind apeluri de funcții în memorie. (Aceasta este o idee distinctă de ceea ce se numește obiect de serviciu în multe sisteme OO. Spre deosebire de biblioteci, serviciile pot fi implementate în mod independent, ceea ce este unul dintre motivele principale pentru care sunt utilizate ca componente, mai degrabă decât biblioteci. avantajul angajării serviciilor în locul componentelor este generarea unei interfețe de componente mai transparente.O tehnică bună pentru stabilirea unei interfețe publicate explicite nu există în majoritatea limbajelor de programare.

Documentația și disciplina sunt de obicei singurele lucruri care împiedică clienții să încalce încapsularea unei componente, ceea ce ar duce la o cuplare excesiv de strânsă între componente. Prin utilizarea protocoalelor de apeluri de la distanță explicite, serviciile le facilitează utilizatorilor să evite acest lucru. Utilizarea serviciilor de acest fel are anumite dezavantaje. Deoarece apelurile efectuate de la distanță sunt mai costisitoare decât cele efectuate în cadrul aceluiași proces, API-urile utilizate de la distanță trebuie să aibă o granularitate mai fină, ceea ce le poate face mai dificil de utilizat. Când transcendeți granițele unui proces, este mai dificil să faceți schimbări comportamentale, ceea ce face mai dificil dacă trebuie să modificați modul în care responsabilitățile sunt distribuite între componente.

4. Produse nu Proiecte

Majoritatea inițiativelor de dezvoltare de aplicații pe care le întâlnim urmează o paradigmă numită proiect, în care obiectivul principal este de a preda o bucată de software care este apoi considerată a fi finalizată. După terminarea proiectului, software-ul este predat unei organizații de întreținere, iar echipa care a fost responsabilă cu construirea acestuia este destrămată.

Susținătorii microserviciilor se îndepărtează de această arhitectură în favoarea conceptului conform căruia o echipă ar trebui să dețină un produs pe întreaga durată a vieții sale. Conceptul Amazon de „construiți, îl utilizați”, în care o echipă de dezvoltare își asumă responsabilitatea completă pentru program în timp ce acesta este utilizat în producție, este o sursă proeminentă de inspirație pentru acest lucru. Acest lucru aduce dezvoltatorii în contact de zi cu zi cu modul în care funcționează software-ul lor în producție și crește comunicarea cu utilizatorii lor, deoarece li se cere să își asume cel puțin o parte din sarcina de a oferi suport pentru program.

5. Guvernare descentralizată

În plus, echipele de dezvoltare de microservicii favorizează o abordare distinctă a standardelor. Ei preferă să ofere instrumente utile pe care alți dezvoltatori le pot folosi pentru a aborda provocările comparabile cu cele cu care se confruntă, decât să se bazeze pe un set de standarde codificate. De obicei, aceste instrumente sunt derivate din implementări și partajate cu o comunitate mai mare, uneori, dar nu întotdeauna, utilizând o paradigmă internă open source. Acum că git și github sunt sistemul de control al versiunilor de facto ales, tehnicile open source devin din ce în ce mai răspândite în cadrul organizațiilor.

Netflix este un exemplu excelent de companie care aderă la acest principiu. Partajarea codului valoros și, cel mai important, testat de luptă ca biblioteci ajută alți dezvoltatori să gestioneze probleme comparabile într-un mod similar, permițându-le în același timp să aleagă o metodă diferită, dacă este necesar. Bibliotecile partajate tind să se concentreze pe preocupările comune legate de stocarea datelor, comunicarea între procese și automatizarea infrastructurii, așa cum se discută mai detaliat mai jos.

Pentru comunitatea de microservicii, cheltuielile sunt deosebit de nedorite.

6. Standarde testate în luptă și standarde impuse

Este un pic un paradox, deoarece echipele de microservicii preferă să evite tipul de standarde strict impuse de grupurile de design de afaceri, dar vor utiliza și chiar pledează pentru standarde deschise precum HTTP, ATOM și alte microformate.

Distincția principală este modul în care standardele sunt produse și implementate. Standardele controlate de organizații precum IETF nu devin standarde până când nu există mai multe implementări live ale acestora în lumea largă, care sunt adesea rezultatul inițiativelor de succes open-source.

Aceste standarde sunt o lume diferită de majoritatea standardelor de afaceri, care sunt adesea produse de oameni cu expertiză recentă limitată în programare sau influență excesivă a furnizorului.

7. Automatizarea infrastructurii

Un efect secundar pe care l-am văzut al mai multor automatizări ca urmare a livrării și implementării continue este introducerea de instrumente utile pentru a ajuta dezvoltatorii și oamenii de operațiuni. Instrumentele pentru producerea de artefacte, menținerea bazelor de coduri, pornirea serviciilor de bază sau pentru adăugarea de monitorizare și înregistrare standard sunt relativ răspândite în prezent. Cel mai bun exemplu de pe web este, fără îndoială, colecția Netflix de instrumente open source, deși există și altele, în special Dropwizard, pe care le-am folosit pe scară largă.

Transformă-ți ideea de aplicație în realitate

Să construim împreună o nouă aplicație

Incepe

Prezentare generală a mecanismului de comunicare într-o arhitectură de microservicii

Serviciile care alcătuiesc o arhitectură de microservicii sunt executate pe un număr de servere diferite. Protocoale precum HTTP, AMQP și TCP sunt utilizate pentru a facilita comunicarea între aceste multe servicii. Cele două protocoale cu cea mai mare adoptare sunt HTTP/REST și mesageria asincronă. Protocolul HTTP este adesea utilizat de o interfață de programare a aplicației (API) REST pentru serviciile online. Clienții pot să obțină acces la și să modifice resursele unei aplicații utilizând un localizator uniform de resurse în combinație cu metode HTTP precum GET, POST, PUT și DELETE (URL). O interfață de programare a aplicației (API) REST acționează ca un punct de intrare în funcționalitatea unei aplicații. Clienții își comunică nevoile către servicii trimițând cereri către API-uri. Clienții au opțiunea de a comunica direct cu microserviciile sau mergând printr-un gateway API.

Un singur punct de intrare este specificat pentru toate cererile făcute către servicii folosind un model de gateway API. Gateway-ul de interfață de programare a aplicațiilor (API), atunci când primește o solicitare de la un client, direcționează cererea către serviciul corespunzător.

Modelul gateway API are o serie de variante, dintre care una este backend-ul pentru modelul frontend. Acest design creează un gateway API distinct pentru fiecare tip de client (de exemplu, un gateway pentru clienții mobili și altul pentru aplicații web).

Se recomandă menținerea nivelurilor de comunicare scăzute între diferitele servicii. Comunicarea asincronă este superioară comunicării sincrone în situațiile în care comunicarea este o necesitate. Nu este necesar ca serviciul care a trimis cererea să aștepte un răspuns înainte de a-și continua operațiunile.

Atunci când sunt încorporate în baza de date, cozile de mesagerie și sistemele de streaming sunt modalități bune de a permite comunicarea asincronă. În plus, atunci când aceste sisteme oferă semantică tranzacțională pentru o operațiune de date și pentru trimiterea unui mesaj, ele sunt capabile să îndeplinească ambele cerințe. Din acest motiv, implementarea microserviciilor este ușoară și mai scalabilă. Când sunt folosite doar API-urile REST, comunicarea dintre microservicii este forțată să fie sincronă, ceea ce împiedică adesea creșterea.

Pentru ce este folosită arhitectura de microservicii?

Microservicii este un stil arhitectural la modă care urmărește să proiecteze sisteme complexe ca colecții de artefacte software cu granulație fină și slab cuplate, numite microservicii; fiecare microserviciu implementează o mică parte sau chiar o singură funcție din logica de afaceri a aplicațiilor. Microserviciile câștigă popularitate deoarece urmăresc să proiecteze sisteme complexe ca colecții de artefacte software cu granulație fină și slab cuplate. Microservicii sunt adesea folosite pentru a accelera procesul de dezvoltare a aplicațiilor.

Ideea de micro a fost dezvoltată ca răspuns la infrastructura monolitică pe care au fost construite inițial majoritatea organizațiilor, mai ales dacă afacerea în cauză este în funcțiune de cel puțin zece ani. Fiecare componentă a unei arhitecturi de microservicii include următoarele caracteristici în locul unui design monolitic:

  • CPU unic pentru acesta
  • Sistem propriu de operare și mediu de rulare
  • În multe cazuri, o echipă specializată va lucra la el pentru a se asigura că fiecare serviciu se distinge de celelalte.

Datorită acestui design, fiecare serviciu este capabil să:

  • Executați propria sa procedură unică
  • Comunicați în mod independent unul cu celălalt, fără a fi nevoie să vă bazați pe comunicarea celorlalte microservicii sau a aplicației în ansamblu.

Există o adoptare pe scară largă a arhitecturilor de microservicii bazate pe Java, în special a celor construite folosind Spring Boot. În plus, microservicii și arhitectura orientată spre servicii sunt adesea comparate între ele. Cele două abordări au ambele același obiectiv, care este de a împărți programele software mari în părți mai ușor de gestionat, dar metodologia lor este diferită. În plus, multe companii sunt supuse presiunii rivalilor lor pentru a face ajustări la sistemele lor cât de repede pot, reducând în același timp impactul pe care aceste ajustări îl au asupra disponibilității sistemelor lor. Acest lucru necesită modele adecvate, stiluri arhitecturale și tehnici de dezvoltare. Ingineria software oferă o varietate de paradigme care pot satisface parțial aceste nevoi. Aceste paradigme descompun sistemele software în unități software cu granulație fină, ceea ce îmbunătățește modularitatea, mentenabilitatea și reutilizarea și, ca urmare, reduce timpul necesar pentru a aduce un produs pe piață.

Microservicii
ARXIV

Pe scurt, oferă agilitate pe termen lung. Microserviciile permit o întreținere îmbunătățită în sisteme complexe, mari și foarte scalabile, permițând crearea de aplicații care se bazează pe un număr mare de servicii implementabile independent, fiecare având propriul său ciclu de viață granular și autonom. Acest lucru se realizează permițând crearea de aplicații care se bazează pe un număr mare de servicii.

Microserviciile au avantajul suplimentar de a putea extinde în sine. Nu trebuie să aveți o singură aplicație monolitică pe care trebuie să o extindeți ca o singură entitate, deoarece în schimb puteți extinde microservicii individuale. Veți putea crește doar regiunea funcțională a programului care necesită putere de procesare suplimentară sau lățime de bandă a rețelei pentru a satisface cererea în acest mod, mai degrabă decât să extindeți alte părți ale aplicației care nu necesită scalare. Acest lucru duce la economii de costuri datorită cantității reduse de hardware necesar.

Iată câteva exemple de arhitectură de microservicii

A. Relocare site

Relocarea unui site web este posibilă; de exemplu, un site web care este găzduit pe o platformă monolitică complexă poate fi mutat pe o platformă de microservicii bazată pe cloud și pe containere.

b. Conținut media

Un sistem scalabil de stocare a obiectelor poate fi utilizat pentru a stoca imagini și active video, iar o arhitectură de microservicii poate fi utilizată pentru a oferi aceste materiale direct pe web sau pe dispozitivele mobile.

c. Negocieri financiare și facturare

Este posibil să tratați procesarea plăților și a comenzii ca două servicii distincte. Acest lucru face posibilă preluarea plăților chiar dacă există o problemă cu sistemul de facturare.

d. Procesarea datelor

Serviciile modulare de procesare a datelor pot avea suportul cloud îmbunătățit prin utilizarea unei platforme de microservicii, care poate fi utilizată și pentru procesarea datelor.

Modele de proiectare pentru microservicii

Limbajul tiparului este ghidul tău!

Modele de proiectare pentru microservicii
Modele de proiectare pentru microservicii

a) Modele de descompunere

  • Bulkhead separă resursele importante, cum ar fi pool-ul de conexiuni, memoria și CPU, pentru fiecare sarcină de lucru sau serviciu. Prin implementarea pereților etanși, un singur volum de lucru (sau serviciu) nu poate folosi toate resursele, înfometându-i pe alții. Această abordare îmbunătățește robustețea sistemului prin eliminarea defecțiunilor în cascadă cauzate de un serviciu. Acest model este numit Bulkhead deoarece seamănă cu partițiile secționate ale corpului unei nave. Partiționați instanțele de servicii în grupuri distincte, în funcție de încărcarea clienților și nevoile de disponibilitate. Această arhitectură ajută la izolarea defecțiunilor și vă permite să păstrați capacitatea de serviciu pentru unii utilizatori, chiar și în timpul unei defecțiuni.
  • Sidecar instalează componente utile ale unei aplicații ca un container sau proces distinct pentru a permite izolarea și încapsularea. Acest model poate, de asemenea, permite aplicațiilor să fie compuse din componente și tehnologii disparate. Acest model este denumit Sidecar deoarece seamănă cu un sidecar atașat la o motocicletă. În design, sidecar-ul este cuplat la o aplicație părinte și oferă funcționalități de sprijin pentru aplicație. De asemenea, sidecar-ul urmează aceeași durată de viață ca și aplicația părinte, fiind construit și terminat împreună cu cel părinte. Modelul sidecar este denumit frecvent model sidekick și este ultimul model de descompunere pe care îl arătăm în postare.
  • Strangler Fig acceptă refactorizarea incrementală a unei aplicații, prin înlocuirea treptată a unor elemente specifice de funcționalitate cu servicii noi.
site-tranziție-strangler-fig-pattern
IBM

b) Modele de integrare

1. Model de microserviciu înlănțuit

Vor exista mai multe dependențe pentru un singur serviciu sau microservicii, de exemplu, microserviciul Vânzare depinde de microservicii Products and Order. Un model de design de microservicii înlănțuit vă va ajuta să oferiți un răspuns consolidat la cererea dvs. Un microserviciu-1 primește cererea și apoi comunică cu un microserviciu-2; poate comunica și cu un microserviciu-3. Toate aceste apeluri de service sunt sincrone.

2. Model agregator

Atunci când separă activitatea de afaceri în mai multe bucăți logice mai mici de cod, devine vital să se ia în considerare modul în care datele furnizate de fiecare serviciu vor fi îmbinate. Clientul nu poate fi tras la răspundere pentru acest lucru.

Modelul Aggregator ajută la rezolvarea acestei probleme. Descrie modul în care am putea combina datele din mai multe surse și apoi să oferim rezultatul final utilizatorului. Acest lucru este posibil în două moduri:

  • Un microserviciu compus va efectua apeluri către toate microserviciile necesare, va agrega și va modifica datele, apoi le va returna.
  • Pe lângă partiționarea cererii la mai multe microservicii, un gateway API poate, de asemenea, agrega datele înainte de a le oferi consumatorului.

3. Model proxy

Oferim doar microservicii prin gateway-ul API. Permit GW să dobândească caracteristici API, cum ar fi securitatea și clasificarea API-urilor. În acest caz, gateway-ul API este format din trei module API:

  • Mobile API, care implementează API-ul pentru clientul mobil FTGO
  • Browser API, care implementează API-ul în aplicația JavaScript care rulează în browser
  • Public API, care implementează API-ul pentru dezvoltatori terți

4. Model de ramuri

Este posibil ca un microserviciu să fie nevoie să obțină datele necesare dintr-o varietate de surse diferite, inclusiv alte microservicii. Modelul de microserviciu de ramură este un hibrid dintre modelele de proiectare Aggregator și Chain. Permite procesarea simultană a cererilor/răspunsurilor de la două sau mai multe microservicii și combină beneficiile ambelor. Microserviciul care este invocat poate fi compus din mai multe alte microservicii. Modelul Brach poate fi folosit și pentru a convoca un singur lanț de microservicii sau mai multe lanțuri de același tip, în funcție de cerințele companiei dvs.

microservicii-modele
Microsoft

Beneficiile arhitecturii de microservicii

În viitorul previzibil, nevoia de microservicii se va extinde dramatic. Folosind microservicii, programele vechi sunt actualizate. Prin refactorizare, aplicațiile monolitice pot fi împărțite în microservicii. Acest lucru duce la modernizarea progresivă a software-ului învechit și este de preferat redezvoltării produsului de la zero folosind microservicii. Dezvoltarea aplicațiilor ar putea beneficia foarte mult de un design de microservicii. Mai jos sunt enumerate câteva dintre beneficiile sale majore:

A. Productivitate superioară

Este mai ușor să creați și să mențineți o aplicație dacă este împărțită în secțiuni mai mici, autosuficiente. În funcție de cerințele sale, fiecare serviciu poate fi dezvoltat, implementat și întreținut în mod independent folosind mai multe limbaje de programare, tehnologii și medii software. Deoarece fiecare componentă modulară a unei aplicații are o bază de cod mai mică, este mai simplu să lansați, să scalați, să implementați și să testați mai multe servicii, iar sarcinile aferente pot fi împărțite între echipele de dezvoltare și executate concomitent.

b. Reziliență mai bună

Fiecare microserviciu dintr-o arhitectură de microservicii este un singur serviciu conceput pentru a servi o caracteristică a unei aplicații și pentru a îndeplini sarcini distincte. Fiecare microserviciu se conectează cu alte servicii folosind interfețe simple pentru a gestiona preocupările de afaceri. După stabilirea unui design bazat pe microservicii, întregul proces de detectare și abordare a problemelor legate de performanță devine destul de simplu.

Mai mult, deoarece această formă de proiectare oferă un mecanism îmbunătățit de izolare a erorilor în comparație cu cel al modulelor individuale, aplicațiile mai mari sunt adesea neafectate de o singură defecțiune. Prin urmare, pe termen lung, riscul unei perioade de nefuncționare viitoare este redus considerabil, deoarece dezvoltatorii au o fereastră de timp pentru a lansa o actualizare sau a înlocui un modul fără a fi nevoie să relanseze întregul program.

c. Scalabilitate extinsă

Echipele DevOps pot alege tehnologia optimă pentru fiecare modul fără a-și face griji cu privire la incompatibilitate, dacă fiecare serviciu este creat folosind un limbaj de programare sau o tehnologie diferită. Serviciile individuale pot fi dezvoltate independent și pot fi adăugate noi componente fără întreruperi ale sistemului sau redistribuire. În plus, serviciile pot fi împărțite pe mai multe servere, atenuând efectul de performanță al componentelor foarte solicitante. În câteva secunde, microserviciile pot oferi scalare orizontală.

În realitate, scalarea orizontală ridicată este cea care obligă organizații precum Netflix, Spotify, Uber și Google să treacă de la arhitectura monolitică la arhitectura microservicii. În al doilea rând, dacă un microserviciu este greu de CPU, acesta poate fi scris într-un limbaj de programare optimizat pentru CPU (C/C++, Rust), în timp ce alte microservicii pot fi scrise într-un limbaj interpretat (Java, PHP).

d. Integrare continuă / Livrare continuă (CI/CD)

Livrarea și integrarea continuă sunt elemente fundamentale atât ale metodologiei agile, cât și ale filozofiei DevOps. Designul de microservicii permite unei echipe interfuncționale să construiască, să depaneze, să testeze, să implementeze și să actualizeze serviciile în mod independent, ceea ce va avea ca rezultat o depanare și o implementare mai rapidă pe termen lung.

e. Modularizarea

În arhitectura microserviciilor, bariera dintre microservicii constă în interfețe fizice (de rețea) greu de traversat. În consecință, microservicii bine concepute oferă de obicei modularizare „foarte conectată, foarte coerentă”. Dacă Dezvoltarea Software este comparată cu societatea, atunci Modularea Microservicii este comparabilă cu legile naționale și internaționale cu poliție/pedepse. După cum știm deja, regulile naționale și internaționale stricte pot menține adesea ordinea socială.

f. Programul de lansare

Cel mai frumos aspect al arhitecturii microservicii este că fiecare microserviciu poate fi implementat individual. As a result, the Software Release Cycle for Microservice Applications is substantially shorter, and with CI/CD, many releases may be made each day.

Disadvantages of Microservices Architecture

A. Increased Complexity of Communication Between the Services

When an application is broken up into smaller parts, it takes more time to send and receive messages. When handling requests between the different modules, developers have to be extra careful. Different systems might talk to each other in different ways, so there might be a need for an interpreter. This can make it harder to set up the whole system all at once. One of the biggest problems with microservices is that it might be hard to switch from a monolith to microservices because it's hard to manage.

This basically means that a lot of services made by a lot of different teams are deployed in a lot of different places, making it very hard to manage them. For example, Monolithic Architecture gives the same answer whether a Web app has a few thousand lines of code or several million lines of code (Enterprise Java or Ruby on Rails or PHP). But in Microservice Architecture, there are many possible solutions depending on the applications and use cases.

So, Microservice Architecture is doomed to fail if the wrong solution is used for the wrong application size or type (like putting a child's clothes on an adult man or the other way around). Also, it's hard to design Microservices because they have a lot more moving parts than Monoliths. Most of the time, a Microservice with bad design is worse than a Monolith.

Increased Complexity of Communication Between the Services
Increased Complexity of Communication Between the Services MartinFowler

b. Complex Configuration

Despite being isolated and self-contained, a microservice must be regularly configured, especially when it is moved from development to test to staging to production. This arrangement may be rather intricate. Moreover, if a microservice must utilize other microservices, these bindings must be defined before deployment or even during runtime.

c. Context Boundary Translation

Despite the fact that it would be ideal if all microservices within a MOA used the same data structures and communication protocols to interact with one another, this is typically not the case.

d. More Assets in Return for More Autonomy

MOAs demand a great deal of horsepower. Remember that each MOA microservice has its own runtime environment and data storage. In some instances, even the most streamlined microservice might consume the same amount of resources as a single monolithic program.

e. Unfeasible for Small Applications

Larger applications can benefit from microservices design. However, implementation will likely be more time-consuming and difficult for smaller applications.

f. Relatively Complex Deployment

The deployment might be a difficult and complicated process. During deployment, coordination between numerous services would be required. Deploying a WAR file in a container would not be as straightforward as it sounds.

g. Distributed Debugging

The difficulty of troubleshooting a MOA including hundreds of microservices communicating in concert is one of the downsides of microservices. Tracing the course of a request into and out of a MOA is challenging due to the independence of each container. The MOA is opaque if there is no effective monitoring mechanism in place. Logging the internals of a MOA offers a limited perspective, but MOA monitoring requires a comprehensive view.

h. Contributes to Enhanced Fault Tolerance

Large applications with several services deployed have more fault tolerance in the event that any one module fails. Microservices allow applications to continue functioning even if one service fails. This is because the services are not tightly coupled.

i. Costly

An improper service partition might be expensive. For instance, if an application is improperly partitioned, the services are connected to a certain degree, and they will create numerous inter-service interactions via the network, which can degrade performance.

j. Greater Security Risks

Lastly, because microservices will reside across several environments, computers, and API requests, they provide a greater number of entry points for an attacker to compromise the system.

k. Communication Complexities

Microservices accomplish rigorous modularity and development independence via process/network barriers, as previously mentioned. The disadvantage is that services may only communicate over the physical network, resulting in increased network latency. Microservices may connect with one another in a variety of methods, including synchronous communication using REST, gRPC, and asynchronous communication using Message Queue and Message Broker, each of which has advantages and disadvantages.

Synchronous communication is simpler to build, but it might result in a Distributed Monolith. Asynchronous Communication via Messaging provides greater flexibility at the expense of increased implementation complexity. In Microservice Architecture, choosing the appropriate Communication channel based on the application is equally tough.

l. Configurație complexă

În ciuda faptului că este izolat și autonom, un microserviciu trebuie configurat în mod regulat, mai ales când este mutat de la dezvoltare la testare la punere în scenă la producție. Acest aranjament poate fi destul de complicat. În plus, dacă un microserviciu trebuie să utilizeze alte microservicii, aceste legături trebuie definite înainte de implementare sau chiar în timpul rulării.

Instrumente pentru microservicii

1. Sistem de operare

Cel mai important aspect al dezvoltării unei aplicații este stabilirea unei baze solide pentru aceasta, ceea ce este responsabil pentru sistemul de operare. Linux este un exemplu de acest tip de sistem de operare care este frecvent utilizat pe parcursul procesului de dezvoltare a aplicației. Veți avea acces la un mediu de execuție autonom atunci când utilizați containere Linux. Acest lucru vă oferă posibilitatea de a orchestra o gamă largă de servicii, de la stocare și rețea până la securitate și autentificare.

2. Limbaje de programare

Cu Emizentech, vă puteți extinde acum fără probleme repertoriul de programare. Acest instrument este atât practic, cât și de actualitate. În general, este conceput pentru a fi utilizat cu toate limbajele de programare. În plus, este compatibil cu bytecode care este afișat pe BEAM, care este denumit și mașina virtuală Erlang.

3. Instrumente de management și testare API (gateway-uri API)

Acțiunea de a construi și de a lansa API-uri, de a le impune standardele de utilizare, de a restricționa accesul, de a cultiva comunitatea de dezvoltatori, de a colecta și de a analiza statistici de utilizare și de a raporta performanța sunt toate componente ale administrării API-urilor.

În realitate, o platformă de management API este compusă din următoarele elemente:

  • Instrumente de dezvoltare
  • Poarta de acces
  • Raportare și analiză

4. Instrumente de mesagerie (Messagerie și flux de evenimente)

Pentru ca comunicațiile să aibă loc, sistemul de microservicii trebuie să utilizeze servicii independente. Acesta este factorul principal care determină ce necesită coada de mesaje de la utilizatorii săi. RabbitMQ și Apache Kafka sunt două dintre cele mai populare soluții care sunt utilizate în scopul mesageriei.

LinkedIn este responsabil pentru crearea tehnologiei cunoscute sub numele de Apache Kafka, care a fost ulterior contribuit la comunitatea Apache.

Modelele sunt utilizate de instrumentul RabbitMQ pentru a facilita comunicarea între numeroasele Microservicii. În plus, ajută la procesul de scalare a aplicațiilor simultan.

5. Truse de instrumente

Pentru a spune mai simplu, un set de instrumente este doar o colecție de instrumente care sunt folosite pe parcursul execuției unei anumite proceduri. Setul de instrumente este o componentă a arhitecturii microservicii care face posibilă construirea multor aplicații. Din acest motiv, există o mare varietate de truse de instrumente, fiecare dintre ele servește unui obiectiv distinct în aplicarea sa. Multe instrumente care sunt disponibile pentru a alege din Fabric8 și Seneca.

  • Fabric8 este o platformă ca tehnologie de serviciu care, cu asistența Git, permite dezvoltatorilor de software să creeze un sistem de management al configurației pentru aplicațiile lor.
  • Seneca, care funcționează ca un Nod, este folosit în procesul de dezvoltare a microserviciilor orientate pe mesaje.

6. Cadre arhitecturale și Setul de instrumente Js

Deoarece microserviciile sunt un stil arhitectural, este esențial să acordați atenție cadrului arhitectural pe care îl folosesc. Acestea sunt cadrele care sunt utilizate împreună cu tehnologiile actuale pentru a construi cele mai recente aplicații. Goa și Kong sunt acum cele mai populare cadre arhitecturale.

7. Instrumente de orchestrare

Datorită modului în care containerele și microserviciile funcționează împreună, orchestrarea containerelor este un subiect foarte important la care trebuie să ne gândim. Conductor, Kubernetes și Istio sunt cele trei soluții de orchestrare a microserviciilor care sunt cel mai des folosite pentru orchestrarea containerelor. Cu toate acestea, există multe alte instrumente disponibile. Ca parte a ecosistemului software cu sursă deschisă (OSS) pe care Netflix îl menține, dirijorul servește drept motor de orchestrare a microserviciilor. Conductorul este un program care se execută în cloud și utilizează o implementare numită flow orchestrator pentru a desfășura diverse activități folosind microservicii. În plus, face mai ușor să guvernezi și să vezi toate interacțiunile care au loc între microservicii.

8. Instrumente de monitorizare

După ce aplicația de microserviciu a fost construită, sarcinile asociate acesteia trebuie apoi gestionate. Veți avea nevoie de instrumente de monitorizare pentru microservicii pentru a realiza același lucru. Prometheus și Log Stash sunt cele două tehnologii de monitorizare a microserviciilor care sunt utilizate cel mai frecvent. Logstash este un program excelent. Este o platformă care vă permite să consolidați, să stocați și să manipulați date și este open source.

9. Instrumente fără server

Componenta semnificativă SA a microserviciilor este tehnologia serverless, adesea cunoscută sub numele de function-as-a-service. Îmbunătățește eficiența procesului de demontare a obiectelor în componentele lor cele mai fundamentale. Atât Claudia, cât și AWS Lambda sunt exemple de instrumente fără server care sunt utilizate pe scară largă pentru dezvoltarea de microservicii. Instalările AWS Lambda și API Gateway fac, de asemenea, parte din responsabilitățile Claudiei. În plus, Claudia este capabilă să automatizeze desfășurarea și activitățile de configurare predispuse la erori, menținând în același timp funcționalitatea „out of the box”.

10. Containers, Docker și Kubernetes

  • Containere: Containerele virtualizează în esență sistemul de operare gazdă (sau nucleul), izolând nevoile unei aplicații de cele ale altor containere care se execută pe același computer.
  • Docker: Docker este alcătuit din mai multe părți diferite, inclusiv un timp de rulare al containerului, care este denumit dockerd, un generator de imagini de container cunoscut sub numele de BuildKit și o interfață de linie de comandă care este utilizată pentru a interacționa cu constructorul, containerele și motorul. (numit docker).
  • Kubernetes este o tehnologie de gestionare a containerelor gratuită și open-source care combină un grup de computere într-un singur grup de resurse de calcul. Kubernetes a fost dezvoltat de Google. Kubernetes vă permite să vă structurați aplicațiile sub formă de grupuri de containere, care sunt apoi executate de motorul Docker. Kubernetes are grijă să se asigure că aplicația dvs. continuă să funcționeze în modul pe care îl specificați.

Modele comune în arhitectura microserviciilor

A. Model backend-for-frontend (BFF).

BFF oferă o interfață simplă între frontend și microservicii. Într-un scenariu ideal, echipa front-end va fi, de asemenea, responsabilă de gestionarea BFF-ului. Un singur BFF este preocupat exclusiv de o singură interfață de utilizare. În consecință, vom putea să ne simplificăm front-end-urile și să avem o singură vizualizare a datelor prin backend-ul său.

b. Modele de entități și agregate

O entitate este un lucru distinct bazat pe identitatea sa. Pe un site de comerț electronic, de exemplu, un obiect produs poate fi identificat prin numele, tipul și prețul produsului. Un agregat este un grup de lucruri care ar trebui să fie considerate ca o singură unitate. Prin urmare, pentru site-ul de comerț electronic, o Comandă ar fi colecția (agregatul) de lucruri (entități) pe care un client le-a cumpărat. Aceste modele sunt folosite pentru a clasifica datele în mod semnificativ.

c. Modele de descoperire a serviciilor

Ele joacă un rol crucial în facilitarea descoperirii de servicii și aplicații. Instanțele de servicii pot varia în contextul arhitecturii microservicii din cauza unor cauze cum ar fi eșecul serviciului, scalabilitatea, întreruperea serviciului și upgrade-uri. Aceste modele oferă instrumente pentru descoperire pentru a face față acestei efemerări. Folosind verificările de sănătate și defecțiunile serviciului ca declanșatori de reechilibrare a traficului, echilibrarea încărcăturii poate folosi tehnici de descoperire a serviciilor.

d. Modele de microservicii de adaptor

Designul Adaptor Microservices se adaptează, dacă este necesar, între un API orientat spre afaceri construit folosind tehnici de mesagerie RESTful sau ușoare - folosind aceleași metodologii bazate pe domeniu ca un microserviciu tipic - și un API moștenit sau un serviciu SOAP clasic bazat pe WS-*. Adaptarea este necesară, de exemplu, atunci când unei echipe de dezvoltare îi lipsește controlul descentralizat asupra sursei de date a unei aplicații.

e. Model de aplicare Strangler

Modelul Strangler este un model arhitectural binecunoscut pentru transformarea lent a unei aplicații monolitice în microservicii prin înlocuirea unei funcționalități specifice cu un serviciu nou.

Anti-modele în arhitectura microserviciilor

A. Coeziunea Haos

Serviciile trebuie să se alinieze în mod clar la o capacitate de afaceri și nu ar trebui să încerce să realizeze nimic în afara domeniului lor de aplicare. Separarea funcțională a preocupărilor este critică pentru ca arhitectura să poată fi gestionată; în caz contrar, ar distruge agilitatea, performanța și scalabilitatea, rezultând o arhitectură strâns conectată, cu entropie de livrare și haos de coeziune.

b. Arhitectură de servicii stratificată

Una dintre cele mai răspândite greșeli SOA a fost înțelegerea greșită a modului de a realiza reutilizarea serviciului. Echipele au fost în mare parte preocupate de coeziunea tehnică, mai degrabă decât de reutilizarea funcțională.

c. Complexitate

Un alt factor important de susținere a arhitecturii microservicii este maturitatea organizațională. Echipele de dezvoltare trebuie reformate pentru a-și asuma o responsabilitate mai mare pentru întregul stack, DevOps, mai degrabă decât să trimită pur și simplu bilete de sens către echipa de infrastructură.

d. Strategie de versiune proastă

O strategie de versiune ineficientă are ca rezultat cod de negestionat și dependențe. Ca rezultat, ar trebui să existe o abordare eficientă de versiuni pentru arhitectura Microservicii. Una dintre cele mai de bază abordări este crearea unei versiuni API și includerea versiunii în URL-ul rutei.

e. Proiectarea incorectă a modelelor de acces la date pentru volumul de lucru pentru microservicii

Modele necorespunzătoare de acces la date pentru volumul de lucru Microservicii: Arhitectura unui Microserviciu depinde de baza de date a unei organizații. Tiparele de acces la date în microservicii ar trebui să fie clar separate. Este adesea acceptabil să se utilizeze o singură bază de date în mai multe instanțe de serviciu, atâta timp cât datele sunt în tabele/colecții partiționate corespunzător.

f. Tulburarea de dependență

Tulburarea de dependență este un anti-pattern care se dezvoltă atunci când ești conștient că serviciile trebuie să fie implementate într-o anumită ordine pentru a funcționa corect. Atunci când nu există control asupra separării funcționale a preocupărilor, poate apărea haosul de coeziune.

O modalitate bună de a evita acest anti-model este prin introducerea unui Gateway API.

Diferențele dintre monolitic, microservicii și arhitectura orientată spre servicii

Monoliți și Microservicii
Monoliți și microservicii MartinFowler
Microservicii SOA Monolitic
Proiecta Serviciile sunt construite în unități mici și exprimate formal cu API-uri orientate spre afaceri. Serviciile pot varia în dimensiune oriunde, de la servicii de aplicații mici la servicii pentru întreprinderi foarte mari, inclusiv mult mai multe funcționalități de afaceri. Aplicațiile monolitice evoluează în dimensiuni uriașe, o situație în care înțelegerea integrală a aplicației este dificilă.
Utilizabilitate Serviciile sunt expuse cu un protocol standard, cum ar fi un API RESTful, și sunt consumate/reutilizate de alte servicii și aplicații. Servicii expuse cu un protocol standard, cum ar fi SOAP, și consumate/reutilizate de alte servicii – folosește middleware de mesagerie. Reutilizarea limitată este realizată în aplicațiile monolitice.
Limitat
Scalabilitate Serviciile există ca artefacte de implementare independente și pot fi scalate independent de alte servicii. Dependențele dintre servicii și subcomponentele reutilizabile pot introduce provocări de scalare. Scalarea aplicațiilor monolitice poate fi adesea o provocare.
Agilitate Unitățile mai mici, independente, implementabile, ușurează gestionarea construcției/lansării, prin urmare agilitate operațională ridicată. Îmbunătățește partajarea componentelor care crește dependențele și limitează capacitățile de gestionare. Este dificil de realizat agilitate operațională în desfășurarea repetată a artefactelor de aplicație monolitice.
Dezvoltare Dezvoltarea serviciilor permite în mod discret dezvoltatorilor să utilizeze cadrul de dezvoltare adecvat pentru sarcina în cauză. Componentele reutilizabile și practicile standard ajută dezvoltatorii să implementeze. Aplicațiile monolitice sunt implementate folosind o singură stivă de dezvoltare (adică, JEE sau .NET), care poate limita disponibilitatea „instrumentului potrivit pentru job”.
date descentralizate
date descentralizate MartinFowler

Piețe verticale cheie care solicită microservicii

Asistență medicală: se preconizează că piața microserviciilor de asistență medicală va crește de la 130 de milioane de dolari în 2015 la 519 de milioane de dolari până în 2025. Nevoile pentru o lansare mai rapidă a serviciilor, o acceptare mai rapidă a tehnologiilor noi și o eficiență mai bună stimulează dezvoltarea în industria sănătății. Industria sănătății caută răspunsuri pentru nevoile sale de securitate a datelor și de conformitate cu reglementările, precum și pentru a depăși dificultățile de implementare.

Servicii bancare, financiare și de asigurări: Aspen Mesh identifică trei beneficii importante ale microserviciilor pentru serviciile financiare: securitate sporită prin crearea unui serviciu de identitate distinct, livrare mai rapidă a noii funcționalități și un strat API mai ușor de gestionat.

Guvern: Pe lângă diferitele beneficii ale arhitecturii de microservicii, companiile guvernamentale pot beneficia de capacitatea sa de a proiecta funcționalități care corespund obiectivelor de afaceri, permițând echipelor IT să stabilească sau să îmbunătățească serviciile în funcție de cerințele constituenților.

Retail: Amazon și eBay au dovedit beneficiile microserviciilor pentru industria de retail, inclusiv servicii extrem de accesibile și scalabile și o gestionare mai eficientă a erorilor și a erorilor.

Media și divertisment: În 2009, Netflix a migrat la microservicii, iar în prezent serviciul procesează 2 miliarde de solicitări edge în fiecare zi, folosind mai mult de 500 de microservicii. Schimbarea oferă viteză, scalabilitate și accesibilitate.

Exemple de companii care au adoptat arhitectura de microservicii

Amazon, Coca-Cola și Zalando, printre altele, își schimbă infrastructurile IT într-o arhitectură de microservicii. În plus, își reorganizează structurile organizaționale interne și își împing întreprinderile în prim-planul pieței. Implementarea arhitecturii de microservicii este plăcută atunci când obțineți cunoștințe de la cei mai buni din industrie. Iată câteva dintre cele mai eficiente instanțe de microservicii.

#1. Uber

Arhitectura de microservicii Uber de la mijlocul anului 2018 de la Jaeger
Arhitectura de microservicii Uber de la mijlocul anului 2018 de la Jaeger

Conceptul de proprietate a fost devastat de dependențe monolitice împletite. Migrația a devenit o provocare. Dezvoltatorii noi nu au putut contribui la monolit. Micile erori au dus la rezultate catastrofale. Uber a ales să implementeze servicii bazate pe cloud. Uber a dezvoltat microservicii pentru mai multe operațiuni, inclusiv facturarea și gestionarea pasagerilor și călătoriilor. Gateway-urile API sunt folosite pentru a comunica cu serviciile.

În plus, Uber a stabilit standarde la nivel mondial pentru microserviciile sale. Ele oferă criterii cantitative pentru documentare, fiabilitate, toleranță la erori și așa mai departe. Aceste caracteristici au fost monitorizate folosind indicatori comerciali precum vizitele pe pagini. Curând, serviciile lor au atins apogeul excelenței.

#2. Netflix

Netflix a migrat apoi la o infrastructură de date distribuite bazată pe cloud. AWS a fost folosit pentru a furniza sisteme scalabile orizontal și servicii/funcții suplimentare. În 2009, Netflix și-a început transferul, care a fost finalizat după aproape trei ani. Apoi Netflix a convertit toate aplicațiile sale orientate către utilizatori în microservicii autonome. În 2012, schimbarea de look a fost terminată. Până în 2015, Netflix a eliminat toate întreruperile serviciului și a putut procesa aproximativ 2 miliarde de interogări API pe zi. În prezent, Netflix are peste 139 de milioane de utilizatori în 190 de țări. Astăzi, Netflix operează separat aproximativ 700 de sisteme de microservicii.

#3. Amazon

Amazon a avut un monolit mare în 2001. În 2021, practic toată lumea este familiarizată cu Amazon Web Services (AWS) – o soluție internă care a devenit un serviciu comercial de cloud computing datorită superiorității sale. Microserviciile sunt excelente pentru comerțul electronic, deoarece pot urmări activitatea utilizatorului, achizițiile și întregul canal de vânzări. Potrivit managerului senior de produs la Amazon

Apoi, ei produc date care sunt utile pentru optimizarea prezentării produselor și a procesului de vânzare în sine. Amazon este una dintre primele companii în care microservicii au jucat un rol semnificativ în modificarea întregii organizații. Gigantul din întreaga lume a obținut un succes uimitor într-o perioadă în care designul monolit era „norma” pentru construirea sistemelor de tehnologie a informației.

Toate modificările semnificative ale codului au fost blocate în procesul de implementare timp de săptămâni înainte de a fi puse la dispoziție utilizatorilor. Amazon a folosit microservicii pentru a eficientiza și a reduce durata procesului. Separând structurile în aplicații individuale, dezvoltatorii au putut să determine unde erau blocajele, natura încetinirilor și să reconstruiască structurile ca arhitecturi orientate spre servicii, fiecare cu o echipă mică dedicată unui singur serviciu.

Ceea ce a început ca o curățare a sistemului a dus la creșterea unuia dintre principalii jucători online din arhitectura contemporană. Amazon a fost pionier în calea altor afaceri prin lansarea unei succesiuni de tehnologii open-source, cum ar fi AWS (Amazon Web Services), care sunt acum omniprezente.

#4. eBay

Sistemul eBay acceptă aproximativ o mie de microservicii. Experiențele front-end, cum ar fi web și aplicațiile native iOS și Android, contactează serviciile intermediare care coordonează apelurile, care comunică apoi cu serviciile back-end. Fiecare dintre servicii are propriul grup de dezvoltare autonom. Majoritatea microserviciilor eBay au evoluat fără un arhitect, iar sistemul a fost întotdeauna proiectat de jos în sus. Majoritatea firmelor mari, cum ar fi eBay, au aterizat pe o colecție de microservicii poliglote care funcționează în funcție de cerințele clienților și, desigur, sunt în continuă schimbare.

microservicii eBay
Microservicii eBay Dzone

#5. SoundCloud

Fiecare serviciu este dezvoltat și implementat independent, conectându-se cu alte servicii prin intermediul rețelei folosind standarde ușoare de schimb de date, cum ar fi JSON sau Thrift. Pe toată durata schimbului, noile microservicii nu au putut să modifice modelul relațional în MySQL sau, chiar mai rău, să utilizeze un alt motor de stocare. În circumstanțe extreme, cum ar fi mesageria de la utilizator la utilizator, în care un model bazat pe fire de execuție a fost înlocuit cu unul asemănător chat, compania a folosit cronjob-uri pentru a sincroniza baze de date separate.

#6. Spotify

Pentru a preveni iadul de sincronizare în interiorul companiei, Spotify este proiectat pe o arhitectură de microservicii cu echipe autonome full-stack responsabile. Spotify folosește o arhitectură de microservicii în care fiecare dezvoltator de software scrie într-un „teritoriu” închis, cu propriile capacități unice. Fiecare microserviciu are o singură responsabilitate simplă și, în majoritatea circumstanțelor, o bază de date și o logică care nu poate fi accesată de un alt proces.

Ce fel de provocări vă pot ajuta microserviciile să depășiți?

Aceasta este soluția la întrebarea „ce dificultăți rezolvă microserviciile?”; haideți să examinăm obstacolele pe care arhitecturile de microservicii le-au ajutat să le depășească.

CAZUL 1 Soldul eBay a fost recâștigat

eBay utilizează aproape o mie de servicii. Multe servicii front end trimit apeluri API, în timp ce serviciile back end efectuează operațiuni administrative și legate de expediere. eBay a folosit inițial un program monolitic Perl și C++. Site-ul eBay este un produs principal, așa cum este pentru mulți alți titani ai internetului. Necesitatea de a adăuga mai multe funcții incrementale pe site-ul eBay a continuat să crească. În plus, acest tip de site web trebuia să fie accesibil 24 de ore pe zi, șapte zile pe săptămână, chiar dacă erau adăugate noi funcții.

Datorită necesității de a minimiza timpul de nefuncționare, eBay a optat să treacă la arhitectura de microservicii. Acest lucru a permis site-ului să devină mai stabil și a promovat integrarea asincronă. Au fost aduse îmbunătățiri semnificative flexibilității implementării și duratei ciclului de lansare. Când serviciile au fost izolate, eficiența performanței a crescut și extinderea a fost mai ușoară.

CAZUL 2 Uber și expansiune rapidă

Uber, cel mai popular serviciu de taxi-hailing, a început cu un singur pachet pentru a deservi navetiștii din San Francisco, unde a fost implementat inițial. Acest software strâns conectat a reușit să gestioneze majoritatea, dacă nu toate, activitățile de afaceri, inclusiv serviciile de facturare, plăți și conectare la șofer. Pe măsură ce compania s-a dezvoltat, însă, lucrurile au început să scadă. Uber și-a extins aria de acoperire și a oferit alte servicii.

Pe măsură ce s-au adăugat alte caracteristici, pachetul a devenit mai coeziv. Toată logica era cuprinsă într-o singură locație și au început să apară dificultăți. În curând, chiar și o mică modificare a cerut ca întregul program să fie redistribuit. Integrarea continuă a devenit aproape imediat o responsabilitate majoră.

Absența modelului de proprietate s-a datorat multor dependențe interdependente ale monolitului. Prin urmare, migrația a fost dură. De asemenea, sa întâmplat că dezvoltatorii nou angajați nu au putut să contribuie la monolit. Chiar dacă a apărut o eroare minoră, consecințele au fost grave. Acesta este momentul în care au luat decizia de a implementa microservicii. Mișcarea lor a durat ceva timp. Ei au dezasamblat întregul serviciu și au migrat aplicația monolitică la o arhitectură orientată spre micro servicii, construită folosind Python, Node.js și Apache Thrift.

CAZ 3 Timp de funcționare îmbunătățit al Twitter

Era aceeași poveste veche: Twitter a folosit pentru prima dată designul monolitic, ceea ce a avut mult sens. Cu toate acestea, atunci când mai multe persoane s-au înregistrat pe Twitter, au apărut probleme. SDLC a devenit mai mare și mai greoaie, cu timpi de construcție mai lungi, iar scalabilitatea sa s-a deteriorat semnificativ, apărând ocazional avertismente de eroare de supracapacitate.

Twitter a recurs la schimbarea arhitecturii la microservicii pentru a rezolva această problemă. Fiecare microserviciu a fost creat pentru a fi modular, bine definit și autonom. Ei pot testa și implementa individual fiecare componentă. Ele pot fi, de asemenea, măsurate independent. În curând, avertismentele de eroare au dispărut complet.

CAZUL 4 KarmaWifi și Spaghetti Code

Există oameni, gadget-uri și un magazin pe Karma. La un moment dat, cu un program monolitic disponibil, codul legat de utilizator a ajuns în porțiuni legate de dispozitiv. În plus, API-urile magazinului au urmat API-urile dispozitivului. Curând, a devenit dificil să stabilim ce s-a schimbat și cine l-a schimbat. Deși scopul inițial a fost împărțirea monolitului în biblioteci funcționale, s-a constatat că extinderea și adaptarea la versiuni de software mai noi ar fi o provocare. În plus, aceștia nu ar putea experimenta inovațiile viitoare care vor fi introduse pe piață.

Până atunci, au optat să folosească o arhitectură bazată pe microservicii. Când au considerat că este esențial, au separat părți ale aplicației back-end în servicii individuale. Piesele au fost inițial enorme, dar în timp au fost împărțite în servicii mai mici. În cele din urmă, fiecare microserviciu a avut o singură sarcină și o dimensiune maximă de care să vă faceți griji.

CAZUL 5 Performanța îmbunătățită a Walmart

Aventura de microservicii a Walmart a început odată cu achiziționarea unei platforme DevOps de la o afacere mică numită OneOps. Ei au ales să facă din aceasta o inițiativă open-source, astfel încât să poată contribui înapoi la comunitate.

Au început să utilizeze tehnologii precum bazele de date Node.js și Cassandra pentru a crea diverse microservicii care ar putea fi declanșate dinamic prin intermediul API-urilor. Obiectivul a fost de a face mai simplu pentru dezvoltatorii care lucrează în numeroasele divizii de afaceri ale Walmart să dețină aplicațiile lor și să le împuternicească să facă acest lucru. Ei au descoperit că aceasta a scăzut dependența de un grup IT centralizat.

În cele din urmă, capacitatea dezvoltatorilor de a extinde capacitățile back-end ale ofertelor de comerț electronic ale organizației a contribuit la creșterea agilității afacerii.

Cum se implementează arhitectura de microservicii pe Android și iOS?

  1. Pasul 1: Decideți dacă este într-adevăr ceea ce are nevoie afacerea dvs.
  2. Pasul 2: Dacă da, uită-te la infrastructura care este deja acolo.
  3. Pasul 3: Pregătește-ți echipa să folosească metoda.
  4. Pasul 4: Dacă treceți de la un sistem monolitic la un sistem de microservicii, verificați cu administratorul de date pentru a vedea dacă sunt bine informați și dacă înțeleg sarcina.
  5. Pasul 5: Alegeți limba și cadrul pentru codare.
  6. Pasul 6: Configurați arhitectura de bază cu servicii, containere și șabloane de mașini virtuale.
  7. Pasul 7: Împărțiți baza de date în mai multe baze de date mai mici dacă arhitectura dvs. este un „monolit”.
  8. Pasul 8: Puneți gateway-urile API la locul lor.
  9. Pasul 9: Urmăriți urmărirea și faceți o hartă a acesteia.
  10. Pasul 10: Testați folosind automatizarea.

Microservicii sunt viitorul?

Obiectivul principal al acestui articol este de a explica conceptele și principiile fundamentale ale microserviciilor. Făcând efort pentru a realiza acest lucru, este evident că considerăm stilul arhitectural al microserviciilor ca fiind un concept esențial – unul pe care aplicațiile corporative ar trebui să-l examineze cu atenție. Recent, am dezvoltat o serie de sisteme care folosesc acest mod și suntem conștienți de alții care apreciază această metodă. Amazon, Netflix, The Guardian, Serviciul digital guvernamental al Regatului Unit, realestate.com.au, Forward și comparethemarket.com sunt printre cei despre care suntem conștienți care sunt pionieri în stilul arhitectural într-o anumită formă.

Microserviciile sunt aici pentru a rămâne. În următorii doi ani, este probabil ca 56% dintre non-utilizatori să adopte microservicii, 78% dintre utilizatori își vor crește investiția în microservicii, iar aplicațiile cu 59% reducere vor fi create cu microservicii. IBM

Adesea, ramificațiile reale ale deciziilor arhitecturale nu sunt evidente decât câțiva ani mai târziu. O echipă bună, cu o dorință puternică pentru modularitate, a construit uneori un design monolitic care s-a deteriorat în timp. Mulți indivizi susțin că o astfel de deteriorare este mai puțin posibilă cu microservicii, deoarece limitele serviciilor sunt evidente și greu de remediat. Cu toate acestea, nu putem evalua cu exactitate maturitatea arhitecturilor de microservicii până când nu avem un număr suficient de sisteme cu o vechime suficientă.

Există cu siguranță motive pentru a anticipa că microserviciile se vor dezvolta lent. Succesul oricărei eforturi de componentizare depinde de cât de bine se potrivește software-ul în componente. Este dificil de determinat unde trebuie plasate marginile componente. Designul evolutiv recunoaște dificultatea stabilirii limitelor corecte și, prin urmare, importanța simplificării reelaborarii lor. Cu toate acestea, atunci când componentele dumneavoastră sunt servicii cu comunicații externe, refactorizarea este mult mai dificilă decât atunci când lucrați cu biblioteci în proces.

Mutarea codului peste granițele serviciului este complexă, orice modificare a interfeței trebuie aranjată între participanți, trebuie stabilite straturi suplimentare de compatibilitate, iar testarea este complicată. Dacă componentele nu se compun bine, doar mutați complexitatea din interiorul unei componente la legăturile dintre componente. Acest lucru nu numai că schimbă complexitatea, dar o mută și într-o locație care este mai puțin explicită și mai dificil de guvernat. Când examinăm interiorul unei componente mici, simple, este ușor să treci cu vederea legăturile complicate dintre servicii și să concluzi că lucrurile sunt mai bune decât sunt de fapt.

În cele din urmă, trebuie luată în considerare competența echipei. Echipele pricepute sunt mai susceptibile de a adopta noi practici. O abordare care are mai mult succes pentru o echipă înalt calificată, totuși, poate să nu funcționeze întotdeauna pentru o echipă mai puțin calificată. Am văzut câteva exemple de echipe incompetente care construiesc structuri monolitice neglijente, dar va dura timp pentru a determina ce se întâmplă atunci când acest tip de haos are loc cu microservicii. O echipă proastă va produce întotdeauna un sistem slab; este greu de spus dacă microservicii îmbunătățesc sau înrăutățesc situația în această circumstanță.

 Așa că scriem asta cu optimism prudent. Credem că microserviciile sunt aici pentru a rămâne!

De ce să alegeți EmizenTech?

Emizentech vă poate ajuta să vă migrați aplicația de la o arhitectură monolitică la o arhitectură de microservicii. Vă putem ajuta să faceți aplicația dvs. corporativă simplă de întreținut și scalabilă. Dacă doriți să vă creșteți și să vă dezvoltați afacerea și căutați noi modalități de a face acest lucru, emizentech vă poate ajuta în modul corect, asigurându-vă totodată o creștere pe termen lung. De asemenea, puteți vizita site-ul nostru web pentru a afla mai multe despre microservicii, pentru a vă da seama dacă compania dvs. este pregătită pentru acestea și pentru a vorbi despre cum să implementați această arhitectură. Este o modalitate de a face software care se concentrează pe împărțirea unei aplicații în module care fac un singur lucru și au interfețe bine definite.

Caracteristicile distinctive ale serviciilor noastre sunt:

  • O arhitectură bazată pe domeniu pentru a preveni eșecul aplicației
  • Asigurați un grad ridicat de scalabilitate
  • Proiectare descentralizată a bazei de date
  • Activați izolarea simplă a erorilor și
  • Activați livrarea continuă utilizând cultura DevOps.

Gânduri de închidere

Fă următorul pas!

În acest blog, am depus un efort pentru a investiga mai multe fațete ale arhitecturii microservicii și posibilitățile pe care le prezintă. Funcționalitatea unui sistem de aplicații poate fi împărțită într-un număr de unități funcționale mai mici atunci când se utilizează o abordare arhitecturală cunoscută sub numele de microservicii. Implementarea și gestionarea serviciilor sunt gestionate separat una de cealaltă. Când sistemele monolitice sunt împărțite în bucăți mai mici folosind o arhitectură de microservicii, numărul de componente individuale crește dramatic.

Prin urmare, este necesar să existe un management eficient al dependențelor care există între ele. În comparație cu arhitectura software monolitică, este adevărat că crearea și executarea unei arhitecturi de microservicii prezintă o serie de provocări și necesită o schimbare de paradigmă. Într-o ordine similară, Arhitectura Microservice nu este în niciun caz un glonț magic care poate rezolva problemele de complexitate care apar în orice și toate tipurile de sisteme.

Când totul este luat în considerare, credem că arhitectura de microservicii este un instrument extrem de util și convenabil pentru dezvoltarea software-ului contemporan. Arhitectura de microservicii este singura strategie viabilă pentru marile întreprinderi care generează de obicei software complicat, deoarece este singura metodă de a face față în mod eficient complexității și de a menține un avantaj competitiv pe piață. Arhitectura de microservicii ar trebui utilizată pentru dezvoltarea durabilă a software-ului, care poate oferi beneficii pe termen lung, nu numai de către marile corporații, ci și de către întreprinderile mici și mijlocii.

Este important de remarcat faptul că primii care au adoptat arhitectura microservicii, cum ar fi Spotify, Netflix, LinkedIn, Amazon și Google, au reușit să obțină avantaje competitive majore față de rivalii lor ca urmare a adoptării arhitecturii microservicii. Dezvoltarea și examinarea unui model arhitectural sunt ambele opțiuni viabile pentru a ajuta la acest demers. Această metodă promite să simplifice lucrurile și să simplifice viața dezvoltatorilor fără a afecta negativ rezultatul final, ceea ce este deosebit de important acum, când firmele intră într-o nouă perioadă de concurență acerbă.

Marea majoritate a companiilor sunt interesate să-și sporească eficiența costurilor și, în acest context, se anticipează că arhitectura fără server va dobândi o popularitate mai mare în următorii ani. Aria potențială a microserviciilor în viitorul lumii pare a fi destul de promițătoare.

Pot microserviciile să vă ajute afacerea să avanseze? Nu ezitați să ne contactați pentru o consultație neobligatorie!

Multumesc pentru lectura!

Întrebări frecvente despre arhitectura microserviciilor

  1. De ce ați opta pentru arhitectura de microservicii?

    Designul microserviciilor are mai multe avantaje față de arhitectura monolitică, inclusiv robustețe, productivitate, flexibilitate, scalabilitate, viteză, dinamism, întreținere minimă etc.

  2. Care sunt cele 5 componente ale arhitecturii microservicii?

    Cele cinci componente de bază ale arhitecturii microservicii sunt microservicii, containerele, rețeaua de servicii, descoperirea serviciilor și gateway-ul API.

  3. Este REST API un microserviciu?

    Da, REST API este unul dintre cele mai populare API-uri utilizate pentru construirea de aplicații de microservicii.

  4. Care este diferența dintre microservicii și API?

    Distincția principală dintre API-uri și microservicii este că acestea din urmă sunt folosite pentru a construi o singură aplicație, în timp ce primele sunt compuse dintr-o colecție de servicii independente, dar interconectate. APIs are components of an application that are responsible for facilitating communication with other software programs. Therefore, APIs may be utilized to facilitate the creation of microservices.

  5. Is Kubernetes a microservice?

    Yes, Kubernetes is an open-source orchestrator for deploying containerized applications (microservices).

  6. What language is used in microservices?

    C++ is a good language for microservices in domains that require the characteristics of C++, such as runtime speed and direct memory access, and C++, like other languages, has a variety of infrastructures available to help you get started with developing microservices. C++ is a good language for microservices in domains that require the attributes of C++, such as runtime speed and direct memory access.

  7. De ce ați opta pentru arhitectura de microservicii?

    >> Agilitate crescută și timp rapid de lansare pe piață
    >> Scalabilitate eficientă și actualizare a aplicației
    >> Costuri de dezvoltare optimizate
    >> Fiabilitate, stabilitate și întreținere ridicate
    >> Flexibilitate în alegerea tehnologiilor
    >> Concentrează-te cu laser pe funcțiile individuale ale afacerii
    >> Autonomia echipei
    >> Implementare și testare automate
    >> Gestionarea mai bună a resurselor
    >> Datorii tehnice reduse/evitate

S-ar putea să-ți placă și să citești
  • Dezvoltare Full Stack App: Ghid complet
  • Comerțul fără cap: soluția pentru comerțul tradițional
  • Comerț Composable
  • Dezvoltare backend pentru aplicații mobile
  • Cum să alegi o stivă tehnică pentru dezvoltarea unei aplicații