2016-04-04 8 views
9

Um einen Slack Bot zu implementieren, muss ich mich mit 'Real Time Messaging API' von Slack beschäftigen. Es ist eine WebSocket-basierte API, mit der Sie Ereignisse von Slack in Echtzeit empfangen und Nachrichten als Benutzer senden können. weitere Informationen: https://api.slack.com/rtmWie man einen freien Bot auf Tausende von Teams skalieren kann

für einen Bot erstellen nur ein Team, ich brauche eine websocket Verbindung zu öffnen und es für Veranstaltungen zu hören.

Um den Slack-Bot für ein anderes Team zur Verfügung zu stellen. Ich muss eine neue Websocketverbindung öffnen. So ,

  • 1 Team => 1 websocket Verbindung
  • 2 Teams => 2 websocket Verbindungen
  • N-Teams => N websocket Verbindungen

, was soll ich tun, um meine websocket maßstabs Verbindungen für endlose Teams?

Welche Art von Architektur kann mit Autoscaling von 1000 von Websockets-Verbindungen umgehen?

Antwort

7

Mit slack Steckdosen, haben Sie viele Dinge maßstabs:

  • Anzahl der Steckdosen. Das ist einfach, denn selbst billige Server können Tausende von Sockets bewältigen, wie mehr als 50k. Aber jeder Sockel repräsentiert ein paar andere Arten von Ladung, die als nächstes aufgeführt sind.
  • Die Menge an Speicher pro Team, die von Ihrer eigenen Serverimplementierung abhängt. Wenn Sie versuchen, eine große Menge an Nachrichtenhistorien im Speicher zu behalten, werden Sie schneller die Grenze Ihres Servers erreichen, als wenn Ihr Nachrichtenverarbeitungscode etwas zustandslos ist.
  • Die Anzahl der E/A, die dazu führen können, dass Sie alle Image-Dienste an einen separaten Load Balancer übertragen möchten.

Die andere Sache zu betrachten ist Fehlertoleranz. Angenommen, Sie haben einen Lastenausgleich vorgenommen und einer Ihrer Server bearbeitet 50 Teams. Dieser Server ist der Einzige, der diese 50 Teams behandelt. Wenn er also ausfällt, gehen alle 50 Bots offline. Alternativ können Sie mehrere Sockets pro Team auf separaten Servern öffnen und eine Nachrichtenbehandlungswarteschlange verwenden, sodass auf jede Nachricht nur einmal geantwortet wird.

Also die Architektur, die ich vorschlagen würde, ist eine dünne, redundante Load Balancer für RTM-Sockets als erste Schicht und eine zuverlässige Nachrichtenwarteschlange darunter.

+0

Es stimmt, dass Node viele gleichzeitige Sockets verwalten kann, aber die Latenz wird unberechenbarer. Wenn Sie leistungsabhängigen Code haben, ist es sinnvoll, ein Clustering-System zu verwenden, um die Last über mehrere Prozesse hinweg auszugleichen, so dass ein kurzzeitiger Blip in einem das Ganze nicht stört. – tadman