Sobes.tech
Middle

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