速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

小程序最佳实践,五步拆解小程序·云开发的技术生态

  • 2019-09-29
  • 本文字数:6523 字

    阅读完需:约 21 分钟

小程序最佳实践,五步拆解小程序·云开发的技术生态

随着小程序·云开发的能力在前段时间得到了进一步增强,在简化开发者操作的同时,以业务场景为入口,为开发者提供无需技术底层架构能力即可构建功能完善小程序的能力,借助云开发的能力,进一步优化了小程序开发的体验。


9 月 21 日,由云+社区(腾讯云官方开发者社区)主办的技术沙龙“小程序·云开发”北京站成功举办。现场 5 位技术专家与开发者们进行面对面交流,并深度讲解了小程序·云开发在各领域、各场景的深度实践。

小程序·云开发技术应用的架构演进

小程序·云开发,作为国内 Serverless 的最佳实践之一,云开发真正的将 Serverless 的特点发挥了出来。来自腾讯云的高级工程师利开园老师,以技术角度揭秘云开发功能的实现, 从免鉴权/实时推送/一键部署/数据互通的能力介绍云开发的设计方案。



腾讯云高级工程师利开园


在分享的一开始,利开园老师就抛出了一个问题:一般情况下,如果准备开发一款具有后端能力的小程序,我们的前期的一个准备流程是怎样的?答案是注册小程序账号-注册公有云账号-购买服务器、域名-申请 SSL 证书-登录到服务器购买软件配置-域名备案-研发阶段。


可以看到,仅仅是开发一款轻量级的小程序,前期就需要如此复杂的准备流程,感觉整个流程下来,似乎小程序的业务逻辑实现变成了最简单的事情。而且这还没完,还需要考虑到小程序的高可用、高性能、安全、数据库备份、容灾等问题。


因此作为开发者,我们有必要把精力放在更重要的事情上,就是产品功能业务逻辑的实现层面。



传统云服务模式与云开发模式的对比


在传统开发模式下,需要更多关注文件存储、备份、容灾等,但是云开发模式下就只需要关注与业务逻辑相关的数据库、文件存储、云函数。现阶段的小程序·云开发里有提供数据库、文件存储、云函数等功能,数据库类似于滴滴的,提供整体格式的存储方案,文件存储则是通用的文件对象存储,自带 CDN 网络加速能力,云函数则提供了远程代码及快速调用的能力。


在整体的架构实现逻辑上,小程序·云开发共分为云调用、数据库实时推送、增值能力以及网络互通这四个层面。

云调用

小程序生态定制,打通云函数来简化鉴权,腾讯云和微信两边有打通鉴权的功能,把鉴权的工作自动化。


过去没有云开发,想要调用微信后台的 API 来获取数据的话,需要先购买服务器,在服务器上开发微信中间件来获取 Token,用 Token 去访问微信后台。云开发可以省去上述步骤,因为云开发赋予了可以在云函数内实现上述逻辑的功能。同样,在从微信服务器内接收数据时,云开发也不需要配置服务器地址等等,而是可以直接在云开发的 ID 里面配置 App 所接收的云函数,就可以接收到微信服务器的消息。



从调取信息到接收信息,相当于整个开发的过程开发者都不需要过多关注鉴权的相关事情,只需要关注自己的业务逻辑就可以。开发者不需要去实现鉴权,是更安全的。刚才提到免鉴权的方案对开发者来说简化了很多工作。

数据库实时推送

Serverless WebSocket 长连服务,简化实时交互。


数据库实时推送能力,是小程序云开发近期新上线的一个功能,它可以优化升级诸如聊天、棋牌类游戏、订单状态同步等等很多长连接、实时交互场景下的开发体验,可以说,数据库实时推送能力对于小程序的功能完善上来说,有非常重要的意义。



数据库实时推送的多层架构


整体数据推送体系是属于分层的多层架构,这里主要解释下监听推送层的设计理念。监听推送层在设计之初主要考虑三个原则,分别为高可靠、高性能、高可用。


  • 高可靠,放在第一优先级,具备单点执行、自增 ID 方案、支持掉线 3 分钟、两级 Cache 的功能。

  • 高性能,主要分为三个方向,首先是事件的合并推送,如果网络较差的话可以将多个事件合并在一起,有效提升推送效率;其次是自动索引算法,可以将检索方案的复杂度从 O(n)提升到 O(1);最后是并发流水线,将每个步骤由不同的线程去处理,可以通过利用多合的能力,保证最终的性能可以得到指数级的提升。

  • 高可用,分为热备容灾和无损变更两方面,热备容灾可以保证虽有都有额外的节点可以进行实时处理和替换;无损变更则是可以保证服务在变更过程中不会有任何一个请求中断。

增值能力

免后台开发,一键发布云函数。


整合图像识别、音视频、短信以及其它腾讯云基础产品的能力,通过模块化一键部署至云函数,不需要后台开发,后续只需要调用这些函数即可实现功能。

网络互通

融合现有架构,减少接入云开发成本.



网络互通方案


当然,每位开发者都是独立的个体,都有不同的历史包袱以及熟悉的开发模式,因此通过网络互通的方案,将已有架构与云开发进行融合,在接入云开发时不需要抛弃原有的开发模式,并且可以实现通过云函数来访问云上的其它能力。具备支持同区/异地内网访问、使用 IPIP 协议以及不同租户网络隔离这三点能力。

基于实时数据推送能力的云开发应用实践

微信小程序内有一个重要的分支,就是小游戏。在一款小游戏的开发过程中,实时数据推送能力,对于小游戏的服务器和游戏端之间的数据交互,是非常重要的。白鹭科技高级产品经理张宇老师,现场解读了如何基于白鹭引擎开发和实时数据推送能力来更好的为小程序服务。



白鹭引擎高级产品经理张宇


实时数据推送能力

做游戏肯定要涉及到服务器与游戏客户端之间数据交互问题,交互方式一般分为短连接和长连接。



短连接与长连接


如上图所示,左侧 AJAX 轮询的方式是短连接最里常见的方式之一,是一种类似于回合制、一问一答的模式。这种模式下,服务端无法主动向游戏端推送消息,必须游戏端先发送请求后服务端才能返回消息。一般情况下,一些诸如开心农场等对于数据实时性要求不高的游戏,会采用这种短连接的方式。


另外一种是长连接,比如 WebSockets,这是 H5 里比较常用的长连接方式。通过保持游戏端与服务端处于同时的状态下,游戏端随时可以给服务断发送消息,服务端也可以随时给游戏端发送消息,可以有效保证数据的实时性。以“王者荣耀”为例,如果采用短连接的方式,在游戏过程中就会产生过高的延迟,因此对实时性要求比较高的游戏都会采用长连接的方式。



除上述两种方式之外,还有一种新的形势,就是数据实时推送能力。这种形式类似于手机上会实时收到来自于微信、QQ 等各种 App 的消息推送,工作流程都是在进入程序的时候,客户端先向服务器发送消息表明要先监听哪些数据,然后只要被监听的数据发生改变,客户端就会接收到改变后的数据,就会被推送过来。

小游戏+云能力

云能力可以很有效的改善小游戏的开发体验,首先没有服务器,就意味不需要域名备案,现在域名备案要实名认证和牌照,有时候两三个星期都走不完流程,现在利用云能力就变得简单多了;其次,不用防御 DDOS 攻击,因为没有服务器,黑客也就无从下手,当然除非把腾讯云搞挂了;


另外从开发人员配置方面来讲,因为大部分能力都被集成了,并且没有服务器也不需要后端工程师,可以减少人员成本开支;当然,也省去了前后端联调的阶段,开发者在前端直接调用云函数从服务器拿到最终的数据,缩短了开发周期。


此外,无论是游戏还是其它产品,在研发阶段都”””会分为开发环节和生产环节。往往在新功能上线时,会出现各种各样的问题。云开发则会完全避免,并且只需要修改 AppID 即可切换开发/生产环境,不需要修改游戏内的代码。

基于云开发的 AI 智能客服实践

在人工智能客服相当成熟的现在,如何巧妙利用 AI 能力赋能小程序的客服功能?即速应用后端负责人高文飞老师,现场解读了如何基于开放的 AI 能力真正实现机器客服的智能化。



即速应用后端负责人高文飞



腾讯智能对话平台 TBP


AI 智能小程序客服是基于腾讯智能对话平台 TBP 搭建的,专注于“对话即服务”,全面开放腾讯对话系统核心技术,主要是提供机器人的中间件能力,因此作为普通的开发者也能够快速使用 AI 机器人。如果只是单纯地要实现 AI 机器人的话,只需要按照上图所给出的步骤进行就可以了,之后在云开发中就可以直接调用该机器人。


但毕竟我们是开发者,更要了解其中的语义模型,分为配置词典、配置意图、配置问答三部分。


  • 意图:用户与机器人进行对话交互背后的目的,用户希望完成的事情;

  • 词典:用于意图中槽位的识别和填充,可自定义;

  • 问答:预设定好问题和答案,帮助机器人快速识别。


在 AI 智能客服需求功能方面,分为 PC 端和小程序端两个方向。PC 端包括代开通云开发、代部署云函数、TBP 设置、自动回复设置、关键词回复、数据统计等功能;小程序端则是包含云函数处理、匹配关键词、转 TBP、转人工等功能。



PC 端后台管理的实现路径


PC 端后端代码的实现,主要通过做关键词设置、自动回复、数据统计这三个层面。通过微信授权 API 触发云函数,事先设定好的云函数上传之后可以通过 API 操作数据库来进行增删改查。机器人设置主要通过腾讯云的 SDK 来操作 TBP 平台。



小程序端的实现路径


小程序端的实现主要是通过云函数来实现,客服系统就需要主要做客服入口的云函数,获取关键词、获取开场白或者获取统计的云函数,下面重点讲解客服入口这方面。



客服入口可以说是实现这个功能的核心,当用户首次进入会话时会自动回复开场白,如果收到用户消息的话再判断是否转人工。如果没有收到用户的消息去走关键词的话,会进行关键词的判断,当然需要是特殊关键词,否则会与 AI 之间有冲突。关键词回复如果否,就会就转给 AI 机器人处理,AI 机器人会理解用户的意图,来直接回答问题或者调用物流查询、服务预约等 API 来告诉用户,如果再次收到用户消息会回到判断是否转人工,这就是小程序客服的实现逻辑。

小程序·云开发在猫眼电影运营活动场景下的应用

接下来,猫眼娱乐资深工程师高英健老师,从猫眼技术团队的实践出发,为大家现场解读了,在小程序研发流程中,如何避免研发工作的重复性。



猫眼娱乐资深工程师高英健


近年来小程序越来越流行,很多公司都开发出了自己家的小程序。为了吸引更多的用户使用自己的小程序,各个公司也推出了各种各样的运营活动,比如说猫眼电影小程序的首页会有各种抽奖、拼团、秒抢、砍价、签到和照片墙活动,这些活动的流量都比较大。而且如果一个活动效果比较好的话,后续肯定是会复用的。


传统意义上如果要复用一个活动大概分为以下 4 个步骤:


  • 定义活动模板可配置项-【PM/运营+后端+前端】

  • 建表,开发活动配置项存取接口-【后端】

  • 在管理后台系统添加活动配置项-【后端+前端】

  • 小程序取活动配置项将活动模板化-【前端+后端】


这是很常规的操作,如果一线开发的话都会经历这样几个步骤。但是现在大部分的项目都是前后端分离的,这样就会出现如权责分配的问题。并且前后端联调期间也会出现环境不同、接口不同等问题,拖延项目的上线时间。因此就有必要探索一种新的解决方案。

唐图,基于腾讯小程序开发的 Serverless 解决方案


唐图 & 云 & 小程序架构图


唐图这边的 view 层,是专门提供给 PM/运营同学来进行编辑的,编辑完成之后,我们将数据会发送至 Node 端,Node 端再同小程序云进行交互,将活动配置数据存在小程序云的数据库表中。存储完这一记录之后会返回一个 ID,之后再根据 ID 和活动类型去生成小程序码或者是活动链接,方便 PM/运营同学来快速投放活动。


此外在活动入口,不管是小程序码还是链接都带有 ID 和 Type。通过入口进到小程序中,小程序会拿 ID 到小程序云数据库表中进行查找是否存在这条记录,如果查到了这条记录就可以与模板组合并生成了新的活动。也就是说一个 ID 就是一个活动的标识,这样就可以实现多个同类型活动同时在线。



唐图 & 云,核心数据交互示意图


为了减少工作量,唐图中用于生成活动配置数据的模版也是存储在云数据库中的。上图右侧的 activity-template 就是一个活动配置模板的数据表。在数据表中存储一些活动模板的配置项(并非数据),每个配置项内容为所需的各种表单属性。


这样做有什么好处呢?在把这些活动模版的配置项存起来以后,如果有新的字段需要模版化,或是有新活动需要被模版化,直接改动相应活动配置模版的 json 数据,或上传新的活动配置模版 json 文件即可,唐图可以基于这个活动配置模版动态渲染表单(不再需要改代码,上线),并提供给 PM 或运营同学去编辑生成活动配置数据(用于结合小程序模版进行渲染)得到新活动。

数据存储策略


小程序云不同环境是相互隔离的,因为小程序云可以创建两个环境,因此可以将开发环境和线上环境与小程序的开发版和线上版相互对应。如果使用之前的数据存储策略,就需要在开发环境上存储一份数据,还要到线上环境再存储一份相同的数据,非常繁琐。


因此就需要对数据存储策略进行优化调整,首先将数据存放在开发环境小程序云当中,然后用开发环境进行验证,如果这个数据没有问题,再在唐图上一键转为线上环境数据,这样就不至于线下环境的数据影响到线上环境的数据。但是需要注意的一点是存储和数据库都是有权限控制的配置,比如说存储里面,如果要上传一张图,如果权限为私有,URL 是临时的,就需要在小程序端通过 file ID 去获取当前的 URL。由于唐图存储的内容均为配置数据,所以我们将这些数据设为公开权限,URL 是不过期的,可以直接存储生成的 URL 在小程序使用。

Workshop:快速构建一款 SCRM 小程序

随着微信小程序不断发展壮大,传统的 CRM 厂商也在不断向微信上迁移,毕竟微信的背后是巨大的用户和流量。用微信小程序来做 CRM,和以前的做法究竟有哪些不同?腾讯云 TVP 大漠穷秋老师,于现场带领大家从零开始,动手实践了一款 SCRM 小程序的构建全流程。



腾讯云 TVP 大漠穷秋


小程序作为经典的 serverless 的实现,只要开发好前端的代码,云端做了大量的简化,开发了云函数,开发了云数据端的接口,这样运维和部署都由自动化的工具完成,我们就借助于腾讯云强大的功能帮我们节省了大量的时间,节省了大量的钱,这就是它的本质。


什么是 CRM?实际上就是客户关系维护系统,电商、金融、餐饮、教育、电信、医疗,所有巨头大型企业都有 CRM 系统。那为什么已经有了很好的桌面 CRM 系统,还要做一款小程序的 CRM 呢?原因有以下三点:


  • 首先,微信背后是巨大的用户量,现在微信背后已经有 11 个亿的用户,月活数量非常恐怖,有几个亿的月活。

  • 其次,微信上有非常完善的营销渠道,很多人在利用朋友圈、公众号、小程序来进行裂变式的营销,这是巨大的优势,是传统的平台不具备的。

  • 第三,微信背后有微信支付,在国内移动支付的领域支付宝和微信是两个最大的巨头。我们用微信做小程序,在支付这层面会更加的通常,没有任何障碍。


并且,不只是那些大企业需要用 CRM,零售店等一下个体经营的企业也需要 CRM 系统来维护自己的客户。

SCRM 与 CRM 的区别

在小程序上,肯定不能把传统的 CRM 功能都搬过来,所以功能实现上肯定是有差异的;并且 SCRM 实际上更加侧重于利用微信社交的功能来进行客户关系的建立和维持;第三,SCRM 更加侧重使用微信支付的功能。


市面上也有类似的产品,比如企业微信和钉钉,他们都有类似的 SCRM 系统,当然,如果能够在微信端使用,则会更加轻便,传播性更好,与用户也更加贴近。



最后效果界面


随着小程序应用领域的进一步下沉,小程序的实践也变得越来越广泛,我们有理由相信,功能越来越强大的小程序·云开发体系,将会更加丰富小程序的体验与生态。

关于云+社区

云+社区是腾讯云官方开发者社区,是腾讯云开发者生态的重要组成部分,通过提供技术专栏、技术问答、技术沙龙、行业快讯、开发者手册等服务,为开发者打造一个专业的技术分享型社区、营造云计算技术生态圈。


云+社区技术沙龙是“云+社区”策划主办的线下技术沙龙活动,希望通过分享技术让更多开发者学习和交流,成为腾讯云连接开发者的平台,共同打造技术影响力。


2019-09-29 11:122854
用户头像
佘磊 策划编辑

发布了 50 篇内容, 共 21.5 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

朱嘉明:全球科技革命正在逼近“奇点”,区块链影响未来人类社会的走向

CECBC

人工智能 科技 科技革命

不要以为Bug写的好就是好程序员,其实这只占不到15%

小Q

Java 学习 程序员 架构 面试

面试必问亿级流量优化策略之JVM调优,文档视频面试,还不收藏

小Q

Java 程序员 架构 JVM jvm调优

一文解开java中字符串编码的小秘密

程序那些事

java安全编码 java编码指南 UTF编码

藏在Java数组的背后,你可能忽略的知识点

Java架构师迁哥

这篇文章,把中国科技的真实底子讲透了

CECBC

中国 科技 产业竞争

架构师训练营第十四周

Melo

基于Goc的Golang代码VSCode实时染色方案

大卡尔

测试覆盖率 精准测试 Go 语言

区块链技术发展的十大趋势

CECBC

区块链 金融 安全问题

央行数研所推出贸易金融区块链平台

CECBC

区块链 金融

JavaScript引擎的事件循环机制是怎样工作的?

Walker

Java 大前端 运行时栈帧 事件循环

甲方日常 13

句子

工作 随笔杂谈 日常

.NET委托,事件和Lambda表达式

AI代笔

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(n), 出队 - O(1),JavaScript,详细注释

Lee Chen

大前端

澳门金沙玩赢了钱提现不了异常注单未更新有什么办法处理?

丛林里的余光

异常检测 澳门金沙 提现不了

宅家三个月玩转算法,再战字节跳动,字节跳动面试官朝我比了个“ok”

编程 字节跳动 面试 算法

记一种spring框架的想当然但错误的用法

小明同学

源码分析 最佳实践 Spring Framework bug

Dubbo-go应用维度注册模型

apache/dubbo-go

dubbo dubbo-go dubbogo

从新浪数字化转型,窥见互联网的“懂行”新十年

脑极体

大数据任务调度 - 有向无环图(DAG)之拓扑排序

代立冬

大数据 数据结构 DAG 拓扑排序 Apache DolphinScheduler

从外卖员到拼多多30K+程序员,我付出了三年的青春

小Q

Java 学习 程序员 架构 面试

[翻译]Scalable Go Scheduler Design Doc[Go可扩展调度设计文档]

卓丁

golang scheduler Go scheduler Go 语言

阿里培训官给新入职程序员的25条建议

Java架构师迁哥

区块链赋能市场监管 浙江上线“黑科技”清除取证固证难题

CECBC

区块链 市场监管 取证难题

一点 Go Web 编程实践经验

Garfield

Go web Go 语言

TOGAF认证课由2天变化为5天的思考

周金根

企业架构 TOGAF

oeasy教您玩转linux 010211 牛说 cowsay

o

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(1),出队 - 摊还复杂度 O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!

冰河

多线程 高并发 秒杀 电商超卖 签约计划第二季

架构师课作业 - 第十三周

Tulane

业务架构学习内容有哪些?

周金根

BIZBOK 业务架构

小程序最佳实践,五步拆解小程序·云开发的技术生态_语言 & 开发_佘磊_InfoQ精选文章