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?
Es gibt Situationen, in denen Sie gerne hätten:
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.
quelle