热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

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

小程序的后台技术

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

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

 

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

Serverless架构

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

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

Serverless的使用

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

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

小程序除了本身的页面启动,后续与网络的交互都是由小程序发起,经过微信本身以后,首先请求到达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


推荐阅读
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • TCP三次握手过程详解与图示解析
    本文详细解析了TCP三次握手的过程,并通过图示清晰展示了各个状态的变化。同时,文章还介绍了四次挥手的图解,解释了在TIME_WAIT状态中,客户端最后一次发送的ACK包的作用和重要性。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文精选了几个结合 Vue 和 Spring Boot 的优质开源项目,适合开发者学习和参考。这些项目不仅涵盖了前后端分离的最佳实践,还提供了丰富的功能示例和详细的文档,有助于提升开发效率和技术水平。项目地址:https://github.com/ 示例链接。 ... [详细]
author-avatar
才女与尔同销万古愁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有