Interne Netzwerke verwenden häufig Verbindungen mit 1 Gbit / s oder schneller. Glasfaserverbindungen oder Bonding ermöglichen viel höhere Bandbreiten zwischen den Servern. Stellen Sie sich nun die durchschnittliche Größe einer JSON-Antwort von einer API vor. Wie viele solcher Antworten können in einer Sekunde über eine 1-Gbit / s-Verbindung übertragen werden?
Lassen Sie uns tatsächlich die Mathematik machen. 1 Gbit / s entspricht 131 072 KB pro Sekunde. Wenn eine durchschnittliche JSON-Antwort 5 KB beträgt (was ziemlich viel ist!), Können Sie mit nur einem Maschinenpaar 26.214 Antworten pro Sekunde über das Kabel senden . Nicht so schlimm, oder?
Aus diesem Grund ist die Netzwerkverbindung normalerweise nicht der Engpass.
Ein weiterer Aspekt von Microservices ist die einfache Skalierbarkeit. Stellen Sie sich zwei Server vor, von denen einer die API hostet und der andere sie verbraucht. Wenn die Verbindung zum Engpass wird, fügen Sie einfach zwei weitere Server hinzu, und Sie können die Leistung verdoppeln.
Dies ist der Fall, wenn unsere früheren 26 214 Antworten pro Sekunde für den Maßstab der App zu klein werden. Sie fügen weitere neun Paare hinzu und können jetzt 262.140 Antworten liefern.
Kommen wir jedoch zu unserem Serverpaar zurück und führen einige Vergleiche durch.
Wenn eine durchschnittliche nicht zwischengespeicherte Abfrage an eine Datenbank 10 ms dauert, sind Sie auf 100 Abfragen pro Sekunde beschränkt. 100 Abfragen. 26 214 Antworten. Das Erreichen der Geschwindigkeit von 26.214 Antworten pro Sekunde erfordert ein hohes Maß an Zwischenspeicherung und Optimierung (wenn die Antwort tatsächlich etwas Nützliches wie das Abfragen einer Datenbank erfordert; Antworten im "Hello World" -Stil sind nicht qualifiziert).
Auf meinem Computer passierte DOMContentLoaded für Googles Homepage gerade 394 ms. nachdem die Anfrage gesendet wurde. Das sind weniger als 3 Anfragen pro Sekunde. Für die Homepage von Programmers.SE sind es 603 ms. nachdem die Anfrage gesendet wurde. Das sind nicht einmal 2 Anfragen pro Sekunde. Ich habe übrigens eine 100-Mbit / s-Internetverbindung und einen schnellen Computer: Viele Benutzer werden länger warten.
Wenn der Engpass die Netzwerkgeschwindigkeit zwischen den Servern ist, können diese beiden Sites buchstäblich Tausende von Aufrufen an verschiedene APIs ausführen, während die Seite bereitgestellt wird.
Diese beiden Fälle zeigen, dass das Netzwerk in der Theorie wahrscheinlich nicht Ihr Engpass ist (in der Praxis sollten Sie die tatsächlichen Benchmarks und Profile durchführen, um den genauen Ort des Engpasses Ihres bestimmten Systems zu bestimmen , das auf einer bestimmten Hardware gehostet wird). Viel wichtiger ist die Zeit, die für die eigentliche Arbeit aufgewendet wird (wären dies SQL-Abfragen, Komprimierung usw.) und das Senden des Ergebnisses an den Endbenutzer.
Denken Sie an Datenbanken
Normalerweise werden Datenbanken getrennt von der Webanwendung gehostet, die sie verwendet. Dies kann zu Bedenken führen: Wie steht es mit der Verbindungsgeschwindigkeit zwischen dem Server, auf dem sich die Anwendung befindet, und dem Server, auf dem sich die Datenbank befindet?
Es scheint , dass es Fälle gibt , in denen in der Tat, die Verbindungsgeschwindigkeit problematisch wird, das heißt , wenn Sie große Mengen an Daten speichern , die nicht brauchen , von der Datenbank selbst verarbeitet werden und sollten zur Verfügung stehen jetzt (dh große binäre Dateien). Solche Situationen sind jedoch selten: In den meisten Fällen ist die Übertragungsgeschwindigkeit im Vergleich zur Verarbeitungsgeschwindigkeit der Abfrage selbst nicht so hoch.
Die tatsächliche Übertragungsgeschwindigkeit hängt davon ab, ob ein Unternehmen große Datenmengen auf einem NAS hostet und auf den NAS von mehreren Clients gleichzeitig zugegriffen wird. Hier kann ein SAN eine Lösung sein. Dies ist jedoch nicht die einzige Lösung. Cat 6-Kabel unterstützen Geschwindigkeiten von bis zu 10 Gbit / s. Das Bonden kann auch verwendet werden, um die Geschwindigkeit zu erhöhen, ohne die Kabel oder Netzwerkadapter zu wechseln. Es gibt andere Lösungen, die die Datenreplikation über mehrere NAS hinweg umfassen.
Vergiss die Geschwindigkeit; Denken Sie an Skalierbarkeit
Ein wichtiger Punkt einer Web-App ist die Skalierbarkeit. Während die tatsächliche Leistung von Bedeutung ist (weil niemand für leistungsfähigere Server zahlen möchte), ist die Skalierbarkeit viel wichtiger, da Sie bei Bedarf zusätzliche Hardware bereitstellen können.
Wenn Sie eine nicht besonders schnelle App haben, verlieren Sie Geld, weil Sie leistungsstärkere Server benötigen.
Wenn Sie eine schnelle App haben, die sich nicht skalieren lässt, verlieren Sie Kunden, weil Sie nicht in der Lage sind, auf eine steigende Nachfrage zu reagieren.
Ebenso wurden virtuelle Maschinen vor einem Jahrzehnt als ein großes Leistungsproblem wahrgenommen. In der Tat hatte das Hosten einer Anwendung auf einem Server im Vergleich zum Hosten auf einer virtuellen Maschine erhebliche Auswirkungen auf die Leistung. Obwohl die Lücke heute viel kleiner ist, besteht sie immer noch.
Trotz dieses Leistungsverlustes wurden virtuelle Umgebungen aufgrund ihrer Flexibilität sehr beliebt.
Wie bei der Netzwerkgeschwindigkeit stellen Sie möglicherweise fest, dass die virtuelle Maschine der eigentliche Engpass ist. Angesichts Ihrer tatsächlichen Größe können Sie Milliarden von Dollar sparen, indem Sie Ihre App direkt ohne die virtuellen Maschinen hosten. Bei 99,9% der Apps ist dies jedoch nicht der Fall: Ihr Engpass liegt an einer anderen Stelle, und der Nachteil eines Verlusts von wenigen Mikrosekunden aufgrund der VM kann leicht durch die Vorteile der Hardwareabstraktion und -skalierbarkeit ausgeglichen werden.