Ce tipuri de servicii există și cum funcționează la un nivel de bază?
sobes.tech AI
Răspuns de la AI
Există mai multe tipuri principale de servicii în contextul arhitecturii microservicii și sistemelor distribuite:
- Aplicații monolitice: O bază de cod unică, indivizibilă, care conține toate funcționalitățile aplicației.
- Microservicii: Un set de servicii mici, independente, fiecare implementând o logică de afaceri specifică. Interacționează între ele prin API.
- Serverless (fără server): Model de calcul în care furnizorul de cloud gestionează dinamic alocarea și scalarea resurselor. Dezvoltatorul se concentrează doar pe codul funcțiilor.
La nivel scăzut, funcționarea arată astfel:
Monolit:
Se execută ca un singur proces. Toate componentele sunt încărcate în memorie simultan. Interacțiunea între componente se face prin apeluri de funcții sau metode în același spațiu de adresare. Reziliența la erori se obține prin rezervarea întregului monolit. Scalarea este dificilă, trebuie scalat întregul exemplu de aplicație. Utilizarea resurselor este adesea excesivă.
Microservicii:
Fiecare microserviciu este un proces separat sau un set de procese. Funcționează într-un mediu izolat (container, mașină virtuală). Interacțiunea se face prin rețea, de obicei prin HTTP/gRPC pe baze de protocoale sincrone sau asincrone (de exemplu, RabbitMQ, Kafka pentru asincronie). Fiecare serviciu poate avea propriul stack tehnologic și bază de date. Scalarea se face independent pentru fiecare serviciu. Asigură o reziliență ridicată (căderea unui serviciu nu afectează celelalte) și o utilizare mai bună a resurselor. Managementul devine mai complex (este nevoie de Service Discovery, API Gateway, logare și monitorizare distribuită).
Exemplu de interacțiune în rețea a microserviciilor:
// Cerere către Serviciul A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Răspuns de la Serviciul A
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"username": "testuser"
}
Serverless:
Codul funcției este implementat în mediul cloud. Furnizorul de cloud rulează codul funcției ca răspuns la anumite evenimente (cereri HTTP, mesaje în coadă, modificări în bazele de date). Infrastructura (servere, OS) este gestionată de furnizor. Funcțiile sunt de obicei scurte și fără stare (stateless). Scalarea este automată, bazată pe numărul de evenimente. Plata se face în funcție de consumul de resurse (numărul de execuții, timpul de funcționare). La nivel scăzut, furnizorul folosește containere sau mașini virtuale pentru izolarea și executarea funcțiilor, dar acest nivel este abstractizat față de utilizator.
Exemplu de funcție Serverless (AWS Lambda):
# Funcție Lambda simplă
import json
def lambda_handler(event, context):
# Procesarea evenimentului de intrare
# Executarea logicii
response_body = {
"message": "Hello from Lambda!",
"input": event
}
return {
"statusCode": 200,
"body": json.dumps(response_body)
}
Tabel comparativ:
| Caracteristică | Monolit | Microservicii | Serverless |
|---|---|---|---|
| Arhitectură | Bază de cod unică | Servicii independente | Funcții, gestionate de evenimente |
| Implementare | Proces unic | Independent pentru fiecare serviciu | Gestionat de furnizor |
| Scalare | Orizontală (copiere) | Independent pentru fiecare serviciu | Automată, pe baza evenimentelor |
| Reziliență la erori | Scăzută | Ridicată (izolate) | Ridicată (încorporată) |
| Utilizare resurse | Parțial redundantă | Mai eficientă | Plată pentru consum |
| Complexitate management | Scăzută | Ridicată | Scăzută (pentru infrastructură) |