Microservices-zelfstudie: wat is, architectuur en voorbeeld

Wat zijn microservices?

Microservices is een servicegericht architectuurpatroon waarin applicaties worden gebouwd als een verzameling van verschillende kleinste onafhankelijke service-eenheden. Het is een software engineering aanpak die zich richt op het opsplitsen van een applicatie in modules met één functie en goed gedefinieerde interfaces. Deze modules kunnen onafhankelijk worden ingezet en beheerd door kleine teams die eigenaar zijn van de gehele levenscyclus van de service.

De term ‘micro’ verwijst naar de omvang van een microservice die beheersbaar moet zijn door één enkel ontwikkelteam (5 tot 10 ontwikkelaars). In deze methodologie worden grote applicaties opgedeeld in kleinste onafhankelijke eenheden.

Wat is monolithische architectuur?

In lekentermen kun je zeggen dat monolithische architectuur een grote container is waarin alle softwarecomponenten van een applicatie in één pakket zijn samengebracht.

Laten we een voorbeeld bespreken van een e-commerce winkel in de context van een monolithische architectuur.

Monolithische architectuur
Monolithische architectuur van e-commerce-applicatie

In elke e-commercetoepassing zijn er enkele standaardfuncties zoals Zoeken, Recensie & Beoordelingen en Betalingen. Deze functies zijn toegankelijk voor klanten via hun browser of apps. Wanneer de ontwikkelaar van de e-commercesite de applicatie implementeert, is het één monolithische eenheid. De code voor verschillende functies zoals Zoeken, Recensie & Beoordelingen en Betalingen bevinden zich op dezelfde server. Om de applicatie te schalen, moet u meerdere exemplaren (servers) van deze applicaties uitvoeren.

Wat is Microservice-architectuur?

Microservice-architectuur is een architecturale ontwikkelstijl die het mogelijk maakt om applicaties te bouwen als een verzameling kleine autonome diensten ontwikkeld voor een zakelijk domein. Het is een variant van structurele stijlarchitectuur die helpt bij het ordenen van applicaties als een losjes gekoppelde servicecollectie. De Microservice Architectuur bevat fijnmazige services en lichtgewicht protocollen.

Laten we een voorbeeld nemen van een e-commercetoepassing die is ontwikkeld met een microservice-architectuur. In dit voorbeeld van een Microservices-architectuur is elke microservice gericht op afzonderlijke bedrijfsmogelijkheden. Search, Rating & Review en Payment hebben elk hun instance (server) en communiceren met elkaar.

Microservices-architectuur
Microservices-architectuur

In de monolithische architectuur komen alle componenten samen in één enkele module. Maar in Microservices Architecture zijn ze verspreid in individuele modules (microservice) die met elkaar communiceren, zoals weergegeven in het bovenstaande Microservices-voorbeeld.

De communicatie tussen microservices is een staatloze communicatie waarbij elk paar verzoeken en antwoorden onafhankelijk is. Daarom kunnen Microservices moeiteloos communiceren. In de Microservice-architectuur zijn de gegevens federatief. Elke Microservice heeft zijn afzonderlijke gegevensopslag. Vervolgens zullen we in deze Java Microservices-tutorial leren over het verschil tussen Microservices en Monolithische architectuur.

Microservices versus monolithische architectuur

Microservices Monolithische architectuur
Elke eenheid van de gehele applicatie moet de kleinste zijn en één specifiek bedrijfsdoel moeten kunnen verwezenlijken. Eén enkele codebasis voor alle bedrijfsdoelen
Het opstarten van de service gaat relatief snel Het opstarten van de service kost meer tijd
Foutisolatie is eenvoudig. Zelfs als één dienst uitvalt, kunnen andere blijven functioneren. Foutisolatie is moeilijk. Als een specifieke functie niet werkt, valt het hele systeem uit. Om dit probleem op te lossen, moet de applicatie opnieuw worden gebouwd, opnieuw getest en ook opnieuw worden geïmplementeerd.
Alle microservices moeten losjes aan elkaar gekoppeld zijn, zodat wijzigingen in de ene microservice geen invloed hebben op de andere. Monolithische architectuur is nauw met elkaar verbonden. Wijzigingen in de ene codemodule hebben invloed op de andere
Bedrijven kunnen meer middelen inzetten voor diensten die een hogere ROI genereren Omdat diensten niet geïsoleerd zijn, is individuele toewijzing van middelen niet mogelijk
Er kunnen meer hardwarebronnen worden toegewezen aan de dienst die vaak wordt gebruikt. In het e-commercevoorbeeld hierboven controleren meer gebruikers de productvermelding en zoekopdrachten dan bij betalingen. Er kunnen dus meer middelen worden toegewezen aan de microservice voor zoeken en productvermeldingen. Het opschalen van applicaties is zowel uitdagend als verspillend.
Microservices blijft altijd consistent en continu beschikbaar. Ontwikkeltools raken overbelast omdat het proces helemaal opnieuw moet beginnen.
Gegevens zijn federatief. Hierdoor kan individuele Microservice een datamodel gebruiken dat het beste bij zijn behoeften past. Gegevens zijn gecentraliseerd.
Kleine, gefocuste teams. Parallelle en snellere ontwikkeling Er zijn een groot team en aanzienlijke teammanagementinspanningen vereist
Wijziging in het datamodel van de ene Microservice heeft geen invloed op andere Microservices. Verandering in het datamodel heeft invloed op de gehele database
Werkt samen met andere microservices door gebruik te maken van goed gedefinieerde interfaces Niet van toepassing
Microservices werken volgens het principe dat zich richt op producten, niet op projecten Leg de nadruk op het hele project
Geen onderlinge afhankelijkheden tussen codebases. U kunt verschillende technologieën gebruiken voor verschillende Microservices. Eén functie of programma is afhankelijk van andere.

Microservice-uitdagingen

  • MicroServices zijn van elkaar afhankelijk en zullen met elkaar moeten communiceren.
  • Vergeleken met monolithische systemen zijn er meer services om te monitoren, die met behulp van verschillende services zijn ontwikkeld programmeertalen.
  • Omdat het een gedistribueerd systeem is, is het inherent een complex model.
  • Verschillende services zullen hun eigen mechanisme hebben, wat resulteert in een grote hoeveelheid geheugen voor ongestructureerde gegevens.
  • Effectief management en teamwerk zijn nodig om opeenvolgende problemen te voorkomen
  • Het reproduceren van een probleem zal een moeilijke taak zijn als het in één versie verdwenen is, en terugkomt in de nieuwste versie.
  • Onafhankelijke implementatie is ingewikkeld met Microservices.
  • Microservice-architectuur brengt veel overhead met zich mee.
  • Het is moeilijk om applicaties te beheren wanneer nieuwe services aan het systeem worden toegevoegd
  • Er is een breed scala aan bekwame professionals nodig om heterogeniteit te ondersteunenneoalgemeen gedistribueerde microservices
  • Microservice is kostbaar, omdat u verschillende serverruimte nodig heeft voor verschillende bedrijfstaken.

SOA versus microservices

SOA-diensten worden in de organisatie onderhouden door een register dat fungeert als directorylijst. Toepassingen moeten de services in het register opzoeken en de service aanroepen.

In een andere wereld, SOA is net als een orkest waarbij elke artiest optreedt met zijn/haar instrument terwijl de muziekdirecteur iedereen instructies geeft.

Aan de andere kant is Microservices een vorm van servicegerichte architectuurstijl waarbij applicaties worden gebouwd als een verzameling van verschillende kleinere services in plaats van één software of applicatie.

Microservices is net een gezelschap waarbij elke danser onafhankelijk is en weet wat hij moet doen. Dus als ze een paar stappen missen, weten ze hoe ze weer in de juiste volgorde kunnen komen. Laten we nu in deze Microservices-architectuurtutorial meer leren over het verschil tussen SOA en Microservices.

Hier is een gedetailleerde vergelijking tussen SOA en Microservices

Parameter SOA Microservices
Ontwerptype Bij SOA worden softwarecomponenten blootgesteld aan de buitenwereld voor gebruik in de vorm van services. MicroService is een onderdeel van SOA. Het is een implementatie van SOA.
Afhankelijkheid Bedrijfseenheden zijn afhankelijk. Ze zijn onafhankelijk van elkaar.
Grootte van de software De softwaregrootte is groter dan welke conventionele software dan ook De omvang van de Software is bij Microservices altijd klein
Technologie stapel De technologiestapel is lager vergeleken met Microservice. De microservice-technologiestack kan erg groot zijn
Aard van de aanvraag Monolithisch van aard Volledige stapel in de natuur
Onafhankelijk en gefocust SOA-applicaties zijn gebouwd om meerdere zakelijke taken uit te voeren. Ze zijn gebouwd om één enkele zakelijke taak uit te voeren.
Deployment Het implementatieproces is tijdrovend. De implementatie is eenvoudig en minder tijdrovend.
Kosten efficiëntie Kosteneffectiever. Minder kostenbesparend.
Schaalbaarheid Minder vergeleken met Microservices. Zeer schaalbaar.
Bedrijfslogica Bedrijfslogicacomponenten worden opgeslagen in een enkel servicedomein Eenvoudige draadprotocollen (HTTP met XML JSON) API wordt aangestuurd met SDK's/clients Bedrijfslogica kan over domeinen van Enterprise Service Bus heen leven, zoals lagen tussen services Middleware

Hulpmiddelen voor microservices

1) Wiremock: microservices testen

WireMock is een flexibele bibliotheek voor het stubben en spotten van webservices. Het kan het antwoord configureren dat door de HTTP API wordt geretourneerd wanneer het een specifiek verzoek ontvangt. Het wordt ook gebruikt voor het testen van Microservices.

Download link:http://wiremock.org/

2) Dokwerker

Docker is een open source-project waarmee we applicaties kunnen maken, implementeren en uitvoeren met behulp van containers. Door deze containers te gebruiken, kunnen ontwikkelaars een applicatie als één pakket uitvoeren. Hiermee kunt u bibliotheken en andere afhankelijkheden in één pakket verzenden.

Download link:https://www.docker.com/

3) Hystrix

Hystrix is ​​een Java-bibliotheek met fouttolerantie. Deze tool is ontworpen om toegangspunten tot externe services, systemen en bibliotheken van derden te scheiden in een gedistribueerde omgeving zoals Microservices. Het verbetert het algehele systeem door de falende services te isoleren en het trapsgewijze effect van storingen te voorkomen.

Download Link:https://github.com/Netflix/Hystrix

Best practices van microservices-architectuur

  • Aparte dataopslag voor elke Microservice
  • Houd code van een vergelijkbaar volwassenheidsniveau.
  • Afzonderlijke build voor elke Micro-service.
  • Behandel – ernstig altijd als staatloos.

Samengevat

  • Microservices is een servicegericht architectuurpatroon waarin applicaties worden gebouwd als een verzameling van verschillende kleinste onafhankelijke service-eenheden.
  • Microservice Architecture is een architecturale ontwikkelstijl die het mogelijk maakt een applicatie te bouwen als een verzameling kleine autonome services ontwikkeld voor een bedrijfsdomein.
  • Monolithische architectuur is als een grote container waarin alle softwarecomponenten van een applicatie in één pakket zijn samengebracht
  • In een Microservice moet elke eenheid van de gehele applicatie de kleinste zijn en één specifiek bedrijfsdoel moeten kunnen realiseren
  • In monolithische architectuur kan een grote codebasis het hele ontwikkelingsproces vertragen. Nieuwe releases kunnen maanden duren. Het onderhoud van de code is moeilijk
  • Er zijn twee typen microservices: 1) staatloos en 2) stateful
  • Microservices in Java zijn van elkaar afhankelijk en zullen met elkaar moeten communiceren. Helpt u de nadruk te leggen op een specifieke functie en zakelijke behoeften
  • Servicegerichte architectuur, kortweg SOA genoemd, is een evolutie van gedistribueerd computergebruik gebaseerd op het verzoek- of antwoordontwerpmodel voor synchrone en asynchrone toepassingen
  • Bij SOA worden softwarecomponenten blootgesteld aan de buitenwereld voor gebruik in de vorm van services, terwijl Micro Service een onderdeel is van SOA. Het is een implementatie van SOA
  • Wiremock, Docker en Hystrix zijn enkele populaire Microservices-tools