8

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

 3 years ago
source link: https://segmentfault.com/a/1190000040510981
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

腾讯广告(ad.qq.com)是一站式广告投放平台,坐拥腾讯生态流量,拥有丰富统一的投放能力,广告主在该平台上可以进行微信、QQ、腾讯联盟、应用宝、手机QQ浏览器等渠道的广告投放。

本文讲介绍腾讯广告如何结合云原生一体化开发平台~云开发 CloudBase,发布了“腾讯广告助手”小程序端,实现降低广告主盯盘成本、提高广告优化效率的目标。

一、项目背景

为了降低广告主盯盘成本、提高广告优化效率,腾讯广告基于这一痛点,在云开发 CloudBase 能力的帮助下,发布了“腾讯广告助手”小程序端,提供多账户登录与切换功能、直观的数据报表、轻量化的操作和及时的新消息提醒,为广告主、服务商打造整合式的移动端优化管理解决方案,帮助广告主实现更高效便捷的广告管理。

二、架构设计

1、业务架构设计

“腾讯广告助手作为一款腾讯广告投放平台的工具,希望为广告主提供在移动设备上管理广告的能力。所以在小程序端里面,我们为广告主提供了 PC 端上的基础能力及高频使用的功能,业务功能设计如下:

2、技术架构设计

腾讯广告投放服务主要是通过开放平台的MKT API (对外) 和 GDT API (对内) 提供服务,在小程序端引入 CloudBase 的云函数作为 BFF (Backend For Frontend) 层,调用层级如下图所示:

整体上来说,BFF 是一层设计来满足在特定客户端场景的API,它能够将多个后端微服务通过聚合、裁剪和编排等方式将处理后的数据提供给客户端使用,至于产品业务的功能、数据模型等则应该收敛在后台 API 实现,不落地在 BFF 中。

在项目立项前,团队就对多种小程序开发框架进行了对比,从性能、开发效率和稳定性等方面比较后,最终采用了原生开发框架配合云开发服务,理由如下:

  • 对于小程序端有较强的性能要求,无论是第三方框架的编译还是运行时方案,在健壮性和性能上,原生的小程序开发模式都相对更适合;
  • 我们的小程序端无需支持多个不同小程序端,而且也没有历史代码迁移包袱,使用原生开发与第三方框架开发成本差别不大;
  • 对于原生开发与使用框架在开发体验上的差异,如小程序不支持 less 等,后续采用前端工程化手段解决。

目前使用到的技术栈如下所示:

三、云开发 CloudBase 的应用及实践

1、聚合接口

在小程序开发初期,对是在小程序前端直接调用中台服务,随之而来遇到了些问题,例如对于某些页面或功能,需要调用多个接口获得数据后,再拼接成最终需要的数据。这个逻辑如果是在前端来做的话,那么就加大了整个请求的调用链路,是多个客户端到服务端的请求,如果有一个数据请求慢了或失败了,那么都会影响到最终的数据,比较影响用户体验。而如果放到 BFF 层上来做,那么则变成是1个客户端到服务端的请求和多个服务端到服务端的请求,调用链路相比小程序前端请求要短许多,而且稳定性更好。

在”腾讯广告助手“小程序上展示的报表数据会包含汇总、环比、同比等数据,那么就需要组合调用不同的中台接口才能获取到最终的数据。所以,团队将小程序上的报表相关的接口切换到直接调用云函数,由云函数并发调用中台服务接口并将数据做聚合返回到小程序端。同时对返回的数据按照小程序端所需要的按需返回。比如对于账户列表页面的请求,原先前端需要并发进行3个请求才能获取到最终的数据,而通过云函数,则小程序端只需调用一个接口

拉取报表数据的云函数运行数据聚合后云函数接口请求耗时数据

2、提升云函数的开发体验

目前 CloudBase 上官方是推荐以层来管理公共依赖库和代码问题,但是从开发的角度来看,还是希望能够做到源码本地依赖,减少引入更多的概念及操作成本。

抽离公共代码通常需要将代码上移到公共目录或者发布成 npm 包,而在小程序的云函数中,每个云函数就是一个独立的目录,没有公共目录。而如果采用 npm 包的方式,那么调试,发布和更新版本号等操作上的成本就比较大了。

于是我们将公共代码抽离到项目内单独的目录中,同时在开发和代码构建时,通过构建工具实时同步公共代码到每个云函数的目录中。

同时,团队在项目内基于 cloudbase-manager-node sdk 实现了云函数本地的模板创建、代码及配置更新、查询状态等,提升开发体验。

查看云函数状态:

npm run cf:list

实时更新代码并部署到指定的环境:

npm run cf:watch -- --func=getUserInfo,mktapi --env:preview

3、多环境部署及蓝绿发布方案

”腾讯广告助手“的云开发环境目前有5个,分别对应主环境、备环境、测试环境、研发环境和预发布环境,在开发的时候可以通过命令行指定代码编译时连接是哪个环境,比如:

npm run dev -- --cloudEnv=development

那么我们的小程序就会连接到云开发的开发环境,同时在小程序页面的悬浮球上也会显示连接对应的环境。

对于云函数的发布,采用的是蓝绿发布策略。主环境和备环境同时在外网可用,每当发布的时候,就会将流量从一边逐渐切换到另外一边,若没有问题再逐步全量,大致流程如下图所示:

这里的流量切换逻辑,可以通过小程序发布时的按微信号灰度策略来控制,同时也可以通过在小程序上使用特性开关来控制。

四、项目总结及成果

1、影响力

”腾讯广告助手“小程序自2020年5月底上线以来,使用人数不断攀升。

同时从下图中可以看到,小程序端很好的弥补了上班高峰时段及下班后广告主不在电脑旁边的场景。有了小程序端,广告主可以随时管理广告。

2、使用云开发 CloudBase 的收益

借助云开发能力,”腾讯广告助手“小程序项目获得了许多收益,包括:

  • 云函数提供了私有的传输协议,为数据传输提供了保障;
  • 提升了整体的开发效率,能够在人力成本有限的场景下完成需求的开发;
  • 通过集成 cloudbase-node-sdk 实现了一键部署,同时也免去了运维成本,无需考虑负载问题;
  • 云开发方式给联调带来了极大的便利性,无需再去配置代理;
  • 云开发提供了完整的生态及强大的监控体系。

云开发(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】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK