云函数扫盲

2021-03-02 12:18:26

记录一些云函数的基础知识,混个脸熟

不少同学总是问关于云函数的问题,所以这里发个扫盲的文章吧。

云函数是啥?

云函数作为无服务模式的一种实现(FaaS)已经有很多公司在提供了,亚马逊AWS、微软Azure、Google Cloud、IBM Cloud、阿里云、腾讯云、华为云、LeanCloud......

小程序云函数在微信官方文档中的定义摘录:

云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源;各云函数完全独立;可分别部署在不同的地区。开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。

文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions.html

云函数的本质是一个后端服务,不过把服务的粒度拆成了函数级别,代码是单独部署在提供服务的厂商的机器上的,但是它有别于云存储及云数据库等BaaS,是函数即服务(Function as a Service)的实现。

腾讯云云函数与小程序云函数的区别

别看都是云函数,二者还是有些区别的,腾讯云云函数(Serverless Cloud Function)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。小程序云函数当然是为了小程序这个应用场景深度定制的了。

之前曾经发过的一篇文章浅谈腾讯云·云开发与小程序·云开发的区别,也有略微提及。

1. 支持的语言环境

  • SCF:Python、Node.js、Golang、PHP、Java
  • 小程序云函数:Node.js8.9

除此之外,环境中内置的依赖也是有差别的,比如腾讯云云函数是内置puppeteer而小程序的云函数则是没有的。
SCF 在已支持的开发语言及版本的标准运行环境外还提供了 Custom Runtime 服务,即可定制化运行环境。通过开放实现自定义函数运行时,支持根据需求使用任意开发语言的任意版本来编写函数,并实现函数调用中的全局操作,如扩展程序的加载,安全插件,监控 agent 等。

2. 免费额度

SCF:

计费项 每月免费额度
资源使用量 40万GBs
调用次数 100万次

小程序云函数:
资源使用量:4万GBS/月
调用次数:不限

3. 其它限制

SCF可以调整运行内存,支持绑定自定义域名,灵活性较高。

小程序云函数存在如下系统限制:

  • 云函数(单次运行)运行内存:256Mnote
  • 云函数并发数:1000note
  • 数据库流量:单次出包大小为16M
  • 数据库单集合索引限制:20个
  • 单个小程序的小程序端请求频率限制:100 万次/分钟

云函数适用场景

  • 事件驱动&响应式
  • 存在流量突发的情况
  • 请求延时要求不高
  • 低频请求
  • 资源要求低

优缺点

优势:

  • 云端运行:无需采购、部署、运维传统硬件,节约人力及成本
  • 高效开发:每个函数单独运行、部署,上传代码后即可自动部署,提升了独立开发和迭代的速度
  • 弹性伸缩:根据请求量实现毫秒级实时弹性伸缩,函数未执行不产生任何费用,不需为空闲资源付费

传统的开发方式,一个企业提供软件产品服务需要提前采购资源,根据自己的需求提前预估使用情况,考虑并发限制、峰值请求等,就要购买多台云主机去满足高可用、高并发,而平时这些计算资源大多是闲置的,造成了资源浪费。而云函数可以做到按需使用,弹性扩缩容,对于中小创业公司来讲是可以节省很多成本的。

如何判断业务是否适合上云函数?

  • 异步,并发,易于并行化为独立的工作单元
  • 无状态,短暂的,冷启动时间要求不高
  • 扩展要求差异性较大,请求量无法预估
  • 业务需求变更频繁,灵活性要求高,敏捷开发

美中不足:

  • 无法应对架构特别复杂的情况,不是所有的业务都适合上云的,业务需要细粒度的拆解来决定哪些服务需要上云,这对软件的架构是个挑战,可能需要一个侵入式的改造。
  • 不适合应用长时间运行
  • 依赖很多第三方服务

参考资料

本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

扫描下方二维码阅读当前文章

浏览器、微信扫码
微信小程序

评 论:

好文推荐
极客之路公众号
三百人技术交流群
探讨前端、小程序正逆向、爬虫...
学习交流&商务合作
微信情报 更多 >
    每天进步一点点~