2016-07-09 13 views
0

Mein Klient bittet mich, eine Echtzeitanwendung zu erstellen, die in Echtzeit chatten, Bilder und Videos senden kann. Er bat mich, meinen eigenen Technologie-Stack zu entwickeln, also habe ich viele Nachforschungen angestellt und herausgefunden, dass der einfachste zu verwendende Build-StackKann dieser Technologie-Stack skaliert werden?

1) Node.js und Cluster ist, um die CPU zu maximieren Kern für eine Instanz von Server - Sprache

2) Socket.io - Echtzeit-Framework

3) Redis - pub/sub für mehrere Instanzen von Server

4) Nginx - Proxy und Lastausgleich umkehren Mehrere Server

5 Amazon EC2) - der Server

6) Amazon S3 und Cloudfront laufen - die Bilder/Videos zu speichern und

Korrigieren Sie mich, liefern, wenn ich für die oben Stapel falsch bin. Meine eigentliche Frage ist: Kann der oben genannte Technologie-Stack 1.000.000 Nachrichten pro Sekunde (Text, Bilder, Videos) skalieren?

Jeder, der mit node.js und socket.io Erfahrungen gemacht hat, könnte mir einen Einblick oder eine Alternative zu dem obigen Stapel geben.

Grüße,

SinusGob

+0

Wenn Sie socket.io für Push-Benachrichtigung verwenden möchten, empfehle ich Ihnen, APN, GCM so für Chat-Server zu verwenden Ich empfehle Ihnen, XMPP Open-Source-Implementierungen wie WhatsApp und andere zu verwenden – Damirchi

+2

Dies ist ein bisschen eine naive Frage. Kann ein System, das 1.000.000 Nachrichten pro Sekunde verarbeiten kann, aus den Stücken bestehen, die Sie benannt haben? Ja. Haben Sie oder wir eine Vorstellung davon, wie viele Server, Load Balancer, Bandbreite, Netzwerkkarten und andere benutzerdefinierte Entwicklungen, etc ... es braucht, um zu diesem Maßstab zu gelangen. Nein. Es ist hier sehr wenig spezifiziert, um so weit zu gehen. – jfriend00

+0

Wenn Sie eine einzelne Nachricht in 5ms verarbeiten könnten (das ist eine wilde Zahl, die aus der Luft gerissen wurde, da Sie überhaupt keinen Kontext bereitgestellt haben, um zu wissen, was der Server tun muss), könnten Sie 200 Nachrichten/Sek würde 5000 Kerne und ziemlich viel Netzwerkbandbreite benötigen, um 1.000.000 Nachrichten/Sek. zu machen. Ich würde vorschlagen, dass Sie damit beginnen, Prüfmusterprüfstände zu entwickeln, mit denen Sie Tests starten können. Nur so können Sie wirklich wissen, ob Sie tun können, was Sie tun müssen. Messen. – jfriend00

Antwort

1

Meine eigentliche Frage ist, kann den obigen Tech-Stack Maßstab 1.000.000 Meldungen pro Sekunde (Text, Bilder, Videos)?

Sicher kann es. Mit dem richtigen Design und genug Hardware. Die Frage, die Ihr Kunde stellen sollte, ist wirklich nicht, ob es möglich ist, so groß zu werden, aber zu welchen Kosten und Praktikabilität kann es getan werden und sind das die besten Entscheidungen.

die an jedem Stück aussehen Lassen Sie erwähnt haben:

node.js - Für ein I/O-centric app, es ist eine ausgezeichnete Wahl für hohen Maßstab, und es kann durch den Einsatz von vielen CPUs in einem Cluster skaliert (sowohl Multi-Prozess pro Server als auch Multi-Server). Wie praktisch diese Art von Skalierung ist, hängt stark davon ab, auf welche Art von gemeinsamen Daten all diese Serverprozesse zugreifen müssen. Normalerweise ist der Datenspeicher letztlich der härtere Flaschenhals bei der Skalierung, da es einfacher ist, mehr Server bei der Anforderungsverarbeitung bereitzustellen. Es ist nicht so einfach, mehr Hardware in einen zentralen Datenspeicher zu werfen. Es gibt Möglichkeiten, dies zu tun, aber es hängt viel von den Anforderungen der App für wie Sie es tun und wie schwer es ist.

socket.io - Wenn Sie effiziente Server Push von kleineren Nachrichten benötigen, dann ist socket.io wahrscheinlich der beste Weg zu gehen, weil es am effizientesten bei Push an den Client ist. Es ist jedoch nicht bei allen Arten von Transport gut. Zum Beispiel würde ich keine großen Bilder oder Videos durch socket.io bewegen, da es dafür mehr Möglichkeiten gibt. Die Verwendung von socket.io hängt also stark davon ab, wofür genau die App es verwenden möchte. Wenn Sie ein Video an einen Client senden möchten, können Sie auch nur eine URL eingeben und den Client dazu veranlassen, das Video über eine normale http-URL unter Verwendung der bekannten High-Scale-Technologie anzufordern.

Redis - Wieder, großartig für einige Dinge, nicht gut in allem.Also, es hängt wirklich davon ab, was du versuchst zu tun. Was ich zuvor erklärt habe, ist, dass das Design Ihres Datenspeichers und die Anzahl der Transaktionen durch diese wahrscheinlich Ihre wirklichen Probleme sind. Wenn ich diesen Job anfange, würde ich mit dem Verständnis der Datenspeicheranforderungen für einen Server, Transaktionen pro Sekunde verschiedener Typen, Caching-Strategie, Redundanz, Failover, Datenpersistenz usw. beginnen und das High entwerfen Skalieren Sie zuerst den Zugriff auf Daten. Ich wäre mir nicht ganz sicher, ob Redis die bevorzugte Wahl wäre. Ich würde wahrscheinlich vorschlagen, dass Sie zu Beginn des Projekts einen hochrangigen Datenbank-Typ als Berater benötigen.

Nginx - Viele große Websites mit Nginx, so dass es sicherlich ein gutes Werkzeug ist. Ob es genau das richtige Werkzeug für Sie ist, hängt von Ihrem Design ab. Ich würde wahrscheinlich an diesem Teil arbeiten, weil es weniger zentral für das Design und sobald der Rest des Systems ausgelegt ist, können Sie dann überlegen, was Sie hier brauchen.

Amazon EC2 - Eine von mehreren möglichen Möglichkeiten. Diese Entscheidungen sind im Vergleich zwischen Äpfel und Äpfel schwer zu vergleichen. Große Systeme wurden aus EC2 gebaut, daher gibt es dort einen Konzeptnachweis, und die allgemeine Architektur scheint angemessen zu sein. Wenn du wissen wolltest, wo die echten Gremlins sind, brauchst du einen Berater, der auf EC2 High-Scale-Sachen gemacht hat.

Amazon S3 - Ich persönlich kenne einige sehr hohe Speicher- und Bandbreiten-Sites mit S3 für Video und Bilder. Es funktioniert dafür.

Also ... diese sind im Allgemeinen wahrscheinlich gute Werkzeuge zu verwenden, wenn sie auf die richtige Weise verwendet werden. Redis wäre ein Fragezeichen, abhängig von den Speicheranforderungen der tatsächlichen Anwendung (Sie haben keine Anforderungen gestellt und eine Datenbank kann nicht mit Null-Anforderungen ausgewählt werden). Eine fundiertere Antwort würde auf der Zusammenstellung eines hohen Anforderungssatzes basieren, der analysiert, was das System tun muss, um 1.000.000 zu bedienen. Diese Anforderungen könnten mit bekannten Fähigkeiten für einige dieser Teile verglichen werden, um einen Ballpark beim Skalieren eines Systems zu starten. Dann müssten Sie einige Benchmark-Tests durchführen, um einige Tests an bestimmten Teilen des Systems durchzuführen. Ein Großteil des Erfolgs des Scheiterns hängt davon ab, wie die App erstellt wurde und wie die Tools verwendet wurden, als ob die Tools ausgewählt wurden. Sie können wahrscheinlich eine erfolgreiche Skalierung mit vielen verschiedenen Arten von Werkzeugen erstellen. Heck, Facebook läuft auf PHP (naja, ein stark modifiziertes, angepasstes PHP, das zur Laufzeit überhaupt kein typisches PHP ist).

+0

Vielen Dank für die Klärung oben genannten Stapel! – sinusGob

Verwandte Themen