简介: 函数计算可观测性经历了 1.0 -> 2.0 的发展,从闭门造车的可观测发展成开源的可观测,从平台的可观测发展为开发者的可观测,从FaaS Only 的可观测演进成了云原生的可观测。

作者:夏莞

背景

Serverless 将成为下一个十年云的默认编程范式

随着 Serverless 概念的进一步普及,开发者逐渐从观望状态进入尝试阶段,越来越多的企业用户开始将业务迁移到 Serverless 平台。在阿里集团内部,淘宝、飞猪、闲鱼、高德、语雀等核心功能稳步落地,在阿里集团外部,新浪微博、世纪联华、石墨文档、TPLink、蓝墨云班课等各行各业的企业也纷纷解锁 Serverless 使用的不同场景。Serverless 正在成为成为下一个十年云的默认编程范式。

更多案例请参考 函数计算用户案例

Serverless 降本增效免运维的特性为开发者带来了实打实的好处:基于函数计算的 Serverless 方案为蓝墨节省了 60% 左右的 IT 成本,为石墨文档节约了 58% 的服务器成本;提升码隆科技的开发效率,实现两周内功能上线;平稳支撑负载的波峰波谷相差 5 倍以上的新浪微博,每天轻松处理数十亿请求。

广告时间:欢迎加入云原生Serverless 团队(函数计算,Serverless工作流,Serverless应用引擎),以公共云、集团、开源社区三位一体的方式打造业界领先的Serverless 产品体系。职位需求见 JD,招聘长期有效,有兴趣的同学可以联系本文作者或 @Chang, Shuai(shuai.chang)。

可观测性成为 Serverless 发展的绊脚石?

随着 Serverless 的深入使用,开发者逐渐发现 Serverless 架构下的问题定位比传统应用更加困难,主要原因如下:

  • 组件分布化:Serverless 架构的应用往往粘合多个云服务,请求需要流经多款云产品,一旦端到端延时变长或表现不符合预期,问题定位十分复杂,需要依次去各个产品侧逐步排查。
  • 调度黑盒化:Serverless 平台承担着请求调度、资源分配的责任,实时弹性扩容会带来不可避免的冷启动,Serverless 的资源伸缩是无需开发者参与也不受开发者控制的。冷启动会影响端对端延时,这次请求有没有遇到冷启动,冷启动的时间都消耗在哪些步骤,有没有可优化的空间都是开发者急于知道的问题。
  • 执行环境黑盒化:开发者习惯于在自己的机器上执行自己的代码,出了问题登录机器查看异常现场,查看执行环境的 CPU/内存/IO 情况。面对 Serverless 应用,机器不是自己的,登也登不上,看也看不了,开发者眼前一片漆黑。
  • 产品非标化:在 Serverless 场景下,开发者无法控制执行环境,无法安装探针,无法使用开源的三方监控平台,调查问题的方式不得不发生改变,传统的调查问题经验无法施展,非常不顺手。

函数计算是阿里云的 Serverless 产品,在过去的一年,函数计算团队为了更好地回答以上问题做了很多努力。

本文主要介绍函数计算在可观测性上的尝试与函数计算可观测性现状。

Serverless 下可观测性

可观测性是通过外部表现判断系统内部状态的衡量方式。

--维基百科

在应用开发中,可观测性帮助我们判断系统内部的健康状况。在系统平稳运行时,帮助我们评估风险,预测可能出现的问题。当系统出现问题时,帮助我们快速定位问题,及时止损。

一个好的可观测性系统要帮助用户尽可能快地发现问题、定位问题并且端到端地解决问题。

在 Serverless 这种免运维的平台体系中,可观测性是开发者的眼睛,没有可观测,何谈高可用?

可观测性 1.0

图1:可观测性基础

可观测性主要包含三个部分:日志、指标、链路追踪。

和几乎所有 FaaS 产品一样,函数计算(FC)在商业化之初就支持了函数日志和指标的查看。

  • 函数日志

用户在 FC 配置 SLS 的 Project 和 Logstore,FC将函数打到 stdout 的日志转存到用户的 Logstore中。用户可以通过 SLS 控制台查看函数日志,并借助 SLS 的能力对日志进行分析和聚合。

  • 基本指标

FC 将指标日志推送到云监控,通过云监控提供函数调用数/错误数/函数延时/函数内存等基本指标。

函数日志和基本指标是应用的听诊器,虽然朴素简陋,却也能帮助用户发现问题,定位问题。

即使出现开发者无法排查的问题,在用户量不那么大的年代,开发同学可以为用户提供贴身服务,结合后台日志帮用户定位问题。

函数日志和指标使用详细信息请参考 配置并查看函数日志监控指标

可观测性 2.0 -- 云原生的可观测

随着 Serverless 的发展,越来越多的场景在 Serverless 落地,使用规模越来越大,产品架构越来越复杂,应用听诊器的可观测性 1.0 已经不能满足各行各业开发者的监控诉求。这种近乎黑盒的执行环境给开发者带来了强烈的距离感与不信任感。

开发者需要掌控自己的应用,想要知道每一个请求在函数计算经历了怎样的历程,想要看看端到端的延时长是不是因为冷启动,想要查看函数实例的执行环境,想要在请求出现异常时第一时间定位问题,想要复用熟悉的开源观测平台。

在面对这些需求时,团队内部也经过了长时间的激烈讨论,一部分同学认为我们应该支持这些需求,另一部分同学则认为这些需求某种程度上与 Serverless 本质相违背,Serverless 就是要屏蔽底层的计算资源,用户不需要关心底层计算资源的情况。另一方面我们暴露了这些指标有什么用呢,用户就算看到了有冷启动,看到了系统时间消耗,看到了底层实例的 CPU,用户又不能有任何实质操作,这些指标真的意义吗?这两种观点争论不休,而我,是坚定的反对者。

后来团队搬到了 EFC,每天都要等待着那不知什么时候会来的电梯(输入你要去的楼层,去对应的电梯安静地等待,看不到电梯目前所在楼层)。电梯告诉我们,你就在这里等哦,我肯定会来的,但是我现在到了哪层,我什么时候下来你大可不必知道,你知道了也没用,我的这个调度肯定是最优的,你要相信专业电梯的调度算法。可是,我怎么能相信你呢?

于开发者而言,函数计算也是那不知什么时候会来的电梯吧,我们和开发者说您的请求我们一定会稳定执行的,您的执行环境一定很健康,请求过多我们会自动扩容的,但是当前实例的监控指标,我什么时候扩容您大可不必知道,我们的调度肯定是最优的,您要相信专业研发团队的调度算法。同样的,开发者又怎么相信我们呢?

Serverless 的可观测性不单单要帮助开发者排查问题,也要逐步揭开 Serverless 那层神秘的面纱,赢取开发者对 Serverless 的信任。

于是有了函数计算可观测性 2.0,我们希望可观测性 2.0 可以成为应用的心电图。

图2:函数计算可观测性现状

  • 为了回答请求在函数计算的生命历程,串联分布式系统的上下游服务,拥抱开源可观测能力,我们集成了 OpenTracing,支持链路追踪。
  • 为了暴露系统状态,提供应用级别监控,我们集成了 ARMS(Java),内置了 APM 能力。
  • 为了加快端到端定位问题的速度,我们支持了请求级别指标(FC Insights),发布了监控中心,问题发现/调查一站式解决。
  • 为了兼容开发者已有的用户体验,我们拥抱开源,集成 OpenTracing,支持 Grafana Dashboard;我们支持三方监控平台,实现代码几乎零改造接入APM 监控系统。
  • 为了兼容传统开发者的可观测体验,支持探针安装,我们拓展了编程模型,支持函数LifeCycle,为集成三方监控提供可能。

图3:函数计算兼容开源可观测能力

相比于自己发明创造 FaaS 可观测性新体验,函数计算兼容开源可观测能力,集成 Jaeger,支持 Grafana 大盘,也支持以非常小的改动接入 New Relic 等优秀三方监控平台。函数计算是首家兼容开源、拥抱容器生态和云原生开发者的 FaaS 提供商,可观测体验的平滑迁移支撑应用在容器和 Serverless 平台的平滑迁移。

集成OpenTracing,支持链路追踪

FC 与链路追踪服务集成,为开发者提供了完整的调用链路还原、调用量统计、链路拓扑分析、冷启动定位等工具。帮助开发者快速分析和诊断分布式架构下的性能瓶颈。

FC 链路追踪具有以下特点:

• 拥抱开源:完全兼容OpenTracing 协议,没有附加学习成本;

• 主动记录:上报请求在函数计算中消耗的端对端时间;

• 调度透明:暴露代码准备时间与实例启动时间,是首个暴露冷启动延时与具体时间消耗的 FaaS 产品;

• 承上启下:串起上下游应用,既可以通过span context 与上游应用连接,又将 span context 传入函数,连接下游服务。

图4:链路追踪链路示例

图5:链路追踪综合能力详情

集成 ARMS,内置 APM 能力

FC 无缝对接 ARMS 应用监控,开发者只需为函数新增一个环境变量即可开启 APM 应用监控功能,ARMS 探针以对代码无入侵的方式监测应用性能,提供应用级别的可观测性,包括函数实例的 CPU、内存指标、Java 虚拟机指标、代码 Profiling 信息、SQL 查询等函数实例的指标。

图6:ARMS 示例

发布监控中心(Insights),问题发现调查一站式解决

FC 支持请求级别指标,通过为用户每个请求多打一条指标日志的方式为请求装上摄像头。通过请求级别指标,用户可以清楚地看到请求的执行时间、使用内存,是否异常、错误类型、冷启动情况,traceID 等信息。也可以基于请求级别指标串联起所有的可观测性能力。

监控中心则是 FC 可观测性能力的集大成者,监控中心集成了 Metrics、Logs、Tracing的能力,可以在一个站点完成预览指标、查看日志、分析链路的能力,争取做到问题发现调查一站式解决。

监控中心具有如下特点:

  • 多维度:支持 Region、Service、Function、Qualifier、Request 多维度的指标,展示各个维度下的调用数和错误分布;
  • 多层次:集成 Metrics、Logs、Tracing 的能力,全方位多层次对应用进行监控;
  • 全链路:结合指标、日志、链路等信息,层层递进,抽丝剥茧,真正做到可以在一个站点发现问题,定位问题并解决问题。

图7:监控中心示例

扩展编程模型,集成三方监控

函数实例的生命周期完全由平台控制,用户无法控制实例的启动与回收,也不感知实例的暂停与重启,这就使得在函数计算上执行除主线程外的背景线程格外困难。监控探针就是诸多重要的背景线程的一种。

FC 扩展了编程模型,发布 Runtime LifeCycle 功能,Runtime LifeCycle 会监听函数实例生命周期事件,允许函数实例在暂停和回收前回调用户的函数逻辑。这一功能的发布使 FC 集成三方 APM 监控成为可能。用户只需要在实例暂停前将采集的指标发出去、在实例回收前将内存中的数据清理掉就可以在 APM 平台上实时地查看监控指标了。

图8:Tingyun APM 示例

图9:NewRelic APM 示例

总结

函数计算可观测性经历了 1.0 -> 2.0 的发展,从闭门造车的可观测发展成开源的可观测,从平台的可观测发展为开发者的可观测,从FaaS Only 的可观测演进成了云原生的可观测。

作为首家兼容开源可观测、拥抱容器生态和云原生开发者的 FaaS 提供商,函数计算也将更有实力实现开发者业务的平滑迁移。

未来规划

FC 可观测性相比于一年前前进了一小步,从黑盒的可观测演进成了微弱烛光的可观测,但距离 “Serverless 应用白盒化” 的目标还有着很长的路要走。我们希望能够兼容开发者的监控体验,支撑着用户平滑地放心地将业务迁到 Serverless 上来。

接下来我们会继续投入做以下事情:

  • 完善监控中心,支持报警配置,预警异常指标;
  • 提供实例级别指标,做到代码问题可定位,环境现场可追溯;
  • 集成开源项目,集成 Prometheus,Opentelemetry,配置 Grafana 大盘;
  • 丰富指标内容,目前还有一些指标是不好透出的,没有暴露的,我们要逐步都暴露出来;

希望函数计算的可观测性成为一盏灯,照亮每一个 Serverless 应用。

本文为阿里云原创内容,未经允许不得转载。

Serverless 可观测性的过去、现在与未来的更多相关文章

  1. Serverless 的初心、现状和未来

    作者 | 不瞋 导读:Serverless 是如何产生的?当前有哪些落地场景?Serverless 的未来又将如何?本文分享了阿里云高级技术专家不瞋对于 Serverless 的看法,回顾其发展历程, ...

  2. 开箱即用,Knative 给您极致的容器 Serverless 体验

    作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本.结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大 ...

  3. 从零入门 Serverless | Knative 带来的极致 Serverless 体验

    作者 | 冬岛 阿里巴巴高级技术专家 Serverless 公众号后台回复"knative",即可免费下载<Knative 云原生应用开发指南>电子书! 导读:Serv ...

  4. Serverless Kubernetes 和 Serverless on Kubernetes 的区别

    什么是 Kubernetes? Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化. 什么是 Serverless ? 无服务器是一种云原 ...

  5. 基于消息队列 RocketMQ 的大型分布式应用上云最佳实践

    作者|绍舒 审核&校对:岁月.佳佳 编辑&排版:雯燕 前言 消息队列是分布式互联网架构的重要基础设施,在以下场景都有着重要的应用: 应用解耦 削峰填谷 异步通知 分布式事务 大数据处理 ...

  6. 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...

  7. Serverless:这真的是未来吗?(一)

    原文 | https://www.pulumi.com/blog/is_serverless_the_future_part_1/ 作者 | Lee Briggs & Piers Karsen ...

  8. 从零入门 Serverless | 函数计算的可观测性

    作者 | 夏莞 阿里巴巴函数计算团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

  9. DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?

    摘要:在未来,云上交付模式会逐步从Serverful为主转向Serverless为主. 本文分享自华为云社区<DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范 ...

  10. Serverless:这真的是未来吗?(二)

    原文 | https://www.pulumi.com/blog/is_serverless_the_future_part_2/ 作者 | Lee Briggs & Piers Karsen ...

随机推荐

  1. Linux高级IO

    readv.writev API: #include <sys/uio.h> ssize_t readv(int fd, const struct iovec* vector, int c ...

  2. 23_FFmpeg像素格式转换

    简介 前面使用 SDL 显示了一张YUV图片以及YUV视频.接下来使用Qt中的QImage来实现一个简单的 YUV 播放器,查看QImage支持的像素格式,你会发现QImage仅支持显示RGB像素格式 ...

  3. c初探:数据类型、数组、内存布局、指针

    c初探:数据类型.数组.内存布局.指针 目录 c初探:数据类型.数组.内存布局.指针 1.基本数据类型 2.格式化 include <stdio.h> 输出控制符 3.数组与内存布局 动态 ...

  4. 三维模型OBJ格式轻量化的纹理压缩和质量关系分析

    三维模型OBJ格式轻量化的纹理压缩和质量关系分析 三维模型的OBJ格式通常包含纹理信息,而对纹理进行轻量化压缩可以减小文件大小和提高加载性能.然而,在进行纹理压缩时需要权衡压缩比率和保持质量之间的关系 ...

  5. 三维模型OBJ格式轻量化压缩并行计算处理方法浅析

    三维模型OBJ格式轻量化压缩并行计算处理方法浅析 三维模型的轻量化是指通过一系列技术和算法来减小三维模型的文件大小,以提高模型在计算机中的加载.渲染和传输效率.并行计算是利用多个计算单元同时执行任务, ...

  6. 记录--h5调用手机摄像头踩坑

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 背景 一般业务也很少接触摄像头,有也是现成的工具库扫个二维码.难得用一次,记录下踩坑. 2.调用摄像头的方法 2.1. input ...

  7. 开发进阶系列:Java并发之从基础到框架

    一  线程基础 1.synchronized取得的锁都是对象锁,哪个线程执行synchronized修饰的方法,哪个线程就获得这个方法所属对象的锁.不同对象不同锁,互不影响. 另一种情况是static ...

  8. java实战字符串3:反转每对括号间的子串,多个括号嵌套时,逐层反转

    题目描述 给出一个字符串 s(仅含有小写英文字母和括号).请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果. 注意,您的结果中 不应 包含任何括号. 解答要求时间限制:10 ...

  9. defer 延迟调用【GO 基础】

    〇.前言 在 Go 语言中,defer 是一种用于延迟调用的关键字. defer 在 Go 语言中的地位非常重要,它是确保资源正确释放和程序健壮性的关键字. 本文将通过示例对其进行专门的详解. 一.d ...

  10. JDK14性能管理工具:jmap和jhat使用介绍

    目录 简介 jmap clstats finalizerinfo histo dump jhat 总结 简介 我们在写代码的过程中,经常会遇到内存泄露的问题,比如某个集合中的对象没有被回收,或者内存出 ...