Millised teenuse tüübid eksisteerivad ja kuidas nad töötavad madalal tasemel?
sobes.tech AI
Vastus AI-lt
Mikroteenuste ja levitatavate süsteemide kontekstis on mitu peamist teenusetüüpi:
- Monoliitne rakendus: Üks, jagamatu koodibaas, mis sisaldab kogu rakenduse funktsionaalsust.
- Mikroteenused: Väikesed, sõltumatud teenuste kogumid, millest igaüks realiseerib kindla äriloogika. Suhtlevad API kaudu.
- Serverless (serverivaba): Pilveteenuse pakkuja haldab dünaamiliselt ressursside eraldamist ja skaleerimist. Arendaja keskendub ainult funktsioonide koodile.
Töötamine madalal tasemel näeb välja järgmiselt:
Monoliit:
Töötleb kui üks protsess. Kõik komponendid laaditakse mällu korraga. Suhtlus komponentide vahel toimub funktsioonide või meetodite väljakutsete kaudu ühes aadressiruumis. Tõrkekindlus saavutatakse kogu monoliidi varundamisega. Skaalumine on keeruline, vaja on kogu rakendust laiendada. Ressursside kasutus on sageli üleliigne:
Mikroteenused:
Iga mikroteenus on eraldi protsess või protsesside kogum. Töötavad oma isoleeritud keskkonnas ( konteiner, virtuaalmasin). Suhtlus toimub võrgus, tavaliselt HTTP/gRPC kaudu – sünkrooniline või asünkrooniline protokoll (näiteks RabbitMQ, Kafka). Igal teenusel võib olla oma tehnoloogiline virn ja andmebaas. Skaalumine toimub sõltumatult iga teenuse jaoks. Tagab kõrge usaldusväärsuse (ühe teenuse tõrge ei mõjuta teisi) ja ressursi tõhusa kasutamise. Juhtimine on keeruline (vajalik Service Discovery, API Gateway, logimine ja monitooring).
Näide mikroteenuste võrgus suhtlemisest:
// Päring teenusele A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Vastus teenuselt A
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"username": "testuser"
}
Serverless:
Funktsiooni kood on paigutatud pilvekeskkonda. Pilveteenuse pakkuja käivitab funktsiooni vastusena teatud sündmustele (HTTP-päringud, järjekorra teated, andmebaasi muudatused). Infrastruktuuri (serverid, OS) haldab pakkuja. Funktsioonid on tavaliselt lühiajalised ja stateless (ilma seisundi salvestamiseta). Skaalumine toimub automaatselt, sõltuvalt sündmuste arvust. Maksmine toimub ressursside kasutamise alusel (täitmise arv, tööaeg). Madalal tasemel kasutab pakkuja konteinerid või virtuaalseid masinaid funktsioonide isolatsiooniks ja täitmiseks, kuid see tase on kasutajast varjatud:
AWS Lambda näide — Serverless funktsioon:
# Lihtne Lambda funktsioon
import json
def lambda_handler(event, context):
# Sissetuleva sündmuse töötlemine
# Loogika täitmine
response_body = {
"message": "Hello from Lambda!",
"input": event
}
return {
"statusCode": 200,
"body": json.dumps(response_body)
}
Võrdlustabel:
| Omadus | Monoliit | Mikroteenused | Serverless |
|---|---|---|---|
| Arhitektuur | Üks koodibaas | Sõltumatud teenused | Funktsioonid, sündmustega hallatavad |
| Paigaldamine | Üks protsess | Iga teenuse jaoks sõltumatu | Hallatakse pakkuja poolt |
| Mastaapsus | Horisontaalne (kopeerimine) | Sõltumatu iga teenuse jaoks | Automaatne, sündmuspõhine |
| Tõrkekindlus | Madal | Kõrge (eraldatud) | Kõrge (sisseehitatud) |
| Ressursside kasutus | Mõnikord liig, üleliigne | Tõhusam | Maksmine kasutamise järgi |
| Juhtimise keerukus | Madal | Kõrge | Madal (infrastruktuur) |
| Kommunikatsioon | Sisemine protsessiline | Võrk (API, sõnumid) | Sündmuste kaudu |