社区/文章分享/企业案例丨腾讯手游助手 X 云开发CloudBase

企业案例丨腾讯手游助手 X 云开发CloudBase

导语

腾讯手游助手是腾讯推出的新一代安卓模拟器,在性能、稳定性、兼容性等方面表现优异,帮助用户在电脑上畅玩各类手游的全能型手游平台,用户可以通过手游助手快速体验最新最热的手机游戏,感受大屏显示、键鼠畅快操作的劲爽体验。

本次案例中,腾讯手游助手结合云原生一体化开发平台——云开发 CloudBase 打造了与业务配套的自定义插件,突破了业务场景中遇到的瓶颈,有效提升开发部署效率。

一、业务背景

腾讯手游助手在市场端、运营活动页都大量应用到诸如数据组装、活动玩法拼接等基于 FaaS 的逻辑流程可视化平台(下文统称“FaaS 平台”)。此前,业务使用此类能力,存在着一些痛点:在开发层面上,有服务不稳定、配置复杂、开发上手难、无法脱离平台复用等问题;在人力层面上,每次使用服务,都需要服务端的人力来帮忙应对服务的稳定和排查的问题,在运营活动节奏愈发紧凑的趋势下,大量人力耗费在重复工作上是难以接受的。

基于以上问题,我们希望通过 Serverless 的能力去重构我们的 FaaS 服务,将服务的伸缩运维交给平台,解放后端 FaaS 服务的日常维护压力,同时扩展 FaaS 平台提供的 API 复用能力,降低其开发及配置复杂度,进而实现释放人力的需求。

而云开发 CloudBase 是腾讯云提供的云原生一体化开发环境和工具平台,其为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 Serverless 化能力。结合业务背景,我们期望在基于云开发提供的能力上,实现提供给开发人员,更加便捷的开发、部署服务的业务能力。

二、云开发 CloudBase 在业务中的实践

新组卡服务数据源处理

组卡服务是 营销系统 中,将规格化的客户端组件(比如 nutty 组件,以及未来的小程序组件,客户端 native 组件等),与规格化的数据源(后台业务接口的数据格式要标准化),进行数据内联的系统。

组卡应用场景

介于腾讯手游助手有动态排版的需求,组卡方案在其中的应用场景有比较广泛的需求,比如:国外国内官网、国外国内市场。组卡的应用可以达到一套代码可以解决多个运营场景的效果,极大的降低了手游助手的开发成本。效果如图:

组卡服务中很重要的一个工作流是数据处理,数据处理函数之前是通过 eval 的方式执行,使用 eval 在多种不可控数据源的场景下难免会存在安全问题,且数据处理函数可由模板或者开发通过自定义规则去生成,不规范的使用方式容易造成内存泄漏,在转换服务被大量使用的情况下,整体服务的稳定性必然受到挑战。

因此我们将数据处理的函数放到云函数中处理,将组卡的运行环境与数据处理服务隔绝,提高组卡服务的稳定性及安全性,并且通过云函数的能力,未来我们也能支持多种语言来进行数据处理。

三、基于 CloudBase 的开发插件:

vega-cloudbase-framework-plugin

在使用 CloudBase 提供的云函数服务过程中,我们也遇到不少开发上的痛点:

  1. 多个函数的通用逻辑无法复用;
  2. 私有源依赖无法在远端下载,只能依赖层能力解决问题;
  3. 层发布只能手工上传压缩包,无法通过在部署过程中自动上传;
  4. 函数无法自定绑定层,需要在云开发控制台,手动操作;
  5. 函数只能在本地发布,发布流程不符合公司规范。

如何解决?

在寻找解决办法的时候,发现云开发推出的前后端一体化部署工具 CloudBase Framework 支持插件机制,可以处理应用中的一些独立单元的构建、部署、开发、调试等流程。因此,我们采用了自定义插件配合流水线的方案解决上述痛点。

结合 CloudBase 设计的插件,为业务提供了以下能力:

  1. 插件提供公共逻辑的目录进行公用逻辑抽象存放,与用户约定好调用公用逻辑的调用方式;
  2. 提供将项目根目录下的多个函数通用依赖,发布到层,并与函数绑定的能力;
  3. 提供下载层依赖时选择源的能力以及函数依赖发布到层并与函数绑定的能力,解决了依赖过大无法上传函数、私有源的依赖无法在远端下载的问题;
  4. 提供函数编译的生命周期,给用户在编译环节时,执行定制化逻辑的能力;
  5. 提供根据环境变量 VEGA_ENV 的值选择配置发布的能力,提供了同一项目可以通过命令行部署不同函数的能力;
  6. 完全继承 framework-plugin-node 插件的能力,原有 tcb 业务可以快速迁移至本插件使用。

四、插件设计

插件由:配置层、协议层、调度层、部署层组成。

协议层

这里的设计遵循了约定优于配置的原则,协议层中的协议指的是基于一定的约定,根据功能差异将代码放到不同的目录下管理。协议层则是实现这一套约定,并对相关约定进行抽象。

开发者使用插件时,插件提供了默认的协议,新手开发者无需理解过多的开发配置项,只需要按照约定,编写代码即可。同时,协议层需对约定进行抽象,提供了一定的配置能力,这使得开发者不仅仅可以基于约定开发,也可以修改约定抽象后的配置项,进行自定义配置,使之更加适配业务场景,或者更加兼容。

这样使得插件不仅遵循约定优于配置的原则,也保证插件的扩展性。

配置层

配置层分为三部分:

  1. 只处理针对 API 逻辑的配置参数,定义和读取能力,这里可以映射到任意配置管理平台;
  2. 针对默认协议的定制化配置;
  3. 针对云函数发布的能力配置。

调度层

调度层是是整个插件最核心的部分,主要职责为:

  1. 处理服务初始化、服务异常、服务运行时的逻辑处理;
  2. 默认协议和开发者配置的 merge;
  3. 处理 merge 后的协议的串联逻辑,并提供服务的生命周期钩子。

部署层

负责处理函数的部署,根据用户配置,创建云函数以及触发器,并部署到开发者配置的云开发环境下。

五、未来规划

  1. 组卡服务通过云函数的能力,支持多种开发语言编写数据处理脚本;

  2. 基于云函数,实现一个逻辑可复用的,面向函数的,流程可视化的 API 自定义工具,架构设计如下:

云开发 CloudBase 为项目带来的收益:

  1. 业务可以快速开发部署上线:云原生架构大幅降低了开发门槛,降低了开发成本,有效缩短了项目周期;
  2. 没有运维压力:运维直接交给云开发团队,业务侧只需要关心业务逻辑,省心省事;
  3. 开发更加灵活,复用性更好:借助云开发提供的 CloudBase Framework、CLI 等工具,实现高效开发、一键部署,灵活方便。

产品介绍

云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等 serverless 化能力,可用于云端一体化开发多种端应用(小程序,公众号,Web 应用,Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
开通云开发:https://console.cloud.tencent.com/tcb?tdl_anchor=techsite
产品文档:https://cloud.tencent.com/product/tcb?from=12763
技术文档:https://cloudbase.net?from=10004
技术交流群、最新资讯关注微信公众号【腾讯云开发 CloudBase】