2017-03-15 2 views
7

Gibt es serverbasierte Technologien, die es ermöglichen, einen serverlosen Websocket-Server zu erstellen?Serverloser Web-Socket-Server?

Ich weiß, dass lange laufende Verbindungen die Eigenschaft haben, dass sie zustandsbehaftet sind, aber wenn der einzige Zustand die Verbindung selbst auf der Transportschicht ist, dann scheint es, als könnte es ein serverloses Produkt geben, das abstrahiert die Anwendungsschicht. Gibt es einen Cloud-Anbieter (AWS, Azure, etc.), der dies erlaubt? Ich sehe keinen Weg für AWS Lambda oder Azure-Funktionen, dies zu erreichen.

Wer hat irgendwelche Ideen? Einfach überprüfen.

Dank

Antwort

1

Derzeit AWS Lambda und Azure-Funktionen unterstützen dies nicht. Wenn Sie eine skalierbare Umgebung in AWS mit Websockets einrichten möchten, können Sie Application Load Balancer und vor ECS-Clustern oder EC2-Instanzen mit von WebSocket unterstützten Servern wie NodeJS verwenden.

Eine andere Lösung besteht darin, mit vollständig verwalteten Diensten wie Google Firebase Service oder Pubnub in Ihrer Architektur den Echtzeitteil zu verarbeiten.

+0

Dank @ashan. Ich wusste nichts über die vollverwalteten – ChrisBellew

1

wenn der einzige Staat ist die Verbindung selbst auf der Transportschicht

Das ist nicht wirklich der Fall ist. Web Socket Verbindungen exchange keep-alives als Schicht 7 Nutzlast. Andere mögen argumentieren, dass es genauer gesagt als eine Unterschicht irgendwo zwischen den Schichten 6 und 7 beschrieben wird ... aber in jedem Fall ist es weit über der Transportschicht.

Und viele Anwendungen verwenden Web-Sockets auf andere Arten, die auch nicht zustandslos sind. Sobald die Verbindung hergestellt und authentifiziert ist, müssen Sie sich nicht ständig neu authentifizieren, da der Client auf dem Socket jetzt in 15 Minuten derselbe Client ist und dies ein Overhead ist, der in einer serverlosen Umgebung nicht vermeidbar wäre - jede Aktion an Ein Websocket müsste erneut authentifiziert werden. Bei einem anderen Beispiel mit einem konstanten Datenstrom könnte der Server verfolgen, was gesendet wurde oder welche bestimmte Teilmenge des Streams, an dem der Client interessiert ist.

Wenn Sie nicht warten (oder nicht brauchen) eine persistente Verbindung zu einem Server, könnte die Frage gestellt werden: "Warum benutzen Sie einen Web-Socket?"

Vielleicht auch relevant: HAProxy, eine häufig verwendete Load Balancer mit Web-Socket-Unterstützung, verwaltet eine dauerhafte Verbindung zu einem einzelnen Back-End-Server für jede aktuelle Web-Socket-Verbindung. Wenn dieser Back-End-Server offline geschaltet wird, gibt es keine Möglichkeit, im Balancer ein anderes Back-End für die bestehende Verbindung auszuwählen. Der Client muss sich erneut verbinden.

1

AWS IoT stellt MQTT-Endpunkte bereit und unterstützt MQTT + WebSocket auf Port 443. Dies ist möglicherweise das Ergebnis, das Sie als gehosteter Dienst in AWS am ehesten erreichen können. Überprüfen Sie diesen Link: AWS IoT Protocols Sie können Regeln definieren, die Lambdas in AWS IoT auslösen oder sie an Kinesis übergeben und Ströme über Lambdas verarbeiten.

1

Fanout kann dies tun. Es fungiert als Proxy, der WebSocket-Client-Aktivitäten in eine Reihe von HTTP-Anforderungen übersetzen kann. Dadurch können FaaS-Backends wie Lambda rohe WebSockets verwalten. Die Funktion wird nur aufgerufen, wenn eine Aktivität vorliegt, auf die reagiert werden soll.

Docs: https://fanout.io/docs/devguide.html#custom-websocket-api

WebSocket-over-HTTP-Protokoll: http://pushpin.org/docs/protocols/websocket-over-http/

Python Helfer Bibliothek: https://github.com/fanout/python-faas-grip

Verwandte Themen