当小程序遇上 Serverless 云开发,会碰撞出什么样的火花?云开发能为开发者带来哪些体验提升,它能够为开发者们带来哪些发展机会?本文是王利华老师在「腾讯云开发者社区沙龙online」的分享整理,为大家揭开小程序·云开发的神秘面纱。
一、疫情期间,小程序极速助力“抗疫”
云开发(CloudBase)是一款云端一体化的产品方案 ,采用 serverless 架构,免环境搭建等运维事务 ,支持一云多端,助力快速构建小程序、Web应用和APP。
腾讯在助力抗疫时期发起了“战疫开发者公益联盟活动”,当时只有一位前端同学要紧急上线,使用云开发仅用四个小时就完成了前后端,包括数据库、语音数据报表能力,可见小程序·云开发效率还是非常高的。
为抗击疫情,自2月1日至5月1日,云开发向企业、政府、媒体及其他组织小程序用户提供了10000份免费旗舰版使用名额,大家感兴趣也可以去申领体验。
另外疫情期间腾讯还组织了黑客马拉松,评选出了许多优秀的产品。比如在疫情期间新闻专题的小程序,复工和返校排查方面的小程序,留守宠物互助平台,交通行程查询相关的小程序,小区疫情监控的小程序等等。
这次疫情爆发凸显出小程序的优势:
第一就是小程序能够快速而又广泛的触达到用户。
第二就是云开发带来的优势了,云开发是弹性的资源,比如有一些疫情的小程序,投放出去突然每天就有几千人访问,如果是在以前购买资源的情况下,弹性扩充是不足的。所以开发者使用云开发的产品能够积极有效完成抗疫。
二、云开发产品概述及优势
首先引入一个小的问题:Serverless到底是什么?业界现在关于Serverless的讨论特别多,有的说是无服务端,有认为是纯前端,还有人认为Serverless是云函数、FaaS,或是BaaS服务端级服务,众说纷纭......
我认为Serverless是 FaaS BaaS Devopsless 这三者的组合,也即提供云函数服务和后端级服务加Dopsless,让开发者专注于业务和应用开发。
我们基于这个想法,在Serverless这个理念上进行实践,开发了一款云开发(Tencent Cloud Base,TCB)这款产品。
整个Serverless云开发产品,最底层的基础产品,包括云函数、数据库、云存储和CDN,这些就是所有应用基本都会用到的基础产品。
在基础产品上我们进行了基础服务的封装。比如常用的用户管理,数据管理,日志统计,监控告警等等。
在这些基础产品和基础服务上,我们提供了一些高级能力,比如静态网站的托管,有其他扩展能力,如智能图像,实时音视频的方案。我们同时给开发者提供一整套开发的工具。比如命令行开发者工具CLI、可视化的UI控制台。
我们还面向不同开发者提供各种不同的SDK,很多人认为小程序云开发很可能只是面向小程序,其实不是这样的,我们现在还有其他的解决方案。比如面向Web开发者,只要使用我们JavaScript SDK,就可以使用云函数、云存储;面向移动开发者,可以使用我们的Flutter SDK;面向服务端开发,可以调用我们的Node.js SDK......
我们的SDK非常丰富,上面应用支撑小程序/微信应用开发、Web开发,移动APP开发,以及loT应用的开发。如果开发者不想使用各端SDK,也可以采用以前的方式,比如说调用HTTP都是支持的。
云开发有以下四大核心优势:
第一:开箱即用。我们尽可能将众多配置、域名给大家做好封装,减少工作量。
第二:弹性扩容。云开发能做到秒级扩容,降低运维成本。
第三:安全稳定。我们通过了多项信息安全体系认证。
第四:多端场景。我们提供有丰富的SDK,多端统一管理。
对于开箱即用,以前开发一个服务端,需要用到很多服务端的经验和知识,如负载均衡,冷备、热备等等,对于应用开发者和前端开发者来说是比较复杂的。
云开发理念就是把所有复杂的逻辑和配置都封装好,然后给开发者使用,屏蔽一切复杂,把简单留给开发者。所以我们认为,只要学习云开发的相关知识,一个星期基本上就能大体掌握,做到三个小时上线一款小应用,开发出相当于有三年应用经验的产品。
这是完全可能的,因为云开发已经把所有的配置都封装好了,开箱即用。相当于一个应用开发者只要学习一个星期,就可以掌握三年的服务端经验,只不过这个经验是封装好交给你的一个服务。
另外我们把小程序背后的一些服务封装成了云接口,云调用。比如要上传一张图片,不需要再写服务端代码,也不需要关心图片要放在对象存储上面,只需要调用SDK,一行代码就可以上传了。云开发开放150个免鉴权接口,只要一行代码可以轻松搞定。
对于弹性扩容,以前我们需要做预算,比如订单服务需要分配多少台机器,支付服务需要多少台机器等。你估算少一点是为公司节省资源,也是开发工程师的优秀素养。但是很可能遇到峰值会扛不住,要担责任,但是多了又怕浪费。如果使用云开发,就不需要担心这些问题了,可以做到 0 到 1 再到 N 的秒级扩容。
从降本提效的角度上,以前的前端研发需要跟后端、数据库、运维很多地方打交道,但是现在使用云开发,会有1:4的效率提升。
目前有50万的企业客户和开发者选用小程序云开发。包括深圳地铁、深圳机场都是使用很深入的一些客户。
三、云开发使用流程
接下来重点介绍一下云开发的使用流程。
首先要注册一个腾讯云的帐号,再新建一个云开发的环境,然后选择登录授权的方式,比如可以匿名调用,也可以选择微信公众号的开发授权,接着选择对应的SDK,比如面向Web开发选用JavaScript SDK,这样就可以直接使用JavaScript SDK调用数据库、资源存储,来应用开发和上线,最后是服务监控和日志服务。
你可以选择自己最熟悉的方式专注于业务开发就可以了,所有的跟服务端、运维相关的我们都封装好了。
目前我们支持的基础产品,主要是数据库、存储和云函数。目前我们支持的数据库是文档数据库—NoSQL数据库。支持的数据类型有符串、数字、对象、数组、布尔值,地理位置点、时间还有null。
文档数据库的调用方式也有很多种,比如客户端可以用SDK调用我们的数据库和云函数,在服务端云函数里面调用数据库也是可以的,因为我们已经在逻辑层面上做好了封装了。
如下图所示右边这块代码,前端引用JavaScript SDK,初始化环境,把环境ID填进去,获取数据库的引用,再获取文档的集合,然后向里面添加数据类型。比如添加一个List的对象到数据库里面,这一段代码实际上跑在客户端了。
存储也是核心功能,比如有很多文件、视频需要存储,对此我们提供云存储能力。云存储能力可以提供给小程序调用,也可以提供给Web端调用。进行文件管理我们提供有三个平台,如果是在小程序云开发里面,可以在微信的IDE里面进行管理。如果是开发Web应用或移动应用可以到腾讯云的控制台进行文件管理。
云函数的业务逻辑也比较简单,比如在Web开发中,引入JavaScript SDK,使用callFunction的方式就可以调用云函数。
四、代码演示:云相册应用
下面介绍使用小程序云开发出的一款云相册应用,代码托管在GitHup和Gitee,大家可以扫码体验一下。
首页是九宫格形式的图片分类,点击可以浏览图片列表,然后还有图片的上传和预览,包括删除功能。
如果要上传一张图片,可以直接引用我们微信小程序端的SDK,再上传数据就可以了,当然也可以在客户端直接上传图片到我们的存储上面,通过我们提供的云函数来调用方法上传图片到云存储。
我们也提供数据库和存储级别的安全设置。如果不希望公开上传的图片,可以设置成私密相册,仅供创建者读写。数据库也是如此,能自己权限设置,我们有安全规则,可以通过微信IDE做控制。
总体而言,整个小程序云开发包含了所有服务端能力,仅需要学习一周,基本上就能等效于一名中高级服务端工程师开发出来的应用质量。因为我们把所有复杂逻辑都封装留给了自己,把简单留给开发者。
五、云开发带来的机会
接下来聊聊云开发会给开发者带来哪些机会?
第一,新一轮的研发模式会升级。以前需要大量服务端、运维的同学,到了DevOps时期会将运维工作量降低,到现在我们的云开发把服务端工作量再降一个层次,未来研发模式会有新的形象,需要根据公司的架构升级做一些工具应用。对于开发者来说,这是一个机会,做业务的同学开始有时间来思考整个架构的革新。
第二,我们提出云开发的理念,我们认为Serverless能让应用开发者变成云开发者,所以未来前端和应用的同学会有一定机会掌舵业务。
为什么这样说呢?大家现在看到的CTO大部分都是做服务端出身的,算法和前端出身的会很少。现在云开发把服务端成本和复杂封装了,让大家得以专注于业务开发上,所以云开发者就可以有更多机会变为业务负责人。
第三,云开发是一门普惠的技术,尤其目前有一些免费的额度放出,它能够降低创业成本,提升时间效率。所以对于创新创业来说,是极好的机会。
六、Q&A
Q:Serverless云开发如何解决网站域名备案的问题?
A:我们直接生成一个默认的域名。
Q:云开发有免费额度吗?
A:无论是到腾讯云官网控制台创建,还是在小程序云开里创建,都有免费的额度。
Q:云开发数据库结构怎么固定?
A:我理解为字段怎么固定,比如定义一个前端的对象,这个对象传入数据时就有数据,没有传入数据就是空数据,这样固定格式就可以了。
Q:云开发和Serverless有什么关系?
A:Serverless实际上是一个技术理念。目前来看无论是各大厂商的云函数,比如说腾讯云的SCF,还是其他的厂商的云函数,都是对于Serverless的一个云实践。但是我认为Serverless是云函数加BaaS加DevOps三者的集合。云开发是产品的实践,把BaaS、DevOps整体的技术进行封装,开发者使用SDK就可以使用各种服务了,基本不用管服务端和运维。目前很多厂商提出具有Serverless能力,但其实它只做到了云函数,而云开发基本上是把后面三块都包括进来了。
Q:在小程序里图片下载很费CDN流量,但是相册希望图片是高清原图怎么办?
A:这块我们也在做,接下来会有针对图像的扩展能力,如果是在预览环节就会对图片做裁剪,大家看到的图片都是缩略图,如果想看原图就再下拉,大家可以期待一下我们后期的扩展能力。
Q:云开发调试有什么好的方案吗?
A:方案有很多种,比如可以在云端调试,可以在云函数调试,同样可以在CLI里做调试。
Q:云开发是有固定的IDE吗?
A:云开发包含了Web、移动APP、小程序的开发,目前小程序云开发提供有微信开发IDE和CLI命令行工具,大家可以通过云开发平台下载使用。
Q:QQ小程序如何使用云开发?
A:目前在灰度中。很多能力慢慢就可以看到了。
Q:云开发有静态托管吗?
A:有的。
Q:现有的业务想转移到云开发操作流程应该怎么样?
A:先把业务逻辑搬到云函数,比如说数据库之类,通过写一个转移工具基本可以实现。如果是新业务,直接可以使用云开发进行开发。后续我们也会推出相关资料,介绍如何把旧业务转移到云开发,毕竟云开发能够大幅提升效率。
Q:云函数的可以实时部署和上线吗?
A:可以,云函数部署可以通过IDE部署,也可以通过官网上的控制台进行部署,此外还能通过命令行工具实时部署云函数。
Q:云开发用什么数据库?
A:目前是自研文档型数据库,基本上可以类比NoSQL的数据库。建议大家从我们的产品体验云开发的能力。
Q:请问Koa可以搭配云开发Web应用吗?
A:这个后期会开放出来,目前支持直接部署Node应用和云函数。我们的Web现在已经在灰度中了,大家可以使用。但是我们还有很多东西在后面准备,会有越来越多的一些文章、资料、文档体现出来,这个大家后面可以看到了。
Q:是不是用了云开发做出来的东西版权是腾讯的?
A:当然不是,你用云开发的资源开发出来的小程序或者应用还是属于自己的。
Q:Node版本是不是指定?
A:云函数的Node版本是可以指定的,但是我们建议还是高级一点,我们后面也会推出更高级的Node环境。
Q:开发一个微信小程序的成本是多少?
A:这个问题不好回答,具体跟你的应用业务相关。但是如果使用了云开发,你的服务端成本会直线下降,我们通过经验值估算通常会有1:4的效率提升。
Q:云开发现在是怎么计费,都有哪一些价格?
A:首先每个同学都可以申请一个免费的额度使用,大家可以进入官网了解更多详情。
Q:云开发的安全性如何?应对ddos这类攻击有什么优势吗?
A:首先你使用云开发,比如在微信小程序里面,每一次的请求都是带鉴权的,有登录态的,这就是一个很好的天然防护。然后我们可以使用云函数做一些OpenID校验,这都是代码级的,基本上可以防住很多非法的请求。
讲师简介
王利华,腾讯 P3.3 产品经理,负责腾讯云云开发基础产品建设。曾在淘宝、达摩院带领过工程技术团队,出版著作《React Native 入门与实战》。目前关注 Serverless 相关云计算产品。
关注腾讯云开发者社区公众号,回复“在线沙龙”,即可获取老师演讲PPT。