作者简介
IMWEB团队成员陈天辰,腾讯前端开发工程师,主要负责腾讯课堂小程序,腾讯课堂直播室和其他业务模块。
首先介绍腾讯在线教育下的三大业务:
这三个公司都在Web,小程序和客户端上都提供了登陆产品,以满足不同端用户的需求。
随着业务的快速发展,在小程序方面,与我们部门相对应的十几个小程序,并且可能会推出更多的工具和平台小程序。众多小程序业务意味着频繁的业务需求。为了确保业务的稳定性和效率,我们的团队在小程序同构,CI,云开发等领域进行了积极尝试,并取得了良好的效果。结果。
面对频繁的业务需求,作为前端团队,我们一直在思考是否可以有更大的发展空间。云开发的出现正恰恰帮助我们扩展了前端边界。
以腾讯课堂小程序为例,介绍我们在小程序云开发中的实践。
如何实现多个小程序,多个终端共享同一个云开发环境
2018年,微信小程序和云开发ClouBase两个团队深入合作,启动了小程序云开发,为每个小程序提供了一个非常简单便捷的小程序云开发入口,从而削弱了后端和操作和维护的概念,无需构建服务器。
但是,当我们开始使用云开发时,我们遇到了一个问题:我们多次小程序需要使用相同的云开发环境,以便可以重用某些通用平台功能。但是,在小程序云开发中,每个使用内置SDK的小程序都只能调用与小程序帐户本身关联的云开发环境。在这种情况下,必须维护多组云功能代码。显然这不是我们想要的,并且内置的SDK无法满足我们的需求。此外,如果要在云中开发H5和PC终端,则必须维护另一个环境。
我们曾经考虑过通过Node进行http调用,但是通过网关节点特定的服务,自建将面临灾难容忍,运维和扩展,这再次失去了云开发的意义。
当然,我们的H5和PC也可以使用小程序帐户的云开发环境,但是仍然不能解决不同小程序之间的公共云开发环境的问题。
因此,一开始,我们尝试使用无服务器来解决此问题,即用API网关替换访问层以满足需求。但是,当我们访问API网关以使用云开发功能时,我们将其称为网关。此时,身份验证部分必须由业务本身进行身份验证,并且无法使用小程序云开发自然无身份验证的便利性。
因此,我们与云开发团队进行了深入合作,并在小程序端启动了Web SDK,从而可以实现多终端呼叫。实际上,tcb-js-sdk-mp与内置SDK一样,提供了多种身份验证方法,例如免身份验证。就像使用内置SDK一样,我们可以获得用户的openid,从而节省了开发成本。
如果您的业务有同样的问题,可以参考。
这是我们使用tcb-js-sdk-mp进行代码演示的一部分:
初始化略有不同。此处的初始化与tcb-js-sdk相同,将调用相应的api来验证登录状态。然后在这里调用该函数,因为它不直接访问内置环境,并且仍然需要域名限制以防止其被刷写。云函数调用方法已封装并初始化,后续操作与使用内置SDK没什么不同。
构建功能以通过云开发CLI工具自动化部署管理(CI)流程
当涉及到新环境时,您必须面对部署问题。
常用的云功能部署方法是通过开发人员工具进行的,但是右键单击该工具存在一些问题,例如手动选择环境,容易出错,并可能导致严重事故。在实时网络上;根据环境的不同,Intranet软件包无法在线安装,本地上载的某些软件包可能具有平台特征(Docker在特定环境依赖项的安装中挂起)。
但是这些都可以使用现有工具解决。云开发提供了用于云功能操作的CLI工具,包括登录,初始化,部署功能,触发功能等。使用此工具,我们的云功能可以与小程序项目分开开发。管理。 cli提供了灵活的配置,超时时间,环境变量,私有网络,是否要安装依赖项和其他功能。
我们依靠cloudbase-cli为云功能部署配置一组CI流程。通过以不同方式触发CI,可以将功能部署到不同的环境,从而降低了手动部署可能引起的问题的风险。在这里您可以看到,就像我们的企业希望拥有一个预发布环境一样,无需使用小程序内置的云开发环境,就可以突破两个环境的局限性。
利用云开发数据库的交易能力实现新旧活动
接下来,我将在我们的业务中分享云数据库的实际应用。
我们举办了一次大型促销活动。学生需要邀请用户参加,然后他们才能接受一些高质量的课程来促进互动的传播。 小程序需要动态消息的功能。每个用户可以邀请的用户受到限制。如果事件已过期,它将显示结束状态。单击它可以帮助事件的发起者,它无法重复发生,并且在事件结束时将无法继续提供帮助。因为此页面功能不涉及特别复杂的数据操作,所以它相对简单。我们认为此功能非常适合通过云开发实现的前端,可以节省一些后端人力。
从建立表格开始。很简单,一个表,当邀请用户参加活动,将用户添加到组中并更新动态消息时,当用户数量达到上限时,将不会添加该表。但是,这种活动通常伴随着并发操作。如何确保并发期间数据的准确性,要求我们锁定操作的数据,以防止同时操作被覆盖。
因此,您需要使用云数据库的事务处理功能。
我们还维护了一个表,用于记录邀请配额的信息,并对交易中的配额进行操作,并在交易完成时更新状态,否则交易可能会回滚。
让我们详细了解整个操作过程
一、在事件页面上,用户单击以打开事件以生成事件ID。这种生成活动ID的方法是一种生成由小程序和云开发支持的动态消息ID的方法。您可以直接将其用作活动ID。
二、同步创建对应于最大人数的人员职位,并且所有状态均为空。这样的事件被创建了
三、如果有人单击进入事件页面,请首先通过事件ID获取相应的事件数据;然后根据云开发的自然非认证特性,直接在云功能中获取用户信息,然后根据用户信息和活动数据确定是否有帮助的权限。
例如,如果这是您发起的活动,则仅显示您邀请的人数。如果过期,它将显示为过期,并且您已经帮助过,或者配额已满,等等。这是特定的业务。逻辑已建立,无需赘述,我们将提供一个禁用页面。如果是这样,请给它一个正常的页面。
当用户单击增强器时,将通过事务从相应的活动位中获取空的活动位,并更新该活动位。此时,活动位被事务锁定。此时,如果另一个用户同时修改活动位,它将直接失败,然后您可以尝试占据下一个空闲位置。
试图占领所有职位空缺的尝试失败了,据报道该团队已经满员了。
在通常情况下,您可以直接执行更新操作,并将用户字段更改为用户信息并将其标记为已占用。事务运行后,将用户信息推送到活动数据的“分组”字段中,并判断其是否已满。完成更新后,您可以结束事务,然后完成后续的动态消息更新操作。
如果在此过程中发生错误,我们都可以回滚事务以确保数据的准确性。
小程序云开发的出现为我们的前端团队提供了更广阔的发展空间,也使我们能够更快地响应运营促进需求。关于小程序云开发的应用技能,有很多值得探索的地方,欢迎大家交流和学习。