2017-06-28 1 views
0

Ich habe gelesen, dass StackExchange zwei Rechenzentren nutzt, um all ihre Server zu beherbergen. Beide Rechenzentren befinden sich in den USA. Ich bin in Irland, daher bin ich sicher, dass US-Server für mich in Ordnung sind. Aber wie kann StackExchange schnell für Benutzer in Australien geladen werden, wenn sich alle Datenbankserver in den USA befinden?Wie wichtig ist geographischer Standort von MySQL?

Ich möchte nur fragen, bedeutet dies für Dienste wie MySQL, geographisch in der Nähe des Servers zu sein ist nicht so ein großer Deal, um die Seitenladezeiten schnell zu halten?

Ich weiß, dass sie ein CDN verwenden, um ihre Seitenladezeit zu beschleunigen und sie wahrscheinlich bestimmte Seiten zwischenspeichern, um die Dinge zu beschleunigen, aber selbst wenn ich zu einer wirklich alten, unpopulären Frage gehe, kann ich keine Verlangsamung feststellen.

+0

Elektronen sind wirklich, wirklich schnell in Bezug auf die Abstände zwischen Orten auf der Erdoberfläche. Photonen sind noch schneller (in Glasfaserkabeln). Und StackExchange verwendet, soweit ich weiß, kein MySQL. –

+0

Ich denke, sie verwenden MSSQL Ich dachte, alle SQL-Produkte würden ungefähr die gleiche Geschwindigkeit sein. Könnte MSSQL schneller sein? – Francis

+0

Es gibt viele andere Dinge als den Datenbankserver, die die Geschwindigkeit der Seitenladung beim Endbenutzer beeinflussen. – Shadow

Antwort

2

Die Position des Datenbankservers relativ zum Viewer ist nicht der wesentliche Leistungsfaktor. Als Website-Besucher sprechen Sie nicht mit der Datenbank - Sie sprechen mit einem Webanwendungsserver, der mit der Datenbank kommuniziert.

Viel wichtiger ist normalerweise der Speicherort des Datenbankservers relativ zum Anwendungsserver, da viele Anwendungen mehrere Abfragen und somit mehrere Umläufe in die Datenbank erfordern, um eine einzelne Seite zu rendern, und diese Umlaufzeiten steigen die Zeit, die für die Wiedergabe einer Seite benötigt wird. Wenn sich die Datenbank physisch in der Nähe der Anwendungsebene befindet, wird diese Zeit vernachlässigbar.

In allgemeinen Webbegriffen, in einer gut verwalteten Site wie SE, mit allen unterstützenden Assets in einem CDN, ist die einzige Verzögerung, die für Sie relevant ist, die für diese eine große HTTP-Anfrage/Antwort erforderliche Laufzeit um den Seiteninhalt zu rendern. Die Laufzeit ist nicht vernachlässigbar, denn die Lichtgeschwindigkeit ist noch begrenzt, so dass die Round-Trip-Zeiten zu weit entfernten Orten auch auf den besten Routen leicht im Bereich von 200-300ms liegen können ... aber wenn Sie es nur durchqueren müssen Einmal haben Sie noch eine respektable Reaktionszeit.

Eine Website, die eine Menge Ajax verwendet, um zusätzliche Daten zu holen, würde mit dem so weit entfernten Webserver nicht so gut laufen. Wenn ein solches Design benötigt würde, würden Sie geographisch verteilte Webserver mit benachbarten Datenbankreplikaten und Geo-Routing in DNS benötigen, um schreibgeschützte Ajax-Anfragen an den nächsten Webserver zu senden, der sein lokales Replikat abfragen und eine schnelle Antwort erhalten könnte und erwidere eine schnelle Antwort.

Ich bewegte einmal einen MySQL-Server - relativ zum App-Server - von ~ 0,5 ms entfernt zu ~ 25ms entfernt. Die Seitenladezeit auf der Site (die bereits nicht optimal war) wurde von 2 Sek. Auf 10 Sek. Erhöht. Der Grund? Die App hatte im Laufe der Jahre viele Wiederholungen durchlaufen und viele unnötige Anfragen an die Datenbank gestellt ... wenn ich mich recht erinnere, benötigte selbst die einfachste Seite 13 verschiedene Abfragen, von denen die meisten Daten abriefen, die nicht tatsächlich verwendet wurden (wie das Holen Ihrer Punktzahl auch für Seiten, die Ihre Punktzahl nicht anzeigen. Diese Ineffizienz blieb unerkannt, solange die App und die db sehr, sehr nahe waren. Aber auch hier ging es um den Abstand zwischen dem Webserver und der Datenbank, nicht um die Datenbank und den Browser.

Stack Exchange hat zwei Rechenzentren, aber eine davon ist nur eine Hot Standby/Failover-Site. Die Hauptstelle erledigt alle Arbeiten im normalen Betrieb. Und SE benutzt MSSQL, aber das ist auch unwesentlich, weil das grundlegende Phänomen, das hier wirkt, ein Gesetz der Physik ist.

+0

Danke für so eine eingehende Antwort! Sie sagten, dass die Datenbank in der Nähe des Anwendungsservers sein sollte. Wenn ich viele Anwendungsserver hätte, die nahe beim Benutzer sind, aber nur einen Datenbankserver, würde ich nicht nur das gleiche Problem haben, wenn die Datenbank zu weit von der Abfrage entfernt ist es? – Francis

+0

Wenn Sie App-Server in der Nähe von Benutzern wünschen, möchten Sie, dass Replikate in der Datenbank neben den App-Servern gelesen werden, damit möglichst viel Datenverkehr die Replikate verwenden kann. In MySQL öffnet eine Replik eine Verbindung zum Master und hält sie offen. Der Master gibt dem Replikat bei ihrem Auftreten einen kontinuierlichen Datenstrom von Änderungen und das Replikat wendet diese Änderungen auf seinen lokalen Datensatz an. Das Protokoll benötigt keine Bestätigungen der Schicht 7, so dass die Replikationsverzögerung - im besten Fall mit geeigneter Kapazitätshardware und stabilen Verbindungen - kleiner sein kann als die Umlaufzeit zwischen den zwei Servern. –

1

Möglicherweise verwendet StackExchange mehrere Kopien von Datenbanken (DB Slaves), die geografisch über verschiedene Regionen der Welt verteilt sind. Das erklärt hohe Arbeitsgeschwindigkeit auch bei unpopulären SQL-Anfragen.

Auch zwischen Australien und der Westküste der USA ist eine direkte Kommunikation über ein Unterwasserkabel möglich, was eine hohe Betriebsgeschwindigkeit gewährleistet.

Verwandte Themen