Serverless 工程实践 | Serverless 应用优化与调试秘诀
Serverless
共 7096字,需浏览 15分钟
· 2021-10-01
作者 | 刘宇(江昱)
前言:本文将以阿里云函数计算为例,提供了在线调试、本地调试等多种应用优化与调试方案。
Serverless 应用调试秘诀
app = bottle.default_app()
并且对run方法进行条件限制 (if __name__ == '__main__'):
if __name__ == '__main__':
bottle.run(host='localhost', port=8080, debug=True)
例如:
# index.py
import bottle
@bottle.route('/hello/<name>')
def index(name):
return "Hello world"
app = bottle.default_app()
if __name__ == '__main__':
bottle.run(host='localhost', port=8080, debug=True)
import json
def handler(event, context):
print(event)
def test():
event = {
"events": [
{
"eventName": "ObjectCreated:PutObject",
"eventSource": "acs:oss",
"eventTime": "2017-04-21T12:46:37.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shanghai:123456789:bucketname",
"name": "testbucket",
"ownerIdentity": "123456789",
"virtualBucket": ""
},
"object": {
"deltaSize": 122539,
"eTag": "688A7BF4F233DC9C88A80BF985AB7329",
"key": "image/a.jpg",
"size": 122539
},
"ossSchemaVersion": "1.0",
"ruleId": "9adac8e253828f4f7c0466d941fa3db81161****"
},
"region": "cn-shanghai",
"requestParameters": {
"sourceIPAddress": "140.205.***.***"
},
"responseElements": {
"requestId": "58F9FF2D3DF792092E12044C"
},
"userIdentity": {
"principalId": "123456789"
}
}
]
}
handler(json.dumps(event), None)
if __name__ == "__main__":
print(test())
Serverless 应用优化
函数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'
在机器学习场景下,在初始化的时候加载模型,避免每次函数被触发都会加载模型。 在初始化的时候建立链接对象,避免每次请求都创建链接对象。
其他一些需要首次加载时下载、加载的文件在初始化时实现,提高实例复用效率。
异步背景指标数据延迟或丢失:如果在请求期间没有发送成功,则可能被延迟至下一次请求,或者数据点被丢弃。 同步发送指标增加延时:如果在每个请求结束后都调用类似 Flush 接口,不仅增加了每个请求的延时,对于后端服务也产生了不必要的压力。
函数优雅下线:实例关闭时应用有清理连接、关闭进程、上报状态等需求。在函数计算中实例下线时,开发者无法掌握,也缺少 Webhook 通知函数实例下线事件。
PreFreeze:在每次函数计算服务决定冷冻当前函数实例前,函数计算服务会调用 HTTP GET/prefreeze 路径,扩展开发者负责实现相应逻辑以确保完成实例冷冻前的必要操作,例如等待指标发送成功等,如图所示。函数调用 InvokeFunction 的时间不包含 PreFreeze Hook 的执行时间。
PreStop:在每次函数计算决定停止当前函数实例前,函数计算服务会调用 HTTP GET/prestop 路径,扩展开发者负责实现相应逻辑以确保完成实例释放前的必要操作,如等待数据库链接关闭,以及上报、更新状态等,如图所示。
减少执行时长,节省费用。例如,偏 I/O 函数可以在一个实例内并发处理请求,减少了实例数,从而减少总的执行时长。 请求之间可以共享状态。多个请求可以在一个实例内共用数据库连接池,从而减少和数据库之间的连接数。
降低冷启动概率。由于多个请求可以在一个实例内处理,创建新实例的次数会减少,冷启动概率降低。 减少占用 VPC IP。在相同负载下,单实例多并发可以降低总的实例数,从而减少 VPC IP 的占用。
新书推荐
Serverless 工程实践系列
评论
【送书福利】《Java面试八股文:高频面试题与求职攻略一本通》
先来唠唠最近粉丝面试回来跟我聊天,基本上都提到一个点,在面试过程中八股文占比很高(八股文70%、项目20%、10%算法)除了一些搞算法突出的厂除外。其实现在很多厂八股都是逐渐深入的方式来问,所以大家在学习的过程中,针对一些重点的内容,最好深入去学习,不然还是比较难应对这种追问式的问题。最近刚好从一位
Java后端技术
0
【每周一课#06】MidJourney应用实战
#AI绘画# #MJ# #文生图#时间:4月24日周三 21:00课程大纲:1、关于AIGC:概念、发展历程、就业前景2、MJ基础认识:如何使用、底层逻辑、MJ与SD优缺点比较3、MJ基础功能介绍:任务指令、后缀参数、图生图、图生文、垫图、局部修改等4、MJ应用场景与变现方向
Python涨薪研究所
0
屏论丨“重温经典”频道走红背后的危与机
屏论今年2月1日,“重温经典”频道正式开播,作为免费向观众提供应看爱看、脍炙人口的经典内容的公益性频道,“重温经典”频道对于“双治理”背景下正在进行电视公共服务属性与商业属性新一轮沉淀的电视大屏而言,意义重要而特殊。从频道开播以来的实际表现来看,的确亮眼。比如春节期间,“重温经典”频道在21个地区收
流媒体网
0
【每周一课#06】MidJourney 应用实战
#AI绘画# #MJ# #文生图#时间:4月24日周三 21:00课程大纲:1、关于AIGC:概念、发展历程、就业前景2、MJ基础认识:如何使用、底层逻辑、MJ与SD优缺点比较3、MJ基础功能介绍:任务指令、后缀参数、图生图、图生文、垫图、局部修改等4、MJ应用场景与变现方向
Python涨薪研究所
0
面试官:MySQL 上亿大表,如何深度优化?
来源:cnblogs.com/YangJiaXin/p/10828244.html背景分析测试实施索引优化后delete大表优化为小批量删除总结前段时间刚入职一家公司,就遇上这事!背景XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要
好好学java
0
AI智能视觉检测技术在工业级测量领域的创新应用--AMB Tube-Q导管数字化测量系统
技术背景在深度学习算法出来之前,对于视觉算法来说,大致可以分为以下5个步骤:特征感知,图像预处理,特征提取,特征筛选,推理预测与识别。早期的机器学习中,占优势的统计机器学习群体中,对特征是不大关心的。深度学习是机器学习技术的一个方面,由人工神经网络提供支持。深度学习技术的工作原理是教机器通过实例学习
机器视觉
0
Excel 黑科技:轻松优化工作薄性能
随着时间的推移,大型工作表可能会收集不必要的格式和元数据,从而降低性能。当数据被删除但基础格式未被删除时,可能会发生这种情况。Excel 现在可以自动检测性能问题并提出解决方法。您还可以随时手动运行检查性能命令来识别和解决性能问题。当我们打开工作簿时,Excel 会自动检查具有不必要格式的单元格。如
PowerBI战友联盟
6
Java版【数据结构与算法】的天花板,收藏好,慢慢看
Java 版数据结构与算法来了,堪称 java 版数据结构与算法的天花板,需要学数据结构与算法的,刷这套就可以了,目录如下,文末附教程地址。基础数据结构-001-二分查找-算法描述基础数据结构-002-二分查找-算法实现基础数据结构-003-二分查找-问题1-循环条件基础数据结构-004-二分查找-
路人甲Java
0