Wie leite ich Benutzer basierend auf ihrem Standort auf verschiedene Server um?

8

Ich habe eine Website, die mit ASP.NET entwickelt wurde, und MY DB ist MySQL. Derzeit wird es in USA Servern gehostet. Aber wenn ich versuche, in der Nähe von Indien darauf zuzugreifen, werden dynamische Inhalte zu langsam geladen. Es ist akzeptabel, da die Anfrage auf eine andere Seite der Welt gehen muss. In den USA ist es sehr schnell. Ich habe diese Seite bereits mit Cloudflare CDN verbunden. CDN ist jedoch nützlich für statische Inhalte. Meine alle Seiten haben fast dynamische Inhalte.

Also möchte ich diese Website skalieren. Wenn also eine Anfrage aus Amerika kam, möchte ich diese Anfrage vom USA-Server bearbeiten. Wenn eine Anfrage von ASIA kam, möchte ich, dass diese von einem ASIAN-Server bearbeitet wird. Beachten Sie jedoch, dass der Inhalt auf zwei Servern gleich sein sollte, unabhängig davon, wo sie umgeleitet wurden. (Zwei Server sollten synchron sein)

Wie erreicht man diese Architektur?

Wie machen Google, Facebook, Yahoo das? Wie dienen sie weltweit? Ich denke, sie haben Rechenzentren auf allen Kontinenten. Wie synchronisieren sie sich?

Prageeth Liyanage
quelle

Antworten:

10

Zusätzlich zu den Antworten von @ Gabriel-Talavera möchte ich einige Anmerkungen hinzufügen:

  • Das Netzwerkrouting sowie der geografische Lastausgleich stehen in keinem Zusammenhang mit der "Datensynchronisation" zwischen verschiedenen Servern. Dies sind zwei Probleme, die mit vielen sehr unterschiedlichen Technologien angegangen werden.

Da sich der Titel Ihrer Frage auf die Netzwerkseite zu konzentrieren scheint, werde ich mich auf den ersten Teil konzentrieren (die Probleme mit dem Netzwerkrouting).

Wie Sie selbst sehen können, sind Anforderungen für kleine IKT-Unternehmen schwer zu erfüllen. Aber "globale" Unternehmen (wie die, die Sie in Ihrem OP erwähnt haben) werden kein Problem damit haben, sie zu übernehmen.

Als Randnotiz hörte ich zum ersten Mal von "anycast" dank eines CloudFlare BLOG-Beitrags , in dem sie diskutierten (... unter anderem), wie anycast auch als Gegenmaßnahme zu D- übernommen werden kann. DOS-Angriffe.

Damiano Verzulli
quelle
3

Sie können selektive DNS-Antworten basierend auf dem Standort mit BIND-Ansichten geben, wenn Sie BIND als externen DNS-Server verwenden. Die technische Vorschau der neuen Version von Windows Server enthält auch eine Funktion namens DNS-Richtlinien, die sehr vielversprechend aussieht.

Um Inhalte basierend auf dem Client-Standort und anderen Kriterien wie User Agent oder Zeitplänen bereitzustellen, verfügt F5 über eine Appliance namens Global Traffic Manager, die in Verbindung mit ihren Load Balancern das erreicht, wonach Sie suchen. In Cloud-Umgebungen kann Amazon Route 53 dasselbe erreichen.

Um die Daten synchron zu halten, müssen Sie über ein Speicher-Backend verfügen, das eine synchrone Replikation durchführen kann, oder Sie müssen die von MySQL bereitgestellte Replikation verwenden, um die replizierten Daten konsistent zu halten.

Gabriel Talavera
quelle
Dies funktioniert jedoch nicht zuverlässig, wenn die Clients unterschiedliche DNS-Server wie Google DNS oder OpenDNS verwenden.
Josef sagt Reinstate Monica
Die Replikation mit MySQL kann eine erhebliche Verzögerung zwischen Schreibvorgängen und den für Lesevorgänge verfügbaren Daten aufweisen. Etwas, das die Replikation wie Riak oder andere NOSQL-Datenbanken skaliert, sollte in Betracht gezogen werden.
Küken
0

Es gibt Situationen, in denen Sie gerne hätten:

  • Die Datenintegrität garantiert serialisierbare Transaktionen.
  • Daten können von Benutzern weltweit aktualisiert werden.
  • Daten können mit geringer Latenz aktualisiert werden.

Leider ist die Kombination aller oben genannten physikalisch nicht möglich. Sie werden durch die Lichtgeschwindigkeit eingeschränkt.

Stattdessen müssen Sie Ihre genauen Anforderungen berücksichtigen. Für einige Daten ist eine begrenzte Genauigkeit ausreichend. Betrachten Sie den Ansichtszähler in einem YouTube-Video. Den meisten Menschen ist es egal, ob der Ansichtszähler vorübergehend etwas ausgeschaltet ist. Wenn Ansichten, die vor 10 Sekunden auf der anderen Seite der Welt stattgefunden haben, noch nicht enthalten sind, aber Ansichten, die vor 5 Sekunden in der Nähe stattgefunden haben, enthalten sind, ist sie immer noch genau genug. Wenn Sie mit der Integrität des Ansichtszählers so entspannt sind, laufen Sie Gefahr, dass zwei verschiedene Personen glauben, sie seien Zuschauer Nummer 100 dieses bestimmten Videos. Aber die meisten Menschen würden den dadurch verursachten Schaden für vernachlässigbar halten.

In anderen Fällen ist die Datenintegrität wichtiger. Stellen Sie sich zwei Personen vor, die gleichzeitig versuchen, sich mit demselben Benutzernamen anzumelden. Es ist nicht akzeptabel, beiden Personen mitzuteilen, dass sie den Benutzernamen erhalten haben. In einer solchen Situation würden Sie einen langsameren Ansatz mit besserer Integrität wählen. Es ist akzeptabel, beiden Personen mitzuteilen, dass der Benutzername verwendet wurde. Ein möglicher Ansatz besteht darin, den Benutzernamen für jedes Replikat zu reservieren und nur dann Erfolg zu melden, wenn Sie bei mehr als 50% der Replikate erfolgreich waren. Es ist nicht unwahrscheinlich, dass der Benutzer bei diesem Ansatz eine halbe Sekunde warten muss, um eine Antwort zu erhalten. Benutzer durchlaufen diesen Prozess jedoch nicht oft genug, um von dieser Verzögerung gestört zu werden.

In noch anderen Fällen benötigen Sie möglicherweise eine gute Integrität und schnelle Aktualisierungen, aber nur eine Person kann diese bestimmten Daten aktualisieren. In diesem Fall können Sie die autorisierende Kopie der Daten auf einem Server ablegen, von dem Sie glauben, dass er diesem Benutzer nahe steht, und anderen Servern eine zwischengespeicherte Version zuweisen, die größtenteils auf dem neuesten Stand ist.

Kasperd
quelle