有没有无服务器技术可以构建无服务器WebSocket服务器?
我知道长时间运行连接的本质是有状态的,但如果唯一的状态是传输层上的连接本身,那么似乎可以有一个无服务器产品来抽象这一点,这样您只需处理应用程序层。是否有云提供商(如AWS、Azure等)允许这样做?我看不出AWS Lambda或Azure函数可以实现这一点。
大家有什么想法吗?只是想确认一下。
谢谢
有没有无服务器技术可以构建无服务器WebSocket服务器?
我知道长时间运行连接的本质是有状态的,但如果唯一的状态是传输层上的连接本身,那么似乎可以有一个无服务器产品来抽象这一点,这样您只需处理应用程序层。是否有云提供商(如AWS、Azure等)允许这样做?我看不出AWS Lambda或Azure函数可以实现这一点。
大家有什么想法吗?只是想确认一下。
谢谢
目前,AWS Lambda和Azure Functions不支持此功能。如果您计划在AWS中设置可扩展的环境并使用Websockets,则可以使用应用程序负载均衡器,并在ECS集群或支持Websocket的EC2实例前面使用像NodeJS这样的服务器。
另一种解决方案是选择完全托管的服务,例如Google Firebase Service或Pubnub,以处理实时部分。
如果仅在传输层存在连接状态
事实并非如此。Web套接字连接交换保持活动作为第7层负载。其他人可能会认为它更准确地描述为介于第6层和第7层之间的子层...但无论如何,它都远高于传输层。
许多应用程序以其他方式使用Web套接字,这些方式也不是无状态的。一旦连接,然后进行身份验证,就没有必要不断重新进行身份验证,因为现在在套接字上的客户端将是15分钟后相同的客户端,并且这是在无服务器环境中无法避免的开销 - 每个WebSocket上的操作都需要重新进行身份验证。例如,对于常量数据流,服务器可能会跟踪已发送的内容或客户端感兴趣的特定子集。
如果您不维护(或不需要)与服务器的持久连接,则可以问“为什么使用Web套接字?”
也许还有相关的内容:HAProxy是一个常用的负载均衡器,支持Web Socket,并为每个当前Web Socket连接维护与单个后端服务器的持久连接。如果该后端服务器离线,负载均衡器没有选择其他后端服务器来处理现有连接的规定。客户端将需要重新连接。Fanout可以做到这一点。它作为代理工作,可以将WebSocket客户端活动转换为一系列HTTP请求。这使得像Lambda这样的FaaS后端可以管理原始的WebSockets。只有在需要响应活动时才会调用该函数。
文档:https://fanout.io/docs/devguide.html#custom-websocket-api
WebSocket-over-HTTP协议:http://pushpin.org/docs/protocols/websocket-over-http/