Serverless 布道师在讲解 Serverless 架构和云主机等区别的时候,总会有类似的描述:
传统业务开发完成想要上线,需要评估资源使用。根据评估结果,购买云主机,并且需要根据业务的发展不断对主机等资源进行升级维。而 Serverless 架构,则不需要这样复杂的流程,只需要将函数部署到线上,一切后端服务交给运营商来处理。即使是瞬时高并发,也有云厂商为您自动扩缩。
但是在实际生产中,Serverless 真的无需评估资源么?还是说在 Serverless 架构下,资源评估的内容、对象发生了变化,或者简化呢?
在 腾讯云云函数 中,我们创建一个云函数之后,有这么几个设置项:
内存设置范围为 64~1536M,超时时间范围为 1~900s。这些设置项其实已经涉及到了资源评估。
超时时间
先说超时时间,一个项目或者一个函数,一个 Action 都是有执行时间的。如果超过某个时间没执行完,就可以评估其为发生了「意外」,可以被「干掉」了,这个就是超时时间。
例如一个获取用户信息的简单请求,假设 10s 内没有返回,证明已经不满足业务需求,此时就可以将超时设置为 10s。如果有另一个业务,运行速度比较慢,至少要 50s 才能执行完,那么这个值的设置就要大于 50,否则程序可能因为超时被强行停止。
内存
内存是一个有趣的东西,可能衍生两个关联点。
关联点 1:
程序本身需要一定的内存,这个内存要大于程序本身的内存。
以 Python 语言为例:
# encoding=utf-8
import jieba
def main_handler(event, context):
jieba.load_userdict("./jieba/dict.txt")
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))