I requisiti: avere una soluzione pratica che funzioni per il cloud o qualsiasi tipo di ambiente in cui nessun accesso ai bilanciatori del carico hardware, ai protocolli BGP e tutto il resto.
Il numero di richiesta di reddito di un'applicazione non è noto ma dovrebbe essere abbastanza elevato da soddisfare una maggiore aspettativa di carico senza timori.
Troviamo un'applicazione con natura simile di carico, ad esempio archivio di registrazione e app di ricerca. Ne ho trovato uno .
Ciò che vogliono:
- Bilanciare il carico tra i collettori
- Offri tolleranza agli errori, permettendoci di continuare a inserire dati se uno dei collezionisti muore o riscontra problemi
- Ridimensiona orizzontalmente con la crescita dei nostri volumi di log
Cosa hanno provato e imparato su ELB:
- Non funziona come previsto
- Problemi di latenza dovuti all'aumento del carico
- Funzione di monitoraggio insufficiente
- Troppe limitazioni (numero di porte e protocolli aperti)
Perché hanno scelto con Route53:
- "Il round robin è un bilanciamento del carico piuttosto semplice, ma funziona bene per noi dal punto di vista dell'efficienza"
- "Sfruttiamo i controlli di integrità del failover di Route 53".
- "Se c'è un problema con un collezionista, Route 53 lo mette automaticamente fuori servizio; i nostri clienti non vedranno alcun impatto."
- Nessun pre-riscaldamento necessario con Route 53
La Route 53 si è rivelata il modo migliore per Loggly di sfruttare i nostri collezionisti ad alte prestazioni dati i nostri enormi volumi di tronchi, le variazioni imprevedibili e la costante crescita della nostra attività. Si allinea con gli scopi principali dei collezionisti: raccogliere dati alla velocità della linea di rete senza perdite e ci consente di beneficiare dell'elasticità di tutti i servizi AWS che utilizziamo in Loggly.
Questo esempio particolare mostra che in alcuni scenari (raccoglitore di registri, servizio di annunci o simili) il bilanciamento del carico è ridondante e la "soluzione di round robin per il controllo dello stato del DNS" svolge egregiamente il suo lavoro.
Vediamo cosa dice AWS in merito al failover DNS:
Con il failover DNS, Route 53 può rilevare un'interruzione del sito Web e reindirizzare gli utenti finali verso posizioni alternative o di backup specificate. Il failover DNS di Route 53 si basa su controlli di integrità, che effettuano regolarmente richieste Internet agli endpoint delle applicazioni da più posizioni in tutto il mondo per determinare se ciascun endpoint dell'applicazione è attivo o inattivo.
Questa tecnica rende anche ELB (non richiesto, solo per una nota) più robusto, ancora una volta si basa su RR + Health Check:
Il failover DNS di Route 53 gestisce tutti questi scenari di errore integrandosi con ELB dietro le quinte. Una volta abilitato, Route 53 configura e gestisce automaticamente i controlli di integrità per i singoli nodi ELB.
Vediamo ora come funziona dietro la scena. La domanda ovvia è come gestire la memorizzazione nella cache DNS:
Tuttavia, la memorizzazione nella cache DNS può ancora essere un problema qui (vedere il nostro post precedente in cui è trattato il problema della "coda lunga") se TTL non è rispettato da tutti i livelli tra il client e Route 53. È quindi possibile applicare una tecnica di "busting della cache": invia una richiesta a un dominio univoco
("http://<unique-id>.<your-domain>")
e definire una risorsa jolly
Record "*.<your-domain>" to match it.
L'Algolia ha introdotto la "strategia di riprova del cliente" che funziona abbastanza bene se il tuo cliente (JS nel tuo caso) è in grado di gestirlo:
Abbiamo finito per implementare una strategia di riprova di base nei nostri client API. Ogni client API è stato sviluppato per poter accedere a tre macchine diverse. Tre diversi record DNS rappresentavano ciascun utente: USERIDID-1.algolia.io, USERID-2.algolia.io eUSERID-3.algolia.io. La nostra prima implementazione è stata quella di selezionare casualmente uno dei record e quindi riprovare con uno diverso in caso di errore.