Serverless开发流程及运行原理(下)

简介: Serverless开发流程及运行原理(下)

image.png

浏览器和Nodejs也是事件驱动的,本质上都是将用户的操作抽象为事件,由事件是监听器监听事件,然后驱动程序执行,只是不同技术的驱动模型实现不同。


image.png

  • • 对于Faas平台来说一方面可以通过事件来触发,另一方面可以直接调用API来执行(Faas平台都提供了执行函数的API)
  • • Faas函数的两种调用方式:同步调用和异步调用


调用方式


同步调用

image.png

Faas平台收到函数调用之后会立即给函数分配运行环境来执行函数。

使用函数计算Node.js SDK来同步调用函数

网络异常,图片无法展示
|

这是一个函数同步调用的实例

  • • 其中handler中的x-fc-invocation-type用来表示同步和异步
  • • event是事件对象,使用sdk的时候可以自定义事件对象

同步执行的结果

image.png



异步调用

image.png

异步调用无法直接获取返回结果,适用于运行时间比较长的场景。对于函数计算来说,定时触发器就是异步调用的。

异步调用的结果

image.png

异步调用怎么重试?

Faas平台会默认帮你有限次数的重试,但大部分情况下不能只靠Faas所提供的功能。

对于异步调用,如果你关心调用结果的正确性,可以为函数配置“异步调用目标”,将调用结果发送到消息队列或其他服务中,通过监听消息判断得到异步执行结果。

不管函数是同步还是异步执行的,都会有一个默认超时时间60s,否则对于Faas平台持续运行的函数会一直占用资源无法释放。

如果1分钟内的日志量很大,导致查询时间很长,函数执行时间比如3分钟或者更长

image.png

那么设置超时时间为10分钟,但是运行函数会越来越多。Faas默认只会存在100个运行中的实例,超过之后,事件队列就会等待其他实例执行完毕之后再生成新的函数实例。

对于案例由于函数并发的限制,如果函数执行时间过长,那么使用new Date()获取时间就会有问题


image.png

你以为在12点的时候执行,可能实际在12点10分的时候执行,所以就不能通过new Date来获取当前代码执行时间,而是应用从函数触发器对象当中获取函数被触发执行的时间。


image.png

因为定时触发器是异步调用的,需要为函数设置调用目标,对于异常的调用结果进行处理。不过由于这个问题需要函数并发超过限制的时候才会出现,所以没有第一时间发现问题,为未来埋下隐患。如果这个问题不能解决,那么很有可能处理的数据是不准确的。

那现在知道了函数并发限制是怎么造成的,函数上下文启用是怎么回事呢?这就涉及到函数的生命周期了


生命周期


函数启动过程

image.png

整个函数的运行过程分为4个阶段:下载代码、启动容器、初始化运行环境、运行代码。只有当Faas接收到触发器事件之后才会启动并运行函数。

下载代码

Faas平台本身不存储代码,而是放在对象存储中,需要执行函数的时候从对象存储中将函数代码下载并解压,所以Faas平台对代码包的大小进行限制,通常代码包不会超过50M。

启动容器

Faas会根据函数的配置启动对应的容器,然后使用容器。

初始化运行环境

初始化运行环境,分析代码依赖,执行用户初始化逻辑。初始化入口函数之外的代码等,最后才是运行代码,调用入口函数执行代码。当函数第一次执行的时候会经过完整的四个步骤,前三个过程称为冷启动,最后一个过程称为热启动。整个冷启动流程耗时达到百毫秒级别。函数运行完毕之后,运行环境保留2-5分钟(和具体云厂商有关)。

如果这段时间内函数需要再次执行,那么Faas平台就会使用上次的运行环境,这就是执行上下文重用。

函数的这个过程也被称为热启动,热启动的耗时完全是启动函数的耗时。

当一段时间内没有请求的时候,函数运行环境就会被释放,直到下次执行到来,直接从冷启动开始初始化。

函数的请求示意图

image.png

请求1和请求3是冷启动,请求2是热启动。函数执行完毕之后销毁运行环境,虽然对首次函数执行的性能有损耗,但却极大的提高了资源利用效率,只有在需要执行代码的时候需要初始化运行环境,消耗硬件资源。

如果函数每分钟都执行,则函数几乎都是热启动的,也就是会重复使用之前的执行上下文。

执行上下文就包括函数的容器环境和入口函数之外的代码,但是在实时处理日志的案例中就会出现问题了,由于执行上下文重用所以代码中除入口函数handler之外的代码都会在函数第一次运行的冷启动中执行,后面函数执行的时候都会使用第一次函数执行时已经初始化完毕的值。

这也就是为什么函数每次处理得到的都是同一份数据。

解决这个问题的方法就是让处理时间不被初始化就可以了,将处理时间的代码放在入口函数当中。




相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
运维 负载均衡 Serverless
函数计算产品使用问题之在同一地域同一时刻最多可以同时运行多少个函数实例
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
运维 Serverless 测试技术
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
229 10
|
运维 Serverless 测试技术
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
本方案基于通义大模型的通义灵码,提供代码生成、补全、优化及单元测试生成等能力,提升编码效率和质量。结合云效和函数计算 FC 进行代码管理、持续集成、部署发布,加速项目交付,为开发者提供智能编码、CI/CD、部署上线体验,加快产品迭代速度。
|
存储 缓存 监控
函数计算产品使用问题之调用sd生图时,怎么保证高并发场景正常运行
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
Kubernetes 安全 Serverless
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
Kubernetes云原生问题之在Serverless Container中,Pod运行如何解决
234 6
|
消息中间件 运维 Serverless
函数计算产品使用问题之如何限制同一时间只能运行一个函数实例
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
227 8
|
存储 Serverless 文件存储
函数计算产品使用问题之如何让SDXL模型在函数计算FC中运行并生成图像
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
192 2
|
存储 缓存 Serverless
函数计算操作报错合集之如何处理运行时报错:“Function time out after 600 seconds”
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
290 1
|
Serverless Go C语言
函数计算产品使用问题之如何在Golang运行时环境中解决glibc依赖问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
404 1
|
人工智能 运维 安全
函数计算产品使用问题之设置了每40分钟运行一次任务,没有按照预期执行,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
200 0

热门文章

最新文章

相关产品

  • 函数计算