Serverless 应用优化的四则秘诀
作者 | 刘宇
资源评估依旧重要
虽然 Serverless 架构是按量付费的,但是并不代表它就一定比传统的服务器租用费用低,如果我们对自己的项目评估不准确,对一些指标设置不合理,Serverless 架构所产生的费用可能是巨大的。
所配置的内存规格;
程序所消耗的时间;
以及产生的流量费用。
阿里云函数计算不同内存规格收费统计
合理的代码包规格
合理利用实例的复用
在各个云厂商的 FaaS 平台中,为了更好的解决冷启动的问题,为了更合理的利用资源,是存在“实例”复用情况的。所谓的实例复用,就是当一个实例完成一个请求后并不会释放,而是进入“静默”的状态。在一定时间范围内,如果有新的请求被分配过来,则会直接调用对应的方法,而不需要再初始化各类资源等,这在很大程度上减少了函数冷启动的情况出现。为了验证,我们可以创建两个函数:
函数 1:
# -*- coding: utf-8 -*-
def handler(event, context):
print("Test")
return 'hello world'
函数 2:
# -*- coding: utf-8 -*-
print("Test")
def handler(event, context):
return 'hello world'
函数复用记录
机器学习场景下,在初始化的时候加载模型,避免每次函数被触发都会加载模型带来的效率问题,提高实例复用场景下的响应效率; 数据库等链接操作,可以在初始化的时候进行链接对象的建立,避免每次请求都创建链接对象;
其他一些需要首次加载时下载文件,加载文件的场景,在初始化的时候进行这部分需求的实现,可以在实例复用的时候效率更高;
善于利用函数特性
各个云厂商的 FaaS 平台都有一些“平台特性”,所谓的平台特性,是指这些功能可能并不是《CNCF WG-Serverless Whitepaper v 1.0》中规定的能力,或者描述的能力,仅仅是作为云平台根据自身业务发展和诉求,从用户角度出发挖掘出来,并且实现的功能,可能只在某个云平台或者某几个云平台所拥有的功能。这类功能一般情况下如果利用得当会让我们的业务性能等有质的提升。
1、Pre-freeze & Pre-stop
异步背景指标数据延迟或丢失:如果在请求期间没有发送成功,则可能被延迟至下一次请求,或者数据点被丢弃。 同步发送指标增加延迟:如果在每个请求结束后都调用类似 Flush 接口,不仅增加了每个请求的延迟,对于后端服务也产生了不必要的压力。
函数优雅下线:实例关闭时应用有清理连接,关闭进程,上报状态等需求。在函数计算中实例下线时机开发者无法掌握,也缺少 Webhook 通知函数实例下线事件。
扩展编程模型与现有编程模型处理的工作内容简图
PreFreeze:在每次函数计算服务决定冷冻当前函数实例前,函数计算服务会调用 HTTP GET /pre-freeze 路径,扩展开发者负责实现相应逻辑以确保完成实例冷冻前的必要操作,例如等待指标发送成功等。函数调用 InvokeFunction 的时间不包 PreFreeze Hook 的执行时间。
PreFreeze 时序图
PreStop:在每次函数计算决定停止当前函数实例前,函数计算服务会调用 HTTP GET /pre-stop 路径,扩展开发者负责实现相应逻辑以确保完成实例释放前的必要操作,如关闭数据库链接,以及上报、更新状态等。
2、单实例多并发
单实例多并发效果简图
减少执行时长,节省费用。例如,偏 I/O 的函数可以在一个实例内并发处理,减少实例数从而减少总的执行时长。 请求之间可以共享状态。多个请求可以在一个实例内共用数据库连接池,从而减少和数据库之间的连接数。
降低冷启动概率。由于多个请求可以在一个实例内处理,创建新实例的次数会变少,冷启动概率降低。 减少占用 VPC IP 在相同负载下,单实例多并发可以降低总的实例数,从而减少 VPC IP 的占用。
刘宇(花名:江昱)国防科技大学电子信息专业在读博士,阿里云 Serverless 产品经理,阿里云 Serverless 麒麟布道师。
新书推荐
本书通过多个开源项目、多个云厂商的多款云产品,以及多种途径向读者介绍什么是 Serverless 架构、如何上手 Serverless 架构、不同领域中 Serverless 架构的应用以及如何从零开发一个 Serverless 应用等。帮助读者将 Serverless 架构融入到自己所在的领域,把 Serverless 项目真实落地,获得 Serverless 架构带来的技术红利。
社区官网
Serverless Devs
http://www.serverless-devs.com/
https://github.com/Serverless-Devs/Serverless-Devs
https://serverlessdevs.resume.net.cn/zh-cn/desktop/index.html
http://serverlessdk.oss.devsapp.net/docs/tutorial-dk/intro/react
https://serverlessdevs.resume.net.cn/zhcn/cli/index.html
https://serverlesshub.resume.net.cn/#/hubs/special-view
评论