1. Bilanciatore del carico (spesso la prima fermata):
* Molti sistemi utilizzano un bilanciamento del carico come punto di ingresso. Questo è un server dedicato che distribuisce richieste in arrivo su più server back -end (i servizi effettivi). Il bilanciamento del carico decide quale server inoltri la richiesta in base a fattori come il carico del server, i controlli di salute e potenzialmente anche le caratteristiche della richiesta (ad esempio, utilizzando una tecnica chiamata routing consapevole del contenuto).
* Il bilanciamento del carico funziona in genere sul livello di rete (livello 4) o sul livello dell'applicazione (livello 7). I bilanciatori di carico di livello 4 guardano cose come indirizzi IP e porte, mentre i bilanciatori del carico di livello 7 ispezionano la stessa richiesta HTTP (intestazioni, URL, ecc.) Prima di prendere una decisione di routing.
2. Proxy inverso (spesso dopo il bilanciamento del carico):
* Un proxy inverso si trova davanti a uno o più server back -end. Riceve richieste dal bilanciamento del carico (o direttamente dai clienti se non esiste un bilanciamento del carico) e le inoltra al servizio appropriato.
* I proxy inversi gestiscono spesso attività come la memorizzazione nella cache, la terminazione SSL (decritting traffico HTTPS) e la richiesta di modifica prima di passare la richiesta al backend.
* Nginx e Apache sono esempi popolari di proxy inversi.
3. Routing lato server (all'interno dell'applicazione):
* Una volta che la richiesta raggiunge il server (dopo aver potenzialmente passato un bilanciamento del carico e un proxy inverso), il server stesso deve determinare quale servizio o applicazione specifico dovrebbe gestirlo. Questo viene in genere fatto usando uno dei seguenti metodi:
* percorso URL: Il metodo più comune. Il server esamina il componente del percorso dell'URL (la parte dopo il nome di dominio). Ad esempio, `/Users/123` potrebbe essere instradato a un servizio utente, mentre`/Products/Search` potrebbe andare a un servizio di catalogo del prodotto. Framework come Express.js (node.js), stivale a molla (Java) e django (Python) forniscono meccanismi per la definizione di percorsi basati sui percorsi URL.
* Nome host/dominio: Servizi diversi possono essere distribuiti su diversi sottodomi o nomi host (ad esempio, `utenti.example.com` vs.` Products.example.com`). Il server può utilizzare il nome host per determinare il servizio appropriato.
* Routing basato sull'intestazione: La richiesta potrebbe includere intestazioni contenenti informazioni sul servizio previsto. Il server può controllare queste intestazioni per instradare la richiesta di conseguenza.
* Contenuto di richiesta: In alcuni casi, il contenuto dell'organismo di richiesta stesso potrebbe determinare quale servizio dovrebbe gestirlo. Ciò è meno comune perché richiede più elaborazione e può essere meno efficiente.
4. Service Discovery (per architetture di microservizi):
* Nelle architetture di microservizi, i servizi sono spesso distribuiti e ridimensionati dinamicamente. I meccanismi di scoperta del servizio, come il console, etcd o Kubernetes, aiutano a individuare le istanze attuali di ciascun servizio. Quando arriva una richiesta, il meccanismo di routing (ad esempio, un proxy inverso o un gateway API) interroga il sistema di rilevamento del servizio per trovare l'indirizzo dell'istanza di servizio appropriata e inoltra la richiesta.
In sintesi: Il processo è una catena di componenti potenzialmente multipli. Una richiesta in genere scorre come questa:
Client -> (caricamento bilanciatore) -> (proxy inverso) -> server -> (rilevamento del servizio, se applicabile) -> servizio specifico
L'implementazione esatta dipende fortemente dalla complessità del sistema e dalle tecnologie specifiche utilizzate. Le applicazioni semplici potrebbero coinvolgere solo il percorso del percorso URL su un singolo server, mentre i sistemi su larga scala utilizzano una combinazione di bilanciatori del carico, proxy inversi, scoperta di servizi e sofisticate regole di routing.
hardware © www.354353.com