Serverless 的日志记录以及效率问题

前言

为了满足云计算时代对于高效、安全的需求,Serverless架构应运而生。它将应用程序的构建、运行和维护交由云供应商管理,使得开发人员可以更加专注与应用程序的开发上。特别的,Serverless下的Lambda函数架构,在无需考虑服务器状态,且只收取实际运行资源付费的基础上,有着极高的稳定性和可扩展性。然而,Serverless架构也存在着一些问题,其中就包括了日志记录和效率问题。

Serverless的日志记录

在Serverless架构中,日志记录往往被认为是一项挑战。由于Serverless应用程序的运行环境是分布的、分离的,并且监控和管理都是由云供应商负责的,因此开发人员往往无法直接访问具体的物理网络基础设施。这种情况下,开发人员往往只能通过API网关或是函数运行平台提供的日志记录工具,来获取他们的应用程序运行信息,如事件日志、错误日志等等。

然而,为了确保程序健康运行,有效的日志记录是不可缺少的。下面是一些常见的Serverless日志记录类型和工具:

事件日志

事件日志是指 Serverless 应用程序在运行过程中产生的各种事件记录,包括调用API网关、函数执行、云资源创建和更新等等。这些事件日志对于检测应用程序的运行效率,调试和分析程序问题都有着重要作用。它们通常存储在AWS CloudWatch Logs、Azure Application Insights或Google Stackdriver这样的日志服务中。

错误日志

错误日志是指系统或应用程序中出现的错误记录。当服务器状态良好时,错误日志可帮助开发人员迅速发现程序中的问题,并且随时修复它们。Serverless应用程序中的错误日志也存储在日志服务中,并且通常由云服务提供商负责处理和分析。

性能日志

性能日志是指Serverless应用程序中发生的性能问题记录,如CPU利用率、内存利用率和网络延迟等。这些日志帮助开发人员了解系统的负载情况和Performance bottlenecks。这些日志也存储在日志服务中。同时,AWS Lambda和Azure Function也提供了内置的性能日志工具。

Serverless的效率问题

虽然Serverless架构是一个高效、安全、自动化的方法来运行应用程序,但由于底层网络基础设施的透明性,开发人员需要深入了解当前服务器的运行状态和资源消耗等信息,来提高应用程序的运行效率。Serverless架构中的效率问题主要体现在以下几个方面:

冷启动问题

在Serverless应用程序每次运行时,系统都要分配一个新的容器来托管程序。这个过程称为冷启动,通常需要100毫秒至几秒钟的时间。虽然较小的效率问题,不过对于标准Web请求而言,每个请求都可能重复触发冷启动,因此对于某些应用程序而言,冷启动可能会成为性能瓶颈。

以下为Python的Lambda函数例子,进行冷启动的性能测试:

在单次请求下,cold-start的耗时为 3.70s、4.12s 和4.13s 等,这证明了OpenFaaS默认3秒预热策略导致的性能瓶颈。

为了缓解冷启动的效率问题,开发人员可以使用缓存工具,如Cloudflare Workers,来缓存大部分应用程序代码,从而避免冷启动。

运行时问题

在Serverless应用程序中,持续时间(Duration)是另一个运行时间可预测的重要因素。Lambda限制执行时间最长5分钟,而Azure Function和Google Cloud Function则只限制执行时间最长9分钟和10分钟。因此,开发人员需要仔细规划应用程序,以确保程序正确地完成任务。

并行处理问题

所有Serverless平台都包含并行运行的机制,通常由负载均衡器和容器编排器管理。不过,由于Serverless平台的动态调度特性,开发人员很难准确地了解同一应用程序的多个实例在运行时的状态。这使得运行效率的提升成为一项难以实现的任务。

对于并行处理问题,开发人员可以利用AWS Lambda等平台自带的数据库工具来存储和检索数据,从而提高并发操作的效率。

总结

Serverless架构带来了许多好处,如更高效的应用程序管理、更好的自动扩展和更高的安全性。开发人员需要了解日志记录和效率问题,并采取措施,来优化应用程序的运行效率,获得更好的性能。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652bb5ac7d4982a6ebd9558c


纠错
反馈