小程序·云开发:解决开发者后台开发痛点的实战案例分享

2024-06-14
来源:网络整理

圣诞节快乐

2014年加入腾讯,做过QQ,也做过腾讯文档等小程序,现在主要负责小程序云端开发。

今天的分享希望解决开发者们的困惑,比如小程序后台开发有哪些痛点?什么是无服务器开发?还有小程序云开发解决方案和具体的实践案例。

小程序本身提供的开发能力主要集中在前端,这点让我很佩服微信团队。因为他们的组件、插件,很大程度上方便了我们开发者在前端的开放性,但后端的开发流程还是一如既往的混乱。

小程序开发

为什么这么麻烦?主要有三个原因。

第一点很让人头疼。

现在创业基本都要上云,除了业务逻辑,还要提供一个高性能、高并发、高扩展性的服务,需要理解很多概念,对于普通人或者一个新开发者来说,开发一个稳定性高、性能好的后端服务是比较困难的。

第二点是痛苦。

购买云服务,我们要投入大量的机器成本,早些年甚至要买一些物理机。如果在物理机时代开发一个小程序,需要买一台机器,请一个同事维护物理机硬件,请一个同事维护网络,请一个数据库专员,前后端各请五个人。这样才能从前端到后端开发出一个完整的小程序。随着我们腾讯云服务商不断发展,生态发生变化,我们已经进入了云主机时代,硬件运维可能已经不需要了,一个运维人员就可以搞定系统和网络。

下一个时代,我们进一步抽象一些业务逻辑,进入PAAS时代,甚至不需要维护数据库,只需要一个运维、一个后端、一个小程序工程师就可以完成开发流程。但是现在的人员和机器配置要几十万元,对于创业公司来说还是太贵了。

第三点是肾痛。

我们开发是个苦差事,特别提倡前后端分离。虽然前后端分离是专人专做,分工明确,本以为很和谐,但在实际开发过程中,比如中间出了问题谁来负责?有时候前端工作量完成了,后端却没做完,导致项目时间分配不协调。这些琐碎的事情引发的争吵不休,可能会导致开发效率低下。

那么有没有一种新的开发模式,让我们的开发人员能够更加专注于自己的业务逻辑呢?是的,我们觉得 开发模式就非常适合。

无服务器开发

什么是无服务器开发?

我来解释一下, 开发相当于把云上的资源打包起来,我们希望开发者可以尽量少关注基础设施建设和运维,更多的专注于编写我们的业务逻辑。

一般来说,以前我们前后端之间是通过 URL 发送请求来进行通信的。现在我们直接提供给大家一个封装好的 SDK,不管是内置的还是外部引入的,你都可以通过 SDK 直接操作云资源。这个模式是未来的趋势,今天已经到来了。以前我们有物理机,随着云服务商的发展,我们推出了 PAAS、IAAS 服务,基于 IAAS、PAAS 服务,让我们的开发者可以更方便的进行无服务化开发,这是我们的趋势。

无服务器开发的优势也很明显:

第一是我们可以更加专注于业务逻辑的开发,因为我们帮开发者做了很多事情,他们不用去操心一些高并发,高扩展,高可用的配置,只需要专注于业务逻辑就可以了。

第二,更加节省人力和金钱。对于一些小程序来说,无服务器开发的后端功能往往只需要一个工程师就可以开发完成。为什么只能一个人做呢?传统的开发模式需要很多的储备知识才能把一些服务做得足够好,但是因为我们无服务器开发已经帮我们做好了备份、灾备、负载等基本的后端和运维服务,作为前端工程师可以做一些以前不敢做的事情,比如数据库的读写,这些现在可以承包了。

小程序云开发是腾讯云和微信在无服务器开发领域给出的答案。

三大核心能力

目前小程序云开发提供三大能力:云函数、云数据库、云存储。

数据库和存储比较容易理解,它们存储数据,以及我们的一些静态资源文件,比如图片,音频,视频等。

云函数说起来有点抽象,就是一个代码执行能力,以前我们自己的服务都是跑在云服务器上,现在没有服务器这个概念,我们把应用拆成函数,然后交给云开发去跑逻辑。

小程序云开发的优势

目前我们主要有五大优势:

首先,小程序云开发是原生服务,整个小程序前后端开发在小程序开发者工具中形成闭环,左上角有云开发控制入口,点击即可一键创建云开发资源,无需任何额外操作。

第二,可以快速开发。我们提供官方的SDK,包括前端和后端。前端也就是小程序,已经内置了SDK。

第三点就是高效的认证,这个认证后面我会详细解释,其实相当于在整个网络请求路径中都携带着认证信息。

第四点是稳定可靠,这些都是腾讯云经过长时间验证,比较稳定的资源项目,比如数据库、存储等。

第五,降低成本,一个工程师就可以承担小程序开发服务。

云功能

这里我将详细讲解 的功能和特点。

我们不需要搭建服务器,只需要在开发工具里一键上传我们写好的函数,然后通过官方的SDK去调用就可以了。我们的私有协议可以在云函数的参数里直接获取等等。是比较有弹性的云资源。以前你买了CVM,就必须买一个放在这里,如果我的服务用的人少,就会造成我们服务器的大量冗余。现在有了云函数,它只有用户真正调用的时候才启动服务,如果没有用到,就销毁,所以非常灵活。如果我们的用户量突然增加,也可以通过增加配额的方式来扩容。

开发程序是什么意思_小程序开发即速_开发小程序是什么意思

最后一个是模式和模式的对比。

云数据库

在传统的服务器模型中,代码是部署在服务器上的,我们需要考虑服务分层、微服务,或者逻辑解耦,需要做运维、架构设计,还有很多事情要做。而基于 模型,我们不用考虑太多的分层和解耦,其实就是天然解耦,因为云函数更倾向于专注于一个业务逻辑,我们可以很方便的扩容和缩容,所以云函数非常适合做更灵活的服务。

第二个是云端数据库,基于 ,更适合小程序这样的应用,可以通过小程序端内置的SDK直接调用;另外我们有权限控制,可以根据不同的用户场景进行权限管理,还可以对数据量大的集合添加索引,加快数据提取速度。

云储存

最后一个就是云存储,云存储其实给我们开发者提供了一个更快上传资源的能力,它天然就带有 CDN 加速和权限管理,跟数据库一样,根据不同的用户场景来控制资源的权限。

我们来比较一下传统开发模式和云开发模式的异同。

在传统的开发模式下,开发人员就像保姆一样,从前端到后端再到运维什么的都照顾。而云开发模式只需要关心我们的业务,以及业务方的运维,从这个角度来看,我们需要关心的东西非常少。

这里举个例子,假设我是一个有一定计算机基础的新手,需要写一个高性能的上传文件的服务,如果是传统的开发模式,首先需要在小程序端调用两个接口来选择图片,然后在后台运行一个服务来接收前端发送的文件内容。如果要做一个百万用户量级且不会崩溃的文件上传服务,就得买一台机器来加载,做安全管理,相当繁琐。如果我们用云开发,去小程序文档里看文档,只需要十几行代码就能达到和传统开发模式一样的效果。

我快速算了一下,发现我阅读文档花了2分钟,编写代码花了2分钟,所以我实际上可以在4分钟内编写一个高性能的文件上传服务。

同样的道理,如果我是一个新手,想在一个高性能的小程序中插入数据逻辑,使用云开发几分钟就可以完成,但使用传统的开发模式则需要几千分钟。

云开发的架构我们怎么搭建呢?首先用户接入小程序进行操作,小程序使用内置的SDK对资源进行操作,经过微信后台之后到达云开发服务的后端,然后使用云开发后端在对应的云底层去操作一些资源。从这里其实你可以看到我们在小程序端和服务端可以分别对这个资源进行操作。而服务端包括云开发的云功能和我们自己原有的服务器。那么很多同事可能会担心如果已经有了小程序的后台服务,如何结合云开发呢?其实通过我们提供的SDK在你的服务器上进行操作就可以了。

最佳实践

说了这么多的特点和优势,我们来谈谈推荐的开发模式。

首先我想讲一下如何操作云开发的云资源,特别是在权限管理方面。在小程序端操作资源的时候,你只有用户级别的权限,也就是说这个小程序的用户只能操作自己的资源。所以当我们在小程序 SDK 中上传文件的时候,我们可以看到上传者会直接被包含在控制台中。如果这个文件是管理员上传的,其他用户是拿不到的。

数据库也是一样,我往小程序里插入数据的时候,这里会有一个,提示除了管理员和创建者之外,其他人都无法读写。

如果我们要做比较敏感的事情,需要放到云函数或者服务器上,需要使用管理员级别的权限去操作。我们主要通过wx--sdk来操作,底层是基于tcb--node的,两者都有管理员权限。tcb--node主要关注如何更好的操作云资源,而wx--sdk会专注于提供更多微信小程序独有的功能。

这里是数据库和存储权限的设置,这里我简单说一下管理员读写,就是说我需要有管理员的权限才能操作这些资源。

第二个是关于云函数的最佳实践,传统的云函数一般会把云函数的业务逻辑和粒度切分的很细,让云函数只处理单一的业务逻辑。

如果要把这些业务合并起来,我们可以把一些公用的业务模块,比如用户管理,放到一个云函数里;对于支付,我们可以把下单、退款等支付相关的云函数放到同一个函数里。

你甚至可以把原来的服务迁移过去,将整个服务放在一个云函数中,通过路由分发模型分发到不同的模块进行处理。

对于最后一种模式,我编写了一个名为 tcb- 的 koa 风格的库。

说完推荐的开发模式,我来简单说一下实际的案例。

比如我们的第一个客户腾讯的网约车二维码,之前把大量的配置数据放到了小程序里,但随着扩展到全国不同的城市,就显得非常臃肿。使用云开发之后,就把不需要离线加载的配置搬到了云开发,把一些静态资源剥离到云开发存储服务上,这样就使得整个小程序的加载速度更快了。

第二个是腾讯相册。这个小程序后端人手非常紧缺,所以他们尝试使用云开发来做前端。他们的用户信息是存储在原有的后端的,所以他们决定采用混合架构。怎么混合呢?他们先通过云函数访问原有的相册服务,查询用户权限,如果用户有权限,就把评论和点赞的数据写入云开发的数据库,如果没有权限,就拒绝。这是一个典型的原有服务和云开发混合使用的案例。

最后一个案例是我为某酒店设计的入住登记小程序。用户使用小程序时,可以将身份证交给云函数,云函数会访问腾讯云的智能影像服务对身份证进行识别,如果识别成功,云函数就会访问原服务进行入住登记。从这个案例中我们可以看出,云函数非常适合并发量不是特别高的业务场景。

最后推荐三个官方的库,希望能够帮助大家更好的使用云开发。

结尾

分享