腾讯前端开发工程师陈天忱:云开发助力小程序业务拓展

2024-07-13
来源:网络整理

关于作者

陈天辰,团队成员,腾讯前端开发工程师,主要负责腾讯课堂小程序、腾讯课堂直播间等业务模块。

首先我先介绍一下腾讯在线教育的三大主营业务:

这三项业务均有Web端、小程序端和客户端的产品,满足不同端用户的需求。

随着业务的快速发展,我们部门已经有十几个小程序,可能还会上线更多的工具类、平台类小程序。小程序业务众多意味着业务需求频繁,为了保证业务的稳定和高效,我们团队积极尝试小程序同构、CI、云开发等领域,取得了不错的效果。

面对频繁的业务需求,作为前端团队,我们一直在思考是否能够有更多的发挥空间,云开发的出现帮助我们拓展了前端的边界。

下面我们将以腾讯课堂小程序为例,介绍我们在小程序云端开发方面的实践。

如何实现多个小程序,多端共享同一套云端开发环境

2018年,微信小程序和云开发团队紧密合作,推出了小程序云开发,为每个小程序提供了非常简单、方便的小程序云开发入口,弱化了后端和运维的概念,不需要再搭建服务器。

然而,我们在开始使用云开发时就遇到了一个问题:多个小程序需要使用同一个云开发环境,以便复用一些通用的平台能力。然而在小程序云开发中,每个小程序只能使用内置的SDK调用自己小程序账号绑定的云开发环境。这样就需要维护多套云函数代码。显然这不是我们想要的,内置的SDK无法满足我们的需求。而且,如果我们的H5端和PC端要使用云开发,我们还要维护另一套环境。

我们曾经想过使用Node进行http调用,但是通过网关节点特定服务自己构建会面临容灾、运维、扩容等问题,违背了云开发的宗旨。

当然我们的H5、PC也可以使用小程序账号的云端开发环境,但是依然无法解决不同小程序之间公有云开发环境的问题。

所以一开始我们尝试解决这个问题,将接入层替换成 API 网关,满足需求。但是当我们接入 API 网关使用云端开发能力时,走的是网关调用,认证还得业务自己做,无法发挥小程序云端天然免认证开发的便利性。

因此我们和云端开发团队紧密合作,推出了小程序端的 Web SDK,这样就可以实现多端调用。其实 tcb-js-sdk-mp 和内置 SDK 一样,提供了自由认证等多种认证方式,我们可以像使用内置 SDK 一样获取用户的认证,节省开发成本。

如果你的企业也面临同样的问题,可以参考以下内容。

下面是我们使用 tcb-js-sdk-mp 的部分代码演示:

初始化稍有不同,这里的初始化和tcb-js-sdk一样,调用相应api验证登录状态。然后因为这里的函数调用不直接访问内置环境,所以还是需要做域名限制,防止被刷。将云函数调用方法封装一下,初始化一下,后续操作和使用内置SDK没什么区别。

通过云开发 CLI 工具构建功能自动化部署管理 (CI) 流程

当来到一个新的环境的时候,你就必须面对部署的问题。

部署云函数常用的方式是通过开发者工具。但是右键点击工具部署存在一些问题,比如手动选择环境,容易出错,可能引发严重的网络事故;依赖环境,内网包无法在线安装。本地上传的某些包可能会有平台特性(挂在特定环境依赖的安装上)。

但这些都可以通过已有的工具来解决。云开发提供了一套 CLI 工具,用于对云函数进行操作,包括登录、初始化、部署函数、触发函数等。通过这个工具,我们的云函数可以在单独的项目中开发,与小程序项目分开管理。此外,CLI 提供了灵活的配置、超时、环境变量、私有网络、是否安装依赖等功能。

我们依赖 -cli 配置了一个云函数部署的 CI 流程,通过不同的方式触发 CI,可以将函数部署到不同的环境,降低手动部署出现问题的风险。而且这里可以看到,我们的业务可能希望有一个预发布环境,在不使用小程序内置的云开发环境的情况下,可以突破两个环境的限制。

使用云开发数据库的事务功能来实施指导活动

接下来我来分享一下云数据库在我们业务中的一个实际场景应用。

我们有一个大促活动,需要学员邀请用户参与,这样可以收到一些优质课程,促进互动交流。这个需要用到小程序的动态消息能力。每个用户邀请的用户数量是有限制的,如果活动过期,会显示为已结束状态。点击帮助活动发起人,不可重复,人数满了就无法继续帮助。因为这个页面功能不涉及特别复杂的数据操作,比较简单。我们觉得这个功能很适合前端云开发来实现,可以节省一些后端的人力。

首先从建表开始,很简单,当有用户被邀请参加活动时,就往表里添加一个用户,并更新动态消息,当用户数达到上限时,就不再添加用户。但是这类活动往往伴随着并发操作,为了保证并发时数据的准确性,我们需要对操作的数据进行加锁,避免同时进行操作导致数据覆盖。

因此需要云数据库的事务能力。

我们还维护一个表,记录被邀请的名额信息,在事务中对名额进行操作,当事务完成时更新状态,否则事务可能会被回滚。

让我们仔细看看整个操作过程

1、在活动页面,用户点击启动活动,生成活动ID,此种生成活动ID的方式小程序和云端开发均支持,可以直接作为活动ID使用。

2、同时创建相应人员岗位数量上限,所有状态为空。

3、如果有人点击进入活动页面,那么首先通过活动ID获取对应的活动数据;然后基于云开发天然的免认证特性,直接在云函数中获取用户的信息,然后根据用户的信息和活动数据确定协助的权限。

比如这个是你发起的活动,那么就只显示邀请人数,如果过期了就显示过期,已经有人帮忙了,或者名额满了等等,这个是具体的业务逻辑,我就不细说了,我们给一个页面,有的话就给一个正常的页面。

当用户点击“帮助”时,会通过交易从对应的活动槽中取出一个空的活动槽并进行更新,此时该活动槽被交易锁定,此时如果有其他用户并发尝试修改该活动槽,则会直接失败,然后用户可以尝试占用下一个空槽。

如果您尝试依次占据所有空座位并​​且失败了,您将被报告为已满。

正常情况下,可直接进行更新操作,将用户字段改为用户的信息并标记为已占用。交易完成后,再将用户的信息推送到活动数据的字段中,并判断是否已满。更新完成后,即可结束交易,完成后续的动态消息更新操作。

如果这个过程中出现错误,我们可以回滚事务,以保证数据的准确性。

小程序云开发的出现,给了我们前端团队更广阔的发挥空间,也让我们能够更快速的响应运营推广需求。小程序云开发的应用技巧还有很多值得探索的地方,欢迎大家一起交流学习。

预告:小程序云开发官方直播课程《数据库专题》第二期直播将于11日开启,点击下方搜索“云开发数据库高可用高性能实现”即可预约。

分享