Kokie paslaugų rūšys egzistuoja ir kaip jos veikia žemo lygio?
sobes.tech AI
Atsakymas iš AI
Yra keletas pagrindinių paslaugų tipų mikropaslaugų architektūros ir paskirstytų sistemų kontekste:
- Monolitinės programos: Vieninga, nepadaloma kodo bazė, apimanti visas programos funkcijas.
- Mikropaslaugos: Maži, nepriklausomi paslaugų rinkiniai, kiekviena įgyvendina tam tikrą verslo logiką. Sąveikauja per API.
- Serverless (be serverių): Debesų teikėjas dinamiškai valdo išteklių paskirstymą ir mastelio keitimą. Dėmesys skiriamas tik funkcijų kodui.
Veikimas žemame lygyje atrodo taip:
Monolitas:
Veikia kaip vienas procesas. Visi komponentai įkelti į atmintį vienu metu. Sąveika tarp komponentų vyksta per funkcijų ar metodų iškvietimus vienoje adresų erdvėje. Atsparumas gedimams pasiekiamas viso monolito rezervavimu. Mastelio keitimas sudėtingas, reikia išplėsti visą programą. Ištekliai dažnai naudojami pertekliniai:
Mikropaslaugos:
Kiekviena mikropaslauga – atskiras procesas arba procesų rinkinys. Veikia savo izoliuotoje aplinkoje (konteineryje, virtualioje mašinoje). Sąveika vyksta per tinklą, dažniausiai per HTTP/gRPC – sinchroninius arba asinchroninius protokolus (pvz., RabbitMQ, Kafka). Kiekviena paslauga gali turėti savo technologijų rinkinį ir duomenų bazę. Mastelio keitimas vyksta nepriklausomai kiekvienai paslaugai. Užtikrinama aukšta patikimumas (vienos paslaugos gedimas neturi įtakos kitoms) ir efektyvus išteklių naudojimas. Valdymas sudėtingėja (reikalingas Service Discovery, API Gateway, logavimas ir stebėsena).
Pavyzdys tinklo sąveikos tarp mikropaslaugų:
// Užklausa paslaugai A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Atsakymas iš paslaugos A
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"username": "testuser"
}
Serverless:
Funkcijos kodas įdiegtas debesų aplinkoje. Debesų teikėjas paleidžia funkciją reaguodamas į tam tikrus įvykius (HTTP užklausas, eilės pranešimus, duomenų bazės pakeitimus). Infrastruktūrą (serverius, OS) valdo teikėjas. Funkcijos dažniausiai yra trumpalaikės ir be būsenos (neturi išsaugotos būsenos tarp iškvietimų). Mastelio keitimas vyksta automatiškai, remiantis įvykių skaičiumi. Mokėjimas atliekamas pagal išteklių naudojimą (vykdymo skaičius, darbo laikas). Žemame lygyje teikėjas naudoja konteinerius arba virtualias mašinas funkcijų izoliacijai ir vykdymui, tačiau šis lygis yra paslėptas naudotojui:
AWS Lambda pavyzdys — Serverless funkcija:
# Paprasta Lambda funkcija
import json
def lambda_handler(event, context):
# Apdoroti įeinantį įvykį
# Vykdyti logiką
response_body = {
"message": "Hello from Lambda!",
"input": event
}
return {
"statusCode": 200,
"body": json.dumps(response_body)
}
Palyginamasis lentelė:
| Savybė | Monolitas | Mikropaslaugos | Serverless |
|---|---|---|---|
| Architektūra | Viena kodo bazė | Nepriklausomos paslaugos | Funkcijos, valdomos įvykių |
| Diegimas | Vienas procesas | Kiekvienai paslaugai nepriklausomas | Valdo teikėjas |
| Mastelio keitimas | Horizontalus (kopijavimas) | Kiekvienai paslaugai nepriklausomas | Automatinis, įvykių pagrindu |
| Atsparumas gedimams | Žemas | Aukštas (atskirtas) | Aukštas (įmontuotas) |
| Išteklių naudojimas | Kartais perteklinis | Efektyvesnis | Mokėjimas pagal naudojimą |
| Valdymo sudėtingumas | Žemas | Aukštas | Žemas (infrastruktūrai) |
| Komunikacija | Vidinis procesas | Tinklas (API, pranešimai) | Per įvykius teikėjo |