黄文俊:Serverless小程序后端技术分享

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工做经验,对企业级存储、容器平台、微服务架构、无服务器计算等领域均有涉猎。

今天讲的是怎么使用Serverless作后端技术分享。个人职业偏向是后端,可能不是写前端,不是使用Node.js,更可能是使用CR作后端语言,今天关注的微信小程序,我这一块的分享更可能是怎么实现它的后端。我所使用的是Serverless技术,也是在近两年新出来的一种架构。讲Serverless这个架构以前,我也给你们讲一下小程序和传统的后台技术。前端

小程序的后台技术

小程序,是一种全新的链接用户与服务的方式,它能够在微信内被便捷地获取和传播,同时具备出色的使用体验。它的加载方式比传统的APP方式更快速上线,体验也不差,除了它自己的界面展现和刷新以外,小程序里面的数据获取经过微信和后端进行交互,小程序的运行其实是一个类前端的运行方式,整个运行是在微信内,它和后端的交互实际上经过微信进行转发的,运行起来以后,它会提出一个api的请求,这个请求首先给到微信,微信再经过网络apr转到你本身的服务器上,服务器拿到这个请求之后进行数据的处理,而后再响应到前端,这就是小程序和后台交互的一种架构。mysql

对于后端服务,这张图是你们传统作的方式,暴露api,这些均可以用来开发业务应用,业务应用以后须要有相应的存储文件,结构化的数据存储,或者是非结构化的数据存储,须要有数据库和缓存,为了实现这一套架构且不会因为某一块的服务器宕掉,或者有一些漏洞等等,咱们一般的实现是一个较为复杂的过程。好比说,咱们为了保证的Serverless和服务器不会垮掉,须要创建一个集群,咱们要对外提供服务,须要LB的请求,请求到以后分到某一台服务器上。好比说文件存储,若是单纯只用一台设备,这台设备挂了,整个文件服务就挂了,因此咱们要使用分布式存储来解决文件存储的问题。数据库和缓存也是同样的,须要构建集群,不管是两台仍是三台仍是多台,构建集群之后能确保不会因为某一个单点的问题致使整个服务不可用,从而致使服务瘫痪。web


若是做为一个小程序开发者,这套架构在互联网公司已经搭建了,做为我的来讲这一道过重了,须要了解这里面的某一块和它的配置,好比说数据库的集群怎么配?让你们无法把精力集中到你的业务和小程序自己,而是过多耗在运维和支撑上。sql

Serverless架构

我下面要介绍的Serverless架构,采用无服务器的方式,主要会介绍无服务器和云怎么结合,怎么利用云的服务减轻架构化的工做。介绍它的架构以前,我介绍一下Serverless架构,英文称之为Serverless,中文称之为无服务器,你们不用购买服务器,不用购买虚拟机或者物理机,这一块怎么运行呢?它使用计算托管的方式,在Serverless这里,咱们能够当作两块,第一块就是函数即服务,它真正实现了你业务的托管计算。另一种是后端即服务,包括对象存储,你们不用本身构建分布式存储,不用担忧数据的丢失和安全性问题;同时在云上提供的数据库,消息队列和对象存储都是同样的,不用购买服务器本身搭建,在购买使用的过程中咱们能够称之为Serverless。由于这些都是托管型的,使用的时候不用关心它的安全性,不用关心可能服务器宕机致使的故障。数据库

Serverless的计算托管式云在服务函数内,下面来说一下云函数的架构。你们看到这个架构之后,咱们后面在拿一个实际案例来看怎么把具体的api服务落地。云服务器架构自己是计算托管型的,计算托管意味着把真正的业务代码托管到云上面,而后在云上面运行,它的运行方式有一个特色是触发式运营,跟各个产品打通之后,各个产品产生的事件,后面的案例就是和API网关进行结合,从api网关来的事件就是api事件,当这个请求到达api网关时,咱们就认为是一个事件,而后再运行。你们最初进行托管的时候,把代码和触发期的配置提交到云上面来,并非说提交以后代码就运行起来,而是事件到达才运行起来,代码对这个事件进行处理。在这个过程当中,对于每一次的事件,每个代码拉起的过程,实际上都是单独处理一个事件,为何呢?由于咱们在这儿使用并发的模式,若是你有上万个用户同时访问你的小程序,要同时对上万的用户进行服务,启动上万的实例,它是在事件时运行起来,没有事件不能运行,这与微信小程序自己点开即用、用完即走的概念是符合的,有请求时才运行,没有请求时不运行。产品的计费模式也是根据实际运行的时间计费的。小程序

Serverless的使用

怎么使用Serverless呢?传统的架构就是前面说的web服务,而后是使用存储、缓存,咱们对外服务之后,有对外暴露相应的api,实际上用户的业务逻辑都是放在云函数内,须要结构化存储,须要进行缓存或者对象存储,咱们须要数据服务或者云缓存服务等,其余的服务均可以直接在线服务,这些服务直接经过代码调用。后端

前面讲了Serverless的架构介绍,后面是对于这个后台开发的介绍,后面也是基于这个方式进行详细案例的说明。微信小程序

小程序除了自己的页面启动,后续与网络的交互都是由小程序发起,通过微信自己之后,首先请求到达api网关,对于对外的api的管理,把这个api暴露到官网上,能够被要程序访问获得。它自己也可以提供api的发布和版本的切换能力,api网关以后就是云函数。云函数就是实际处理业务的逻辑,若是你须要使用数据库,就在代码内发数据库的链接,须要存储文件,就调用相应的窗口写文件。api

基于这个方案咱们来看一下,传统提供的是中间的一块,由于前端是用户的小程序,后端是微信自己提供的接口服务,中间建议的是开发者本身的服务器。咱们如今要展现的一个案例,也就是怎么把中间的开发者服务器替换掉,用Serverless的方案落地,咱们使用了api网关加云数据库实现开发者服务器所可以作到的事情,不须要购买服务器而落地咱们的api。缓存

首先从最前面的小程序来看,这个案例也是小程序开发者上面的demo,demo的前端包括登录端口,以及session展现,咱们在小程序这端首先获取一个talk,开发者拿到之后再跟微信交互,验证合法之后,咱们这里选择了记录到云数据库,这就是小程序界面提供点击登录的位置,后面的业务会发送请求到云上面来。

对于这个小程序的核心,咱们在某一个api上面的路径就是在hos的login url上发起GET操做,根据Wx.login构造请求的头部,body内容,发送获取到的code及加密数据到后台。

api网关

咱们看一下api网关作的事情,它对外以一个api的接口呈现出来,咱们直接提供了对外访问的域名,用户基于这个域名绑定本身所拥有的域名,这种状况下能够实现发布的要求,微信小程序的开发者要求域名要备案,把本身的域名绑定到api的服务上面来,对外提供,在右侧api的网关上,配一个/login Get,在后台还未实现以前,能够配置为mock方法,解耦先后端,小程序能够基于api构造的mock数据开发。实现云函数后,对接api到云函数并更新发布api,避免开发的同时影响到在线业务。

云函数的处理流程

从云函数的方面来讲,用户会承载计算业务。按照咱们最开始用户给的官方图,拿到api的请求之后,解析请求内容,根据规范链接微信认证服务器,获取认证状况并记录session,返回session信息给到请求端。拿到微信服务器的返回之后能够判断用户的登录过程是成功仍是失败,若是成功之后能够拿到用户相应的值,这个地方咱们发起到数据库的链接,创建一个masico的链接,完成session的记录。

云函数的处理流程以后,下面展现的是咱们怎么和数据库创建链接,登录信息的细节流程,建立链接并可复用链接,拼装SQL语句并执行。

数据库的配置

这个地方就是咱们购买之后,数据库启动而且作了登录之后,能够进入到数据库里面查看数据,查看session的记录。

实操案例——用户登录及session展现

建立并初始化实例,按照mysql标准化使用方式操做,计算托管式的优点用户关心核心的代码,不用关心周边的运维,因为托管式业务,不管是我的请求,我的开发者的小程序,颇有可能你的一个小程序就成为爆款,爆款之后可能访问量就是突增的形式。

咱们利用session的架构实现小程序,并且不用去担忧运维;秒级启动,弹性计算能力知足用户上万的并发。核心点关注业务代码,而不用关注web,这就是快速的应用实现小程序的落地的方法。

Q/A

Q:在api网关部署HTTPS证书吗?

A:对,这个证书是腾讯云提供的,绑定你本身域名的时候,能够实现HTTPS的支持。

Q:咱们在生产环境的时候由腾讯云提供的证书?

A:对。

Q:在生产环节须要腾讯云提供的证书上线咱们的服务?

A:对,这是小程序方面的要求,由于小程序要求必须使用自有域名和小程序打通。

Q:小程序即用即删,若是手机里面有不少会很卡,若是小程序用过在微信上面的页面会显示出来,若是上万个对微信自己有什么影响?

A:能够从一些限制能够看到,如今对于微信小程序的大小有限制的,它自己的大小是要求,目前我记得是5兆包2兆包的大小,若是是上千个,对于你手机来讲多是多存储了一些数据,每一个包最大用满可能就是5兆,自己小程序页面的加载都是有限制的,这个限制从微信角度来考虑,都是为了保证小程序的流畅运行,不会对用户的手机形成很大的冲击,这一块要微信的同窗介绍,我是偏后端的。

Q:我再举个例子,小程序进入的时候加载速度比较快的,举一个比较极端的,好比说跳一跳,第一次使用的时候,它的加载速度,好比说今天用完了,删掉,过一段时间再进去,相比来讲加载速度有差异吗?或者第二次用的时候快一些吗?缘由是什么?

A:这个要由微信的同窗解答比较好一些,由于这些都是小程序自己的体现,或者说速度的一种体现。

Q:你好,我是作后端开发的,什么样的模型不是用Serverless来作的。

A:Serverless它自己的一些特性也限制了它的使用场景,好比说对于内存的配置,cpu的配置,运行时间的限制,不是全部场合都适用,它自己对运行时间有限制的,不能长时间的运用,包括内存的使用,包括cpu的应用,好比说动画的渲染,长时间的批量计算,这些都不适合api的服务,因为它的请求到达之后必须快速响应用户,api比较适合的。

更多分享资料,请戳下面的连接:

使用 serverless 构建小程序后台.pdf

问答
微信小程序如何与数据库交互?
相关阅读
朱展:腾讯云小程序解决方案
施德来:有赞电商小程序的实践
邹伟:如何开发一款小游戏

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1116854?fromSource=waitui

相关文章
相关标签/搜索