Quali tipi di servizi esistono e come funzionano a livello basso?
sobes.tech AI
Risposta dell'AI
Esistono diversi tipi principali di servizi nel contesto dell'architettura a microservizi e sistemi distribuiti:
- Applicazioni monolitiche: Una singola base di codice indivisibile che contiene tutte le funzionalità dell'applicazione.
- Microservizi: Un insieme di piccoli servizi indipendenti, ognuno implementa una logica di business specifica. Interagiscono tra loro tramite API.
- Serverless (senza server): Modello di calcolo in cui il provider cloud gestisce dinamicamente l'assegnazione e il ridimensionamento delle risorse. Lo sviluppatore si concentra solo sul codice delle funzioni.
A livello basso, il funzionamento è il seguente:
Monolitico:
Viene eseguito come un processo unico. Tutti i componenti vengono caricati in memoria contemporaneamente. L'interazione tra componenti avviene tramite chiamate di funzioni o metodi all'interno di uno stesso spazio di indirizzi. La tolleranza ai guasti si ottiene riservando l'intero monolito. La scalabilità è difficile, è necessario scalare l'intera istanza dell'applicazione. L'uso delle risorse è spesso ridondante.
Microservizi:
Ogni microservizio è un processo separato o un insieme di processi. Funziona in un ambiente isolato (contenitore, macchina virtuale). L'interazione avviene tramite rete, solitamente tramite HTTP/gRPC su protocolli sincroni o asincroni (ad esempio, RabbitMQ, Kafka per asincronia). Ogni servizio può avere il proprio stack tecnologico e database. La scalabilità è indipendente per ogni servizio. Garantisce alta tolleranza ai guasti (il guasto di un servizio non influisce sugli altri) e un migliore utilizzo delle risorse. La gestione diventa più complessa (sono necessari Service Discovery, API Gateway, logging e monitoraggio distribuiti).
Esempio di interazione di rete tra microservizi:
// Richiesta al Servizio A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Risposta dal Servizio A
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"username": "testuser"
}
Serverless:
Il codice della funzione viene distribuito in un ambiente cloud. Il provider cloud esegue il codice in risposta a eventi specifici (richieste HTTP, messaggi in code, modifiche nel database). L'infrastruttura (server, OS) è gestita dal provider. Le funzioni sono generalmente di breve durata e senza stato (senza conservazione dello stato tra le chiamate). Lo scalamento è automatico, basato sul numero di eventi. La fatturazione avviene in base al consumo di risorse (numero di esecuzioni, tempo di esecuzione). A livello basso, il provider utilizza contenitori o macchine virtuali per isolare ed eseguire le funzioni, ma questo livello è astratto dall'utente.
Esempio di funzione Serverless (AWS Lambda):
# Funzione Lambda semplice
import json
def lambda_handler(event, context):
# Elaborazione dell'evento in ingresso
# Esecuzione della logica
response_body = {
"message": "Ciao da Lambda!",
"input": event
}
return {
"statusCode": 200,
"body": json.dumps(response_body)
}
Tabella comparativa:
| Caratteristica | Monolitico | Microservizi | Serverless |
|---|---|---|---|
| Architettura | Base di codice unica | Servizi indipendenti | Funzioni gestite da eventi |
| Deployment | Processo unico | Indipendente per ogni servizio | Gestito dal provider |
| Scalabilità | Orizzontale (copia) | Indipendente per ogni servizio | Automatica, per eventi |
| Tolleranza ai guasti | Bassa | Alta (isolati) | Alta (integrata) |
| Utilizzo delle risorse | Parzialmente ridondante | Più efficiente | Pagamento per consumo |
| Complessità di gestione | Bassa | Alta | Bassa (per infrastruttura) |
| Comunicazione | Interno al processo | Su rete (API, messaggi) | Attraverso eventi del provider |