Domanda

Sto lavorando a un progetto dove abbiamo un numero (5 al momento) di server sparsi in tutto il mondo. I client si connettono a uno di quei server tramite un broker centralizzato. Conosciamo il paese di origine del cliente ma nient'altro. Abbiamo il pieno controllo dei server in modo da poter avere tutte le informazioni di cui abbiamo bisogno su quelli. Non controlliamo i clienti, devono connettersi attraverso questo broker secondo lo standard.

È importante che il broker scelga un server a bassa latenza, quindi con i dati in nostro possesso penso che la vicinanza sia il nostro unico criterio disponibile.

La prima idea che è venuta in mente è il ping del client da ciascun server ma non abbiamo un IP, solo il paese.

Un'altra idea che abbiamo avuto è quella di eseguire il ping di un nodo radice in ciascun paese da ciascun server. Il problema è trovare un nodo radice in ogni paese.

Hai idea di come calcolare / cercare la vicinanza tra " paesi " ;? Hai qualche idea o idea su come risolvere questo problema in un altro modo?

È stato utile?

Soluzione

Penso che il termine che ti serve sia "bilanciamento del carico geografico". La maggior parte dei principali fornitori di bilanciamento del carico ha una soluzione qui: il tuo broker potrebbe utilizzarli.

Google bilanciamento del carico geografico è utile cercando risultati.

Altri suggerimenti

Questo è difficile, più di quanto molti immaginino, ma sento che c'è una CORRETTA risposta.

Ovviamente la soluzione ingenua (ma interessante) sta controllando l'IP del client, questo è un buon inizio, ma nel "mondo reale" La geolocalizzazione non è tutto ...

Hai appena richiesto " bassa latenza " ;, il che significa che dovresti fare ping tra server e client e assegnare di conseguenza. Un ottimo esempio di questo problema che mi colpisce personalmente molte volte è che lavoro in Giappone, e un server dice che a Taiwan è molto più vicino a un server negli Stati Uniti per me. MA , la latenza tra Giappone e Stati Uniti è molte volte inferiore (migliore risposta) rispetto a Taiwan, perché i cavi e i router e ciò che hai che collegano Giappone-Taiwan non sono buoni come quelli tra Giappone-USA . Quindi, se mi connettessi a Taiwan perché pensi che il mio IP sia più vicino, mi farebbe un grande sfortuna lì. Oltre a un ping e un piccolo test effettivo all'avvio è più semplice che tenere un database di geolocalizzazione costantemente aggiornato

La migliore soluzione per questo si chiama BGP anycast ( collegamento a una presentazione ). È la pietra angolare di tutti i moderni CDN.

Con BGP anycast , più server diversi sono sparsi in tutto il mondo e annunciati a Internet tramite BGP usando lo stesso IP . Quindi Internet fa la magia - come al solito, la rete instrada il traffico verso quello stesso IP tramite il percorso più breve, essenzialmente selezionando il server più vicino (dal punto di vista della topologia di rete) per ogni utente.

Sfortunatamente non puoi semplicemente annunciare nulla tramite BGP, solo le reti di grandi dimensioni (normalmente i datacenter) possono farlo. Ma sono disponibili soluzioni convenienti, la maggior parte delle quali si basano su DNS & nbsp; anycast (vale a dire la risoluzione su diversi IP del server Web in base alla posizione del client) - questo non è perfetto ma è sufficiente in molti casi (esempi: dnsmadeeasy, Route 53, edgedirector e praticamente ogni CDN economico - cloudflare, maxcdn, cloudfront ecc.). Esistono anche soluzioni che eseguono un vero anycast BGP, ovvero servono effettivamente il traffico HTTP tramite anycast (ad esempio cachefly) o consentono di farlo (ad esempio hostvirtual - non economico). Questo potrebbe anche essere una lettura interessante.

Paul ce l'ha, vuoi un bilanciamento del carico geografico, ma aggiungerò che la tua scommessa migliore, se è del tutto un'opzione, è trovare qualcuno che si specializzi in esso e lanciargli soldi. È nella classe di problemi che sono molto più difficili da risolvere in modo affidabile di quanto sembri inizialmente.

Eseguire il ping di loro e scegliere quello con la latenza più bassa suona bene, ma ho la sensazione che non si ridimensionerà (cosa succede quando ne hai 100 o 1000?), quindi forse un'altra soluzione è migliore? Ci sono molti venditori là fuori con sistemi che fanno proprio questo; Anche il anycast DNS è ampiamente utilizzato.

Se hai appena eseguito il ping, dovresti fare diversi ping a ciascuno (idealmente in parallelo) per assicurarti di sceglierne uno con una latenza veramente bassa piuttosto che una fortuna.

Inoltre probabilmente vorresti un modo per aggiungere pesi a loro in ultima analisi quando i volumi di traffico sono molto alti.

Infine, vorresti un modo per contrassegnarne alcuni come amministrativamente inattivi (per manutenzione) - ma forse puoi farlo facendo in modo che i tuoi interrotti non pubblicizzino quelli che non sono attualmente disponibili.

Il ping non funziona. La maggior parte dei client si troverebbe dietro un gateway e / o un firewall e i pacchetti di ping non supererebbero. Genehack l'ha detto meglio. È necessario il bilanciamento del carico del server e l'utilizzo dell'approccio geografico potrebbe non essere sempre il modo migliore per procedere. Meglio buttare soldi a qualcuno specializzato nella fornitura di soluzioni SLB.

Va ??bene quindi qualche pensiero veloce. Sono stato il fondatore di Digital Envoy - fanno l'intelligence geografica IP. Ho lasciato l'azienda qualche anno fa, ma circa 6 anni fa costruito un prodotto comune con Coyote Point Systems che ha fatto esattamente questa funzionalità: il bilanciamento del carico basato su aree geografiche. Certo, ci sono casi limite (l'esempio di Taiwan / Cina menzionato in questo thread) che potrebbero non funzionare automaticamente ma il prodotto ha permesso all'utente di determinare dove sarebbe diretto il traffico di un paese. Quindi, se decidessi che Taiwan è meglio servire fuori dagli Stati Uniti, verrebbe spinto in quel modo.

Sfortunatamente, la domanda per la soluzione non era eccezionale come speravamo e, a mio avviso, il prodotto è stato sospeso. Suggerirei contattare Coyote Point e vedere se possono fornire una soluzione equivalente per te. In caso contrario, penso che avranno alcune idee su come fare per fare quello che vuoi fare.

Un'altra opzione, a seconda di ciò che devi servire, è quella di utilizzare qualcosa come il servizio CloudFront di Amazon. Naturalmente, se hai bisogno di client per connettersi a un'app e non di file statici, ciò non funzionerà per te.

A proposito, divulgazione completa - Non sono solo un fondatore di Digital Envoy ma attualmente fa parte del consiglio di amministrazione di Coyote Point.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top