在学习云函数之前,我们要先了解一下Serverless
Serverless概述
简单来说,Serverless就是无需管理服务器的架构模式,我们只需要写业务代码,云平台会自动处理部署、弹性扩容、资源调度、运维运作等一切幕后工作
在狭义上来讲Serverless可以分成以下两个方面
┌───────────────────────────────────────────────────────────┐
│ Serverless │
└────────────┬────────────────────────────────┬─────────────┘
│ │
┌───────────▼────────────┐ ┌────────────▼───────────┐
│ FaaS:函数即服务 │ │ BaaS:后端即服务 │
│ Function as a Service │ │ Backend as a Service │
└────────────────────────┘ └────────────────────────┘
无服务器(Serverless)不是表示没有服务器,而是表示当使用Serverless时,我们无需关心底层的资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。
本文主要研究的是函数即服务,也就是云函数
什么是云函数
首先,函数我们都了解,是程序中的一段可以被重复调用、具有特定功能的代码结构
云函数就是一种运行在云端的函数,属于 Serverless 架构的核心组件。你只需编写函数代码,云平台自动完成运行环境、部署、调度和扩容。 真正实现了只写业务逻辑,其他全部自动化
函数即服务提供的是一种直接在云上运行无状态的、短暂的、由事件触发的代码的能力。
函数即服务和传统应用架构不同,函数即服务提供的是事件触发式的运行方式,云函数不是始终运行的状态,而是在事件发生时由事件触发运行,并且在一次运行的过程中处理这一次事件。因此在云函数的代码中,仅需考虑针对一个事件的处理流程,而针对大量事件的高并发处理,由平台实现云函数的多实例并发来支持。
云函数无法长驻,调用的时候创建,执行完之后立即就销毁,所以无法直接保存状态。
偷一张图片来,便于理解
当服务没有被请求时,云计算上并没有这个函数的实例。一旦请求发出,调度平台将以毫秒级的服务实例化一个服务并完成响应。请求处理完成后,调度服务又将自动收回这个实例。云函数的使用成本只要是由调用次数、资源使用量和外网出流量等统计出来,而如果在业务低谷期,访问量少的时候,运维的成本是很小的。对于创业公司来讲,可以省去大部分初期运维的费用,可见价值还是很大的
执行方法
对应项目的main函数是程序执行的起点
在调用云函数时,首先会寻找执行方法作为入口,执行用户的代码,用户需以文件名.执行方法名的形式进行设置
例如用户设置的执行方法为 index.handler,则 SCF 平台会首先寻找代码程序包中的 index 文件,并找到该文件中的 handler 方法开始执行。
函数入参
函数入参,是指函数在被触发调用时所传递给函数的内容。通常情况下,函数入参包括 event 和 context 两部分,但根据开发语言和环境的不同,入参个数可能有所不同
event
event 参数类型为 dict,event 中包含了触发函数执行的基本信息,可以是平台定义的格式,也可以自定义格式。函数被触发开始执行后,可以在代码内部对 event 进行处理
有两种方法可以触发云函数SCF执行:
- 通过调用云API触发函数执行
- 通过绑定触发器触发函数执行
context
context 为 SCF 平台提供的入参,将 context 入参传递给执行方法,代码可通过解析 context 入参对象,获取到运行环境及当前请求的相关信息
具体可以看腾讯云的官方手册,这里不再赘述
函数返回
SCF 平台会获取到云函数执行完成后的返回值,并根据下表中不同的触发方式进行处理。
触发方式 | 处理方式 |
同步触发 | 通过 API 网关、云 API 同步 invoke 触发函数的方式为同步触发。 使用同步方式触发的函数在执行期间,SCF 平台不会返回触发结果。 在函数执行完成后,SCF 平台会将函数返回值封装为 JSON 格式并返回给调用方。 |
异步触发 | 使用异步方式触发的云函数,SCF 平台接收触发事件后,会返回触发请求 ID 。 在函数执行完成后,函数的返回值会封装为 JSON 格式并存储在日志中。 用户可在函数执行完成后,通过返回的请求 ID 查询日志获取该异步触发函数的返回值。 |
当函数中的代码返回具体值时,通常返回特定的数据结构。例如 :
运行环境 | 返回数据结构类型 |
Python | 简单数据结构或 dict 数据结构 |
Node.js | JSON Object |
PHP | Array 结构 |
GO | 简单的数据结构或带有 JSON 描述的 struct |
为保证针对各开发语言和环境的统一性,函数返回会使用 JSON 数据格式统一封装。SCF 平台在获取到例如以上运行环境函数的返回值后,将会对返回的数据结构进行 JSON 化,并返回 JSON 内容到调用方。
触发器和触发源
- 任何可以产生事件,触发云函数执行的均可以被称为触发器或触发源。触发器在本身产生事件后,通过将事件传递给云函数来触发函数运行。
- 触发器在触发函数时,可以根据自身特点,使用同步或异步方式触发函数。同步方式触发函数时,触发器将等待函数执行完成并获取到函数执行结果;异步方式触发函数时,触发器将仅触发函数而忽略函数执行结果。
- 腾讯云云函数在和腾讯云的某些产品或服务对接时,也有自身实现的一些特殊方式,例如推(PUSH)模式和拉(PULL)模式。
-
- 推模式:触发器主动将事件推送至云函数平台并触发函数运行。
- 拉模式:云函数平台通过拉取模块,从触发器中拉取到事件并触发云函数运行。
攻防方面,我们也可以通过云函数实现一系列操作,例如各种扫描器,还有一些其他的,基本上就是基于python的,可以去看python黑帽子这本书,附上我创业未半中道崩殂的知识库链接python黑帽子 · 语雀
至于实操的话,鼠鼠手里没有米,没钱买云服务,下次一定