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

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

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

概述

方案介绍

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

目标读者

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

适用场景

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

相关概念

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

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

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

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

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

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

方案架构

架构一览

image.png

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

流程说明

image.png

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

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

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

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

方案优势

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

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

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

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

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

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

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

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

方案实施

前提条件

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

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

操作步骤

步骤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

方案验证

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

www7.gif

常见问题及答案

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

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

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

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

DNS组件的配置参数有哪些

DNS组件的配置参数:

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

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

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

弹幕应用部署后无法访问

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

Tablestore 的增删改查API在哪

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
Java 中间件 Serverless
CSE:阿里在线应用如何演进成Serverless架构
**Cloud Service Engine**,简称**CSE**,是中间件部门研发的面向通用Serverless计算的中间件产品,目标是具备AWS Lambda的各种优势,同时可以解决AWS Lambda的关键技术缺陷。 AWS Lambda如果用于核心业务,可能会有以下缺陷:(仅代表个人观点) * 要求用户以Function为单位开发,全新的开发框架,云厂商强绑定。社区主
2811 0
|
前端开发 小程序 Serverless
Serverless 服务中的前端解决方案—— Serverless 的小程序开发
Serverless 服务中的前端解决方案—— Serverless 的小程序开发自制脑图
80 0
Serverless 服务中的前端解决方案—— Serverless 的小程序开发
|
前端开发 Serverless
Serverless 服务中的前端解决方案——通用 Serverless 架构
Serverless 服务中的前端解决方案——通用 Serverless 架构自制脑图
96 0
Serverless 服务中的前端解决方案——通用 Serverless 架构
|
前端开发 Serverless
Serverless 服务中的前端解决方案——Serverless 简介
Serverless 服务中的前端解决方案——Serverless 简介自制脑图
57 0
Serverless 服务中的前端解决方案——Serverless 简介
|
Serverless 数据处理 开发者
serverless 入门与实践47 | 学习笔记: 应用 Serverless 化,让业务开发心无旁骛
serverless 入门与实践47 | 学习笔记: 应用 Serverless 化,让业务开发心无旁骛
214 1
serverless 入门与实践47 | 学习笔记: 应用 Serverless 化,让业务开发心无旁骛
|
人工智能 运维 自然语言处理
serverless 入门与实践37 | 学习笔记: TapTap 算法平台的 Serverless 探索之路
serverless 入门与实践37 | 学习笔记: TapTap 算法平台的 Serverless 探索之路
176 0
serverless 入门与实践37 | 学习笔记: TapTap 算法平台的 Serverless 探索之路
|
弹性计算 架构师 Serverless
serverless 入门与实践 | 学习笔记5: 华为终端云从微服务到 Serverless 的架构演进实践
serverless 入门与实践 | 学习笔记5: 华为终端云从微服务到 Serverless 的架构演进实践
241 0
serverless 入门与实践 | 学习笔记5: 华为终端云从微服务到 Serverless 的架构演进实践
|
存储 NoSQL 前端开发
人人都是 Serverless 架构师 | 弹幕应用开发实战
如何使用 Serverless 架构实现全双工通信的应用,Serverless 架构中数据库是如何使用的,本篇文章将为您揭开答案。
人人都是 Serverless 架构师 | 弹幕应用开发实战
|
存储 NoSQL 网络协议
人人都是Serverless架构师之弹幕应用开发实战
如何使用serverless架构实现全双工通信的应用,serverless架构中数据库是如何使用的,本篇文章将为您揭开答案。
547 0
人人都是Serverless架构师之弹幕应用开发实战
|
消息中间件 存储 弹性计算
带你体验云原生场景下 Serverless 应用编程模型
阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC、ECI 工作负载进行统一应用编排,支持事件驱动、自动弹性,为您提供统一的 Serverless 应用编程模型。
418 0