WebSocket+Serverless架构实践与落地

作者:禅与计算机程序设计艺术

1.简介

WebSocket(全称:Web Sockets)是一个在单个TCP连接上进行双向通信的协议,它允许服务端主动推送数据到客户端。随着云计算、大数据、物联网、移动互联网等技术的兴起,基于WebSocket的应用越来越多,例如聊天室、视频会议、智能终端、游戏直播、股票交易仿真等场景都有广泛应用。

传统的基于HTTP的服务器架构需要购买负载均衡设备或框架才能支持WebSocket,而Serverless架构则不需要如此复杂的架构。本文将对如何利用Serverless架构构建一个支持WebSocket通信的消息处理系统进行展开阐述。

文章的主要内容如下:

  1. 什么是Serverless?
  2. 为何要用Serverless架构?
  3. Serverless架构优缺点
  4. WebSocket与Serverless结合实践
  5. 附录FAQ
  6. 源码仓库及示例代码链接

    1.什么是Serverless?

    Serverless(无服务器)架构是一个构建应用程序时不用关心服务器基础设施的编程模型。开发者只需关注业务逻辑,通过工具或平台提供的API调用、事件触发或者其他形式的直接执行即可实现应用程序的功能。Serverless架构目前已经得到了大规模应用,如亚马逊AWS Lambda、微软Azure Functions、谷歌Cloud Functions等。

Serverless架构不仅可以降低运维成本,还可以帮助用户快速启动自己的应用,因为它消除了硬件投资、服务器管理和配置的复杂性。Serverless架构有利于降低开发和运营成本,因此可以让企业实现快速迭代、缩短交付周期,提升产品价值。

2.为何要用Serverless架构?

由于Serverless架构不需要管理服务器,因此部署应用和扩展资源就显得十分简单。当应用流量增长到一定程度时,可以通过增加服务器数量来处理更多请求;当流量减少时,也可以减少服务器的数量来节约资源。对于初创公司、个人项目、小型团队来说,可以非常方便地部署应用。同时,Serverless架构可以很好地适应各种变化,并为用户节省服务器、带宽等支出。

虽然Serverless架构简单易用,但也存在一些局限性。首先,Serverless架构无法完全取代服务端的功能。比如,在处理长连接、服务间调用等方面,依然需要编写后台服务来处理任务。其次,Serverless架构需要依赖第三方厂商提供的插件或服务,这一点也比较麻烦。

在实际应用中,可以根据需求选取不同的架构模式,例如微服务架构、容器化架构等。

3.Serverless架构优缺点

3.1 优点

  1. 按需付费 Serverless架构可以使企业在使用过程中只支付那些使用的资源费用,这大大降低了成本。另外,用户只需要支付函数的运行时间,而不是每台服务器的运行时间。
  2. 自动伸缩 在流量高峰期,Serverless架构可以自动扩容来响应用户的请求,并在流量低谷期自动缩容。这可以有效地节省资源,提高效率。
  3. 无服务器环境 用户只需上传源代码,Serverless架构平台就可以自动分配资源运行函数。这种架构下无需管理服务器和服务器配置,也不会产生资源浪费。
  4. 灵活弹性 由于平台不会占用过多资源,因此可以根据应用的使用情况动态调整资源分配。这也保证了弹性伸缩能力。
  5. 高效运行 由于无需管理服务器,因此Serverless架构可以在短时间内完成高并发的请求,这比传统架构更加高效。
  6. 降低运营成本 不需要维护服务器,也无需担心硬件设备的故障,从而降低了运维成本。
  7. 按需付费 服务使用费用可以根据函数的运行时间来收取,这比传统架构的固定费用模式更灵活。

    3.2 缺点

  8. 时延 由于使用了异步架构,因此函数调用可能导致延迟。不过,这可以通过并发处理的方式来缓解。
  9. 可用性 如果某个函数出现错误,可能会影响整个服务的可用性。
  10. 隔离性 函数的运行环境相互独立,无法访问共享资源,这可能会导致数据安全问题。
  11. 执行速度 由于使用了异步架构,因此函数的执行速度可能会受到限制。如果函数执行时间较长,那么它的执行结果可能需要等待很久。

    4.WebSocket与Serverless结合实践

    基于前文所述的Serverless架构,结合WebSocket技术,可以构建一个支持WebSocket通信的消息处理系统。这个系统可以接收前端的WebSocket请求,解析消息内容,并调用相应的后端服务接口来进行处理。

架构图如下:

  1. 前端向WebSocket API发送WebSocket请求,要求建立连接。
  2. WebSocket API调用Serverless平台,请求为前端WebSocket建立一个虚拟网络通道。
  3. 平台在后台创建WebSocket虚拟网络通道。
  4. 前端向WebSocket API发送消息,API将消息传递给服务端的消息队列。
  5. 服务端的消息队列获取消息,调用相应的后台服务接口处理消息。
  6. 服务端的后台服务接口处理完消息,返回结果给消息队列。
  7. 消息队列将结果转发给前端。
  8. WebSocket API将消息推送给前端。

利用Serverless架构实现WebSocket通信的优点包括:

  1. 用户无需预先购买服务器,只需关注业务逻辑的实现。
  2. 平台可以自动扩容,即使遇到突发流量也可快速处理。
  3. 服务端的消息处理代码可以高度优化,避免网络拥堵等问题。
  4. 用户无需担心底层网络结构和带宽等问题。

5. FAQ

5.1 是否会遇到跨域问题?

Serverless架构平台一般提供不同的域名访问,因此不同域名下的WebSocket请求会被视为不同的请求,这意味着请求头中的Origin字段也会发生变化。浏览器为了安全考虑,默认情况下会阻止跨域请求,因此无法成功建立连接。但是,可以通过一些跨域解决方案来处理跨域问题,如CORS(Cross Origin Resource Sharing)。

5.2 是否需要为每个函数单独配置角色权限?

在Serverless架构下,每个函数都有自己独立的执行环境,并且可以使用IAM(Identity and Access Management)角色来控制访问权限。因此,不需要为每个函数单独配置权限。

5.3 请求失败的原因有哪些?

  1. 没有创建WebSocket API。 创建WebSocket API需要使用AWS API Gateway来创建,否则需要额外购买云资源。
  2. 没有授权访问WebSocket API。 需要在API Gateway上设置相关的调用方式,并且授予对应的权限。
  3. 服务端的后台服务出现问题。 检查服务端的代码是否正确,以及服务端日志的输出信息。
  4. WebSocket API调用超时。 此类问题可能由于网络波动等原因引起,可以尝试重试或升级到最新版本的软件。

5.4 是否会被计入流量?

在使用WebSocket的过程中,用户的请求不会被计入流量,但WebSocket连接的建立、关闭等行为会被计入流量。

5.5 如何监控WebSocket状态?

可以利用AWS CloudWatch来监控WebSocket的状态,包括连接数、连接持续时间等。

6. 源码仓库及示例代码链接

https://github.com/coocolabs/serverless-websocket-example

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/133504751