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

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储、容器平台、微服务架构、无服务器计算等领域均有涉猎。

clipboard.png

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

clipboard.png

小程序的后台技术

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

clipboard.png

对于后端服务,这张图是大家传统做的方式,暴露api,这些都可以用来开发业务应用,业务应用之后需要有相应的存储文件,结构化的数据存储,或者是非结构化的数据存储,需要有数据库和缓存,为了实现这一套架构且不会由于某一块的服务器宕掉,或者有一些漏洞等等,我们通常的实现是一个较为复杂的过程。比如说,我们为了保证的Serverless和服务器不会垮掉,需要建立一个集群,我们要对外提供服务,需要LB的请求,请求到之后分到某一台服务器上。比如说文件存储,如果单纯只用一台设备,这台设备挂了,整个文件服务就挂了,所以我们要使用分布式存储来解决文件存储的问题。数据库和缓存也是一样的,需要构建集群,无论是两台还是三台还是多台,构建集群以后能确保不会由于某一个单点的问题导致整个服务不可用,从而导致服务瘫痪。

clipboard.png

clipboard.png

如果作为一个小程序开发者,这套架构在互联网公司已经搭建了,作为个人来说这一道太重了,需要了解这里面的某一块和它的配置,比如说数据库的集群怎么配?让大家没法把精力集中到你的业务和小程序本身,而是过多耗在运维和支撑上。

Serverless架构

clipboard.png

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

clipboard.png

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

Serverless的使用

clipboard.png

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

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

clipboard.png

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

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

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

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

clipboard.png

api网关

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

云函数的处理流程

从云函数的方面来说,用户会承载计算业务。按照我们最开始用户给的官方图,拿到api的请求以后,解析请求内容,根据规范连接微信认证服务器,获取认证情况并记录session,返回session信息给到请求端。拿到微信服务器的返回以后可以判断用户的登陆过程是成功还是失败,如果成功以后可以拿到用户相应的值,这个地方我们发起到数据库的连接,建立一个masico的连接,完成session的记录。

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

数据库的配置

这个地方就是我们购买以后,数据库启动并且做了登陆以后,可以进入到数据库里面查看数据,查看session的记录。

实操案例——用户登陆及session展示

创建并初始化实例,按照mysql标准化使用方式操作,计算托管式的优势用户关心核心的代码,不用关心周边的运维,由于托管式业务,无论是个人请求,个人开发者的小程序,很有可能你的一个小程序就成为爆款,爆款以后可能访问量就是突增的形式。

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

clipboard.png

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/dev...
图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18--两数之和 II - 输入有序数组

文章目录1.问题描述2.解题代码1.问题描述 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2&a…

Oracle数据库(二)—— 基本的SQL SELECT语句

(一)SQL语句分为一下三种类型 DML:Date Manipulation Language 数据操纵语言DDL:Data Definition Language 数据定义语言DCL:Data Control Language 数据控制语言DML:用于查询与修改数据记录 包括如下SQL语句&#xff…

简单 3 步实现高效编程

本文的内容可能部分开发者已经了解,并且已经按照这些方法实施了。但本文还是想强调这些方法,因为这些简单的方法可以让你的工作更加高效。要想实现高效编程,最主要的是集中注意力,但这往往也是比较难以实现的,因为你在…

19--两数之和

文章目录1.题目要求2.代码详情1.题目要求 2.代码详情 java:暴力求解法hashmap法 class Solution {// 方法一&#xff1a;暴力求解法// public int[] twoSum(int[] nums, int target) {// int n nums.length;// for (int i0; i<n; i){// for (int ji1; j…

redis的配置文件

redis的配置文件 之前在实习的时候才开始接触redis&#xff0c;随着对redis的理解加深&#xff0c;才慢慢明白它的强大&#xff0c;也逐渐对他的配置有了一定的了解。下面就分享给大家&#xff0c;以便日后查看。 位置 redis的配置文件名为redis.conf在它的安装目录下。 参数说…

你的代码(软件)安全吗?【信息图】

2011年安全事件层出不穷&#xff0c;几乎可以称为“黑客年”。以前黑客通常是利用程序漏洞来造成破坏&#xff0c;令网站陷入尴尬的境地&#xff0c;但如今他们却是为了窃取数据、IP地址&#xff0c;或者通过在网站中植入木马将恶意软件安装到访客的电脑里&#xff0c;更有甚者…

20--两个数组的交集

文章目录1.问题描述2.代码详情1.问题描述 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输…

跳出IT运维怪圈 看南方报业如何主动出击

虽说世界上没有一劳永逸的事情&#xff0c;不过借助某些方案&#xff0c;IT运维倒可做到事半功倍。近日&#xff0c;南方报业传媒集团采用新华三智动远程运维服务解决方案&#xff0c;利用7*24级别安仔的桌面服务&#xff0c;实现IT运维智能化、自动化管理&#xff0c;有效保障…

网络传输与加密

谈到网络&#xff0c;就必然会涉及网络安全。但“安全”这个事情&#xff0c; 一下子就会让人联想到黑客&#xff0c;进而把“安全”这个事情无限放大为各种高大上、神秘莫测、不可知。这不是一个engineer应有的态度&#xff08;《一次艰难debug的反思》&#xff09;。 要讨论网…

21--最小栈

文章目录1.问题描述2. 代码详情1.问题描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的…

22--删除字符串中的所有相邻重复项

文章目录1. 题目要求2.代码详情1. 题目要求 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保…

jQuery上传插件Uploadify使用Demo、本地上传(ssm框架下)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; 1. jar包导入&#xff1a; <!-- 文件上传组件 --><dependency><groupId>commons-fileupload</g…

11 步教你选择最稳定的 MySQL 版本

MySQL开源数据库有多个重要分支&#xff0c;目前拥有的分支分别为&#xff1a;MySQL Cluster、MySQL 5.1、MySQL 5.5、MySQL 6.2。每个分支都有着同样的的MySQL数据库版本&#xff0c;分别为&#xff1a;Development版本、Alpha版本、Beta版本、RC版本和GA版本。Development版本…

【RabbitMQ】6、rabbitmq生产者的消息确认

2019独角兽企业重金招聘Python工程师标准>>> 通过Publisher Confirms and Returns机制&#xff0c;生产者可以判断消息是否发送到了exchange及queue&#xff0c;而通过消费者确认机制&#xff0c;Rabbitmq可以决定是否重发消息给消费者&#xff0c;以保证消息被处理…

泛型方法

java泛型方法简单介绍

修改jquery文件上传插件uploadify的英文为中文

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; 对于这种样式的问题&#xff0c;我都是简单粗爆的解决&#xff1a; 找到uploadify的js文件&#xff0c;通常不是js&…

24--反转字符串中的单词 III

文章目录1.问题描述2. 代码详情1.问题描述 给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1: 输入: “Let’s take LeetCode contest” 输出: “s’teL ekat edoCteeL tsetnoc” 注意&#xff1a;在字…