Serverless架构的弹幕应用开发实践

简介: Serverless的理念是即时弹性,用完即走。服务并非长时间运行,这也就意味着像websocket这种长链接的请求模式看起来并不适合Serverless,但是否有其他的办法既能满足长连接模式请求,也能够利用Serverless本身特性呢?答案是肯定的,我们通过API网关来解决webscoket连接的问题,然后由网关触达Serverless服务的后端,本文以弹幕场景为例来介绍如何使用Serverless架构实现全双工通信。

Serverless的理念是即时弹性,用完即走。服务并非长时间运行,这也就意味着像websocket这种长链接的请求模式看起来并不适合Serverless,但是否有其他的办法既能满足长连接模式请求,也能够利用Serverless本身特性呢?答案是肯定的,我们通过API网关来解决webscoket连接的问题,然后由网关触达Serverless服务的后端,本文以弹幕场景为例来介绍如何使用Serverless架构实现全双工通信。

1. 概述

1.1 方案介绍

本方案使用阿里云Serverless开发者工具Serverless Devs进行部署操作,依赖API网关、函数计算、对象存储OSS、以及数据库存储Tablestore等阿里云产品做为基础服务,最大化利用每种产品的各自优势,实现一个高性能,低成本,少运维的弹幕场景应用。

1.2 目标读者

前端/全栈工程师,从事Serverless领域的开发者。

1.3 适用场景

需要全双工通信的Web应用,比如运营活动的弹幕应用、聊天室、多人协作平台等。

1.4 相关概念

  • 云解析DNS阿里云DNS解析服务 ,解析自定义域名到网关和OSS

  • API 网关 阿里云网关,接受客户端的websocket连接,同时分发请求给OSS和函数计算

  • 函数计算FC 阿里云函数计算产品,用来运行注册设备服务以及弹幕管控服务

  • 对象存储OSS 阿里云对象存储产品,存储弹幕大屏、用户手机端、管理云后台的静态资源

  • Tablestore 阿里云表格存储,持久化存储弹幕数据和设备数据

  • Serverlesss Devs 阿里云Serverless开发者工具,对应用进行初始化,构建,以及分布式部署

2. 方案架构

2.1 架构一览

image.png

整体架构采用DNS解析->API网关-> OSS|FC 。前端部分有三个工程,分别是弹幕大屏慕、玩家、管理员后台,后端则由设备注册和弹幕处理两部分构成,他们分别采用了函数计算的事件驱动和HTTP两种触发模式,由API网关触发,最后的数据持久化则使用Tabelestore实现。

2.2 流程说明

image.png

前文提到,弹幕应用总共由弹幕大屏玩家管理员三个客户端,以及设备注册服务弹幕处理服务组成。

1. 客户端跟服务端的长连接由API网关来承载,每次客户端连接到网关的时候,API网关都会存储设备编号,并且触发一次设备注册函数,函数会将设备编号存储到Tablestore以便后续查找。

2. 当用户发起弹幕的时候经API网关到FC的弹幕处理服务上,弹幕处理服务会做一次查询先判断弹幕是否被管制。

3. 如果弹幕无管制则直接查找当前的大屏幕设备id,并且进行网关的下行调用,网关再发到页面前端,显示数据。如果被管制,则查询在线的管理员设备,将弹幕发送给管理员后台,后续管理员可以进行通过或者拒绝操作,如果弹幕被通过会通知网关发送到大屏幕展示。

2.3 方案优势

弹幕应用的实用场景比较多,比如运营推广,年会活动等,但是通常实现一套带管控流程并且部署发布会花费比较多的成本,比如人力开发成本,机器采购成本,应用运维成本等,并且在应对非业务型开发上也需要投入大量精力,比如应对高并发,建设应用可观测体系等。

本架构方案采用Serverless架构,所有请求经过API网关统一处理,各类型请求按需部署到对应的云服务,静态部分部署到OSS,动态函数部分部署到FC。该架构可以充分利用各自产品的特性,例如:

  • API网关可以做限流安全校验等工作,也可以更灵活的扩展API接口

  • OSS 提供了极高可用性保障用户资源不丢失,同时后期可以增加CDN加速,增强用户的使用体验

  • FC提供Serverless服务 ,后端逻辑可以充分利用Serverless优势,比如弹性伸缩,高可用,少运维等,节省成本同时可以有效应对更多的并发流量。

  • Tablestore提供了Serverless化的数据库方案,按需使用成本低廉。

  • Serverless Devs 提供了完善的应用全生命周期管理能力, 包括应用初始化,构建,部署,调试,运维等

几分钟即可完成复杂架构应用的上线。

3. 方案实施

3.1 前提条件

准备自己的域名,可以在阿里云万网申请,安装好Serverless Devs开发者工具(Serverless Desktop或者Serverless cli),开通以下云产品:

这次我们引入了Tablestore的数据库做数据的持久化,同样需要创建好数据库实例备用。

3.2 操作步骤

步骤1: 配置Serverless Devs阿里云密钥信息 (获取操作云资源的基础凭证)

点击查看更详细的阿里云密钥教程

步骤2: 应用初始化 (获取弹幕应用模板)

  1. 打开 Serverless Desktop 搜索 “barrage” ,点击右下角的“S\”图标,下载该应用模板到本地

image.png  www5.gif

2. 本次初始化除了将应用模板下载到本地之外,还会帮忙初始化Tablestore的表及数据,所以需要预配置几个参数

参数名称

含义

示例

access

密钥别名,一组阿里云ak,sk对应的名称

default

domain

自定义域名

xxx.xxx.com

bucketName

阿里云OSS 的bucket名称

serverless-devs-barrage

endpoint

阿里云表格存储的实例公网访问地址

https://xxx.cn-hangzhou.ots.aliyuncs.com

instance

阿里云表格存储的实例名称

hanxietest

参数配置完成后,点击“确定”,Serverless Devs将初始化弹幕应用的表。

步骤3: 应用构建部署(将本地应用构建发布到线上)

初始化之后,我们重新进入配置页面,对项目进行部署。

依照配置信息 -> 全量操作 -> deploy 的路径进行操作,之后的部署过程会由Serverless Devs完成,Serverless Devs 的部署流程如下:

  1. 对大屏幕等前端应用进行依赖安装和静态资源构建。

  2. 根据region和OSS bucket信息,将前端应用的静态资源部署到指定的OSS上。

  3. 根据设置的函数信息将注册函数和管控函数部署到FC上,并且获取管控函数的触发器地址。

  4. 根据API网关的API设置以及上面步骤获取到的信息进行API的发布,并获取网关分组的二级域名。

  5. 根据用户提供的自定义域名以及前步返回的网关域名进行DNS绑定。

  6. DNS绑定完之后再对网关进行分组域名绑定。

www6.gif

步骤4. 应用部署效果查看(查看各服务是否部署完毕)

网关

image.png  image.png

函数计算

image.png

Oss

image.png

DNS

image.png

此时访问barragego.serverless-developer.com发现无法访问,检查发现是网关API的域名和OSS域名都未绑定成功,此时我们手动在相关产品的控制台上进行绑定。

image.png  image.png  image.png

4. 方案验证

接下来再访问自定义域名 ,比如这里是 barragego.serverless-developer.com ,即可看到效果。

www7.gif

5. 常见问题及答案

ServerlessDevs是什么,如何使用ServerlessDevs设置阿里云密钥

ServerlessDevs是阿里云Serverless产品的开发者工具,可以完成Serverless架构的应用初始化,构建,部署,调试等全生命周期操作,使用ServerlessDevs配置阿里云密钥信息的教程点击查看

API网关,函数计算,Tablestore,DNS,OSS等产品开通是否收费

以上这些产品开通都不收费

DNS组件的配置参数有哪些

DNS组件的配置参数:

  • domainName: 解析域名,用户自定义域名。

  • type: 解析类别 ,默认cname。

  • value: 解析值, 本文对应网关分组的二级域名。

弹幕应用部署后无法访问

本次部署需要进行三次域名绑定,分别是DNS绑定自定义域名到网关分组,网关分组绑定自定义域名,以及OSS数据传输绑定域名,如果无法访问可以手动到三个产品上去查看域名的绑定是否生效。

Tablestore 的增删改查API在哪

社区Nodejs SDK简易封装库

作者介绍
目录