架构的演进
物理机时代:单机版的单体架构-数据库,应用代码,HTTP服务器等服务都在一台服务器上
虚拟机时代:将一台物体机通过虚拟化技术分割为多台虚拟机,对于硬件设备的管理统一由云厂商负责,开发者不需买硬件,直接在云平台买虚拟机,例如阿里云的ECS
为了降低服务器负载,数据库迁移到云厂商提供的云数据库上,图片存储迁移到对象存储
容器时代:Docker的发布,容器技术是在虚拟化的基础上,把代码和运行环境打包在一起,能保持代码和运行环境的一致性,服务器上部署容器,容器管理就是容器编排技术,比如K8S
serverless时代,不在关心运行环境和自动调配服务器的资源( 应用:购物节的流量洪峰)
serverless概念
serverful架构下,开发者首先需要分配可用的资源,然后加载代码和数据,再执行计算,将计算的结果存储起来,最后还要管理资源的释放。需要关心的问题例如:根据业务流量大小等指标,响应式的调整服务规模,实现自动弹性伸缩。再比如异地容灾、负载均衡、日志监控、文件存储等等
severless架构下(无运维,事件驱动,按量付费,弹性伸缩),开发者只专注于业务逻辑,所有与业务无关的基础设施,全部交给云平台负责,由云平台统一调度、运维
serverless架构是采用FaaS(函数即服务)和BaaS(后端即服务)来解决问题的一种设计
FaaS和 BaaS都是云计算中常见的服务模型,它们分别针对不同的应用场景和需求:
FaaS允许开发者在云平台上部署、运行和管理函数(通常是事件驱动的函数),而无需管理底层的服务器和基础设施。开发者只需将函数上传到 FaaS 平台,然后定义触发函数执行的事件,例如 HTTP 请求、消息队列、定时器等。当事件发生时,FaaS 平台会自动调用相应的函数执行,并负责管理函数的扩缩容、高可用性和资源分配等问题。开发者只需关注函数的业务逻辑,而不需要担心服务器的管理和维护。
BaaS提供了用于构建和运行应用程序后端的基础设施和服务。BaaS 平台通常提供了一系列后端服务,包括用户认证、数据库存储、文件存储、推送通知、消息队列等。开发者可以通过 BaaS 平台来快速搭建应用的后端,而无需自行开发和维护这些基础服务,从而加快了应用开发的速度并降低了开发成本。开发者可以通过 BaaS 平台提供的 API 或 SDK 来访问和管理这些后端服务,从而实现应用程序的业务逻辑。
总的来说,FaaS 主要关注函数级别的计算,将计算资源按需分配给函数执行,而 BaaS 则主要关注应用后端的开发和运行,提供了一系列通用的后端服务和功能。两者都可以帮助开发者简化应用开发和部署的流程,提高开发效率和灵活性。
基本应用
云函数需要触发器来触发,在腾讯云中是访问服务
CloudBase CLI 是云开发开源的命令行界面交互工具
//安装
npm i -g @cloudbase/cli
//登录
tcb login
//一键部署
tcb
//函数运行需要触发器,以下命令创建触发器
tcb service create
安装scf-cli不需要运行再调试
express与云函数
serverless-http开源工具对框架代码进行包装
连接及操作云数据库
1.首先安装
npm i @cloudbase/node-sdk
文档
数据库代码调用使用异步的方式,添加async await
云开发的运行机制Faas
分为四个阶段代码下载->启动容器->初始化环境->运行代码
冷启动,从头开始,热启动,从第四步开始,一段时间没有请求,环境释放,下次重新冷启动
编写云函数时,最好当次请求不要依赖上次请求的信息,反例如下:
如果将全部业务逻辑放到一个云函数中,当并发量达到一定限制时,无法分配更多的服务器资源,更好的方式是对业务逻辑进行拆分,一个云函数对应一个独立业务逻辑,每一个云函数中都有package.json和node_modules
使用cloudbase-framework工具
CloudBase Framework
tcb new
可用于创建vue或react应用,运行就直接用常用启动命令npm run serve
即可
CloudBase Framework支持插件机制,在生成文件cloudbaserc.json中进行配置
只部署其中的一个云函数的命令tcb fn code update gettodo(云函数名)
需要在访问服务中创建很多触发器,解决是在客户端直接调用云函数(云开发Vue插件–@cloudbase/vue-provider),使用callFunctionAPI来调用
客户端调用云函数需要登录鉴权(匿名登录)
上传文件云存储
通过uploadFile函数上传文件到服务器,使用返回的fileID来获取临时链接,通过临时链接来显示
用户管理和登录授权服务,上传文件需先登录(短信验证码方式),通过auths对象来调用具体功能的API
封装auth可以使用this.$auths在任意位置可以调用
部署上线
在项目目录下使用tcb
进行全量部署,访问服务中添加域名
域名需要申请SSL证书,免费ssL只能二级域名,
申请之后需要在域名服务商添加记录