《2021 阿里云可观测技术峰会演讲实录合辑(上)》——五、 阿里云Serverless可观测实践【下】

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 《2021 阿里云可观测技术峰会演讲实录合辑(上)》——五、 阿里云Serverless可观测实践【下】

接上篇:

https://developer.aliyun.com/article/1222679?spm=a2c6h.13148508.setting.28.4f394f0em1x0Jq

2. 函数计算内置可观测能力


image.png


上图展示了函数计算所有的可观测能力,由四大部分组成,分别是指标、日志、调用链、APM。


指标:与云监控集成,在函数计算的监控中心上提供云监控的指标。为了兼容SLS用户与Grafana用户的体验,也提供了SLS Dashboard与Grafana Dashboard的解决方案

日志:与日志服务无缝集成,提供了函数日志、请求日志、实例日志等

调用链:与阿里云的链路追踪产品进行了无缝集成,函数计算会默认上报系统内部关键链路的时间。并且将调用链的上下文信息传给用户的runtime,用户可以在函数里基于Jaeger或OpenTelemetry进行自定义埋点

APM:与阿里云的AMS产品集成,用户可查看runtime指标,比如JVM的GC数据、MySQL的连接情况等。考虑客户更喜欢使用三方SaaS的可观测产品,我们也对此提供了集成方案。


image.png


函数计算主要通过数据采集、数据存储、数据处理和数据展示为用户呈现可观测能力。用户的业务代码在函数计算的执行引擎中运行,执行引擎会根据用户设置的函数内存创建不同规格的函数实例,用户函数最终在不同的函数实例中执行。执行引擎为异构的,底层支持ECS与神龙裸金属执行环境,对应的函数实例分别是Docker Container与安全容器。

 

执行引擎的内部实现了agent,负责函数实例生命周期的管理、函数实例健康状态的监测、观测数据的收集处理与上报。


数据处理侧具有三个特点

无侵入:观测数据采集不占用函数实例的CPU内存资源,因为agent是部署在函数实例之外,占用的是函数计算系统的资源。用户无需关心如何处理的,也不占用用户资源,用户无感知,对函数实例也没有侵入

支持异构的执行环境:在不同类型的执行引擎中,日志指标调用链的处理会有一定区别,我们也对这些区别进行了适配,分别适配了ECS执行环境与裸金属环境

支持多租:ECS环境不存在多租的问题,但神龙裸金属的执行环境里,用户是安全容器级别的隔离,执行环境里会有不同用户的函数实例,同一个agent需要支持不同用户实例的日志、指标与调用链的收集。

 

我们最终的目标是为了提供开箱即用的可观测平台,数据存储到用户对应的云产品后,需要提供处理数据平台。我们基于Serverless架构实现了数据处理平台,前端需要查看数据时,由 Serverless架构的Web API从用户云产品里获取原始数据,并进行聚合、格式转化后传递给控制台。控制台上有三个函数,分别对指标、日志与调用链进行处理。

 

经过层层处理后,最终实现了开箱即用的完整统一的可观测平台。平台上罗列了非常丰富的、多层次、多维度的指标上,有集群/服务/函数指标、请求实例级别的指标、计量指标、函数级别的日志、实例级别日志、请求日志、实时日志等,可以实时查看tail日志,也可以根据grab对日志进行搜索。

 

此外,函数计算会自动上报系统内部的调用链,比如冷启动时间、调度时间,可以串联上游函数计算,识别开源调用链的header,如果用户将上游的header传进函数计算即可基于用户的调用链来创建子调用链;也可以串联下游函数字段,将调用链的上下文传给用户的runtime并创建自定义的调用链,比如创建访问数据库的调用链或写本地数据的调用链等。


image.png


每个执行引擎里有agent负责实例生命周期的管理、观测数据的采集与上报。每个agent里都有一个container manager负责管理函数实例生命周期。创建新的函数实例时,container manager会记录一份函数实例的元数据,并分别启动指标采集、日志采集与调链采集的协程。每个函数实例都有自己的协程,各个函数实例的采集互不影响。实例销毁时,观测协程也会随之关闭

 

以上设计使得数据采集具有如下几个特点:

 

采集函数调用产生的Metrics、Logs、Traces

不侵入用户runtime,不占用用户资源

支持多租,能够并发收集不同用户的数据

支持不同执行环境

数据采集随实例生命周期启停。

 

指标采集主要是请求级别的指标与实例级别的指标。其中请求级别指标包括请求执行时间、错误类型、调用类型、资源类型等;实例级别指标包括实例CPU、内存、网络流量等。

 

日志采集上,收集函数输出到标准输出的日志,包括函数日志和实例日志。调用链基于 OpenTracing 的协议自动上报系统关键链路的耗时、冷启动耗时、异步调用的队列积压耗时等。


image.png


用户登录控制台查看数据,前端收到了用户查看数据的请求后,需要由Web API为前端返回数据。Web API负责从用户的云产品里获取原始数据,再到业务逻辑里处理这些数据,然后将它以与前端约定的格式返回给前端。我们将Web API的处理逻辑移至函数计算上,充分享受了Serverless架构的红利。

 

此外,架构可实现毫秒级扩容,可以轻松应对突发流量。业务开发者只需关注业务逻辑的实现,无需关注底层用了多少台计算资源,也无需维护服务器,开发运维效率更高了。

 

为了保障服务的可用性与可靠性,我们在国内外多个区域进行了部署,尽可能避免跨洋网络访问慢的问题。


image.png


最终,我们为用户提供了开箱即用的统一可观测平台,提供了非常丰富的函数级别、服务级别、集群级别、请求级别以及实例级别的指标。指标的聚合粒度有秒级、分钟级、小时级。平台尽可能地将函数计算内部的指标暴露给客户,让客户更信任底层的执行环境。还提供了请求粒度的监控、请求的调用结果、请求的执行时间、内存使用量、日志、调用链等。

 

在请求调用链里,可以看到函数计算系统上报的调用链、调度的时间、进行调度计算资源的时间、系统冷启动的时间、下载代码/下载自定义镜像的时间、启动执行环境的时间以及真正执行用户代码invocation的时间等,以上指标都由系统自动上报,用户无需进行任何操作,开箱即用。


image.png


其次,平台兼容了传统开发者的开发习惯,提供了实例级别的监控、实例级别的指标,可以查看CPU内存、网络流量、请求数等;也可以查看函数维度的聚合,比如函数的CPU情况、实例数量、每个实例的指标,提供了实例级别的日志,还可以登录到实例里,让用户对自己的执行环境更有信心。

 

最后,数据开放,协议开源部分。FC将所有观测产品都存入用户的云产品里,实现了数据开放;链路追踪遵循开源的OpenTracing协议,可以串联上游,识别上游开源的协议头,也可以连接下游,将trace的上下文传入用户runtime。用户可以基于当前调用链根据Jeager或OpenTelemetry进行自定义埋点。

 

上图右下角为MNS Trigger的示例。上游用户记录了Publish Message与在MNS队列里等待的时间。到了函数计算后,函数计算自动记录了调度时间、在函数计算的异步消息队列里堆积的时间以及冷启动的时间。然后将调用链传给下游,用户埋点了自定义的调用链,即可看到完整的端到端的调用链。此时如果有一个请求端到端的时间很长,通过调用链即可明确时间花在哪里,能够进行更有针对性的排查与定位。

 

下文将通过两个demo来展示可观测能力。


Demo1:函数错误问题定位


image.png


从监控大盘可见函数有41个错误,点击“41”可查看错误列表页面,如下图。


image.png


先查看服务级别的错误,再查看函数级别的错误数,最后即可定位到出错的请求。


image.png


点击详细错误可以查看其请求日志刷新。处理过程从指标下钻到请求,再到日志,最终实现快速问题定位。

Demo2:冷启动耗时分析


image.png


从监控大盘发现某请求执行时间特别长,但业务逻辑并不复杂,预计为百毫秒级别,而端到端的请求却执行了7秒。


image.png


点击查看其调用链,发现函数执行时间只有170毫秒,但遇到了冷启动。其中下载代码花费将近3秒,函数实例启动花费4秒多,最终总共花费7秒。

 

可以先看能否缩小代码包,减少下载代码的时间。另外,优化启动时的逻辑,减少函数启动的时间。如果对冷启动时间特别敏感,也可以使用预留实例来完全规避冷启动。平台还给出了冷启动优化的最佳实践,用户可以基于最佳实践进行自定义配置。

 

1. 函数计算对开源和可观测能力的探索


image.png


大多数可观测服务提供商的SDK都是后台定时采集数据,批量发送。而FC实例在请求执行完成后会立即冻结实例,下次请求来时才解冻。如果发送时间刚好处于实例冻结时期,则会导致数据发送失败。

 

FC Service代表函数计算系统,这里主要是函数的执行引擎。Function Runtime是函数实例中的runtime。实例启动之后会先调用Initialize接口,用户可以在其中做自定义初始化操作,比如建立数据库、初始化全局配置、启动ARMS的采集,初始化结束后执行Invoke逻辑,Invoke 结束后系统会立即冻结函数实例。如果此时后台的Flash interval发送观测数据,则必定发送失败;如果后台的观测数据发送时间刚好落在实例的活跃时间内,则可发送成功。

 

不做任何处理的情况下,运气好可发送成功,运气不好则发送失败。函数实例的生命周期由函数计算系统控制,用户不可见,因此用户无法预知这些观测数据发送是否能成功,这会导致数据的缺失与可观测功能不稳定。

 

为了解决上述问题,函数计算扩展了编程模型,允许用户监听实例的生命周期,用户可以自己实现冻结和解冻的函数逻辑。在Freeze前会告诉用户将执行Prefreeze代码,可以在Prefreeze里Flush观测数据;在回收销毁函数实例前,会执行用户的Prestop函数,用户可以在Prestop里关闭连接,停止数据采集。基于以上技术,可观测数据即可稳定发送。


image.png


也是基于以上技术,我们内部得以与ARMS APM进行集成,也提供了集成三方SaaS厂商如NewRelic的解决方案。

 

上图列出了FC目前已经应集成或已经提供解决方案的产品与技术,我们也将在此方向进行持续探索。

 

今天的分享就到这里,谢谢大家。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
18天前
|
弹性计算 关系型数据库 Serverless
函数计算驱动多媒体文件处理:高效、稳定与成本优化实践
本次测评的解决方案《告别资源瓶颈,函数计算驱动多媒体文件处理》展示了如何利用阿里云函数计算高效处理多媒体文件。文档结构清晰、内容详实,适合新客户参考。方案提供了一键部署与手动部署两种方式,前者简便快捷,后者灵活性高但步骤较多。通过部署,用户可体验到基于函数计算的文件处理服务,显著提升处理效率和系统稳定性。此外,测评还对比了应用内处理文件与函数计算处理文件的不同,突出了函数计算在资源管理和成本控制方面的优势。
22675 19
|
2天前
|
消息中间件 关系型数据库 Serverless
【阿里云】一键部署创建函数计算服务以处理多媒体文件
通过阿里云的一键部署功能,轻松创建函数计算服务以处理多媒体文件。首先选择地域并配置资源栈名称及其他必要参数,如登录凭证、实例类型及数据库配置。过程中可能需开通相关服务如消息服务MNS,并确保账户有足够的余额。完成配置后,系统自动创建资源栈。当状态显示“创建成功”即部署完毕。最后,通过提供的URL及凭据访问应用,上传PPTX文件进行处理,并下载处理后的结果。
27 4
|
12天前
|
运维 Kubernetes Serverless
Serverless Argo Workflows荣获信通院标杆实践案例,引领大规模离线任务处理新方法
阿里云容器服务Serverless Argo Workflows大规模离线计算工作流平台荣获2024信通院Serveless实践标杆案例。本文介绍其应用场景、平台特性以及领域实践。
|
7天前
|
运维 物联网 关系型数据库
关于阿里云Serverless 框架的产品体验
阿里云Serverless框架简化运维,实现5分钟一键部署。弹性伸缩、按需付费等特点让企业专注业务创新,降低成本与运维负担。适用于Web应用、数据分析、物联网等多种场景,支持快速迭代与多语言开发。尽管面临资源配额、网络配置等挑战,其竞争力在于成本节约、功能集成与性能优化,尤其适合追求高效开发与弹性扩展的团队。
29 1
|
13天前
|
关系型数据库 Serverless 分布式数据库
阿里云 Serverless 高可用架构
阿里云的《卓越效能,极简运维,Serverless高可用架构》解决方案提供了全托管服务、自动扩展、高可用性、无缝集成以及内置安全等核心功能。该方案通过免除底层基础设施的管理,允许用户专注于应用程序开发,同时确保应用的稳定运行和资源的有效利用。 **核心功能简介**: - **全托管服务**:用户无需关心底层硬件,由阿里云负责维护和扩展计算资源。 - **自动扩展**:根据业务需求自动调整资源,确保应用在高峰期有足够的计算能力,低谷期则节省成本。 - **高可用性**:多地域和多可用区部署,实现故障自动切换,确保业务连续性。 - **无缝集成**:与阿里云的其他服务(如数据库、消息队列等)深度
|
18天前
|
编解码 弹性计算 Serverless
解锁多媒体处理新纪元:阿里云函数计算,一键驱动高效、灵活、成本优化的文件处理解决方案!
【8月更文挑战第2天】随着云计算的发展,高效灵活的多媒体处理成为必需。阿里云函数计算提供全托管服务,用户仅需上传代码,平台自动配置资源,支持毫秒级弹性伸缩。与对象存储服务集成,实现视频转码、音频提取及图片压缩等功能,按需付费降低成本。示例展示了基于Python的视频转码函数,体现其在多媒体处理领域的强大潜力和优势。
26 10
|
15天前
|
Cloud Native Serverless 云计算
云原生时代的技术演进:从微服务到Serverless
在数字化转型的浪潮中,云原生技术正成为推动企业IT架构现代化的重要力量。本文将探讨云原生技术的关键组成部分—微服务与Serverless架构—如何助力企业实现敏捷开发和高效运维。通过深入分析这两种架构模式的优势与挑战,我们旨在为读者揭示云原生环境下的最佳实践和未来发展趋势。
|
1天前
|
缓存 JavaScript Serverless
阿里云云效产品使用合集之如何在Serverless Devs阶段指定Node.js版本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4天前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
32 0
|
4天前
|
Cloud Native 安全 云计算
云原生技术的未来:探索服务网格和无服务器架构
随着企业数字化转型的深入,云计算已成为推动业务创新的核心力量。本文将深入探讨云原生技术的最新发展趋势,重点分析服务网格和无服务器架构如何重塑云计算的未来。通过实际案例和技术解析,揭示这些前沿技术如何解决现代应用部署的复杂性,提高系统的可伸缩性和弹性。文章旨在为读者提供云原生领域的深度见解,并激发对云技术未来发展的思考。
21 0

相关产品

  • 函数计算