Serverless 场景排查问题利器 : 函数实例命令行操作
简介:实例命令行功能的推出希望能消除用户使用 Serverless 的“最后一公里”,直接将真实的函数运行环境展现给用户。
背景介绍
全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力,在 Serverless 落地的过程中,遇到的一个很大的挑战是 Serverless 平台如何给予开发者足够的安全感。让开发者们无负担地使用并信任 Serverless,是我们一直追求的目标。
全托管的初衷是为了减小开发者的使用和运维复杂度,但这一定程度上削减了用户对自身服务的控制权力。比如在很多场景中,用户会想知道,如何能够掌握自己应用的实际运行情况?应用出现问题时如何能快速确认是自身问题还是云平台问题?如果是云平台的问题,如何能快速恢复服务,及时止损?这些问题的根本原因,都是用户对云平台无法做到完全的信任,这也进一步阻碍了他们迁移应用和扩展业务场景。所以我们也在思考,如何打破这种不信任局面,让用户拥有更多资源层面上的掌控力,但又能远离资源层的复杂运维。
在这样的背景和需求下,阿里云函数计算创新推出了 Serverless 场景下的函数实例命令行操作功能,支持用户在控制台界面登录进函数实例内部,或者使用工具对实例执行指定的命令。本文具体介绍这个功能的使用方式和使用场景。
实例 Exec 功能定位及使用方式
实例命令行操作功能提供和 K8S Pod Exec 与 Docker Container Exec 一致的使用体验,支持在函数实例的真实运行环境中执行具体命令。
同时,由于 Serverless 极致弹性、按量收费等特性,在 Serverless 场景下的实例 Exec 功能又与 K8S 和 Docker 有着一些本质的区别:
- 只能对还存活着的实例(包括预留常驻实例和按量活跃实例)执行 Exec 操作,如果按量实例空闲超时被释放,则无法再执行;
- InstanceExec 请求不占用实例的并发度。因此即使函数的实例并发度设置为 1,也可以同时执行 InvokeFunction 和 InstanceExec 操作
- InstanceExec 的一次操作被视作一次 InvokeFunction 请求调用。只要 InstanceExec 请求建立的 websocket 连接没有和函数实例断开,那么函数实例将一直处于活跃状态,和 Invoke Function 采用同样的计费规则。用户可以设置 InstantceExec 的 idleTimeout 参数让客户端在空闲指定时间后主动断开连接
实例命令行操作功能支持在控制台上登录实例、使用 Serverless Dev 工具执行命令,或者 SDK 调用接口,执行命令。
控制台登录实例
在函数计算官网控制台上在函数详情-监控指标-实例指标页面,在最右侧可以对实例执行登陆操作。
点击“登录实例”,界面将会调到一个终端界面,即可马上登录进实例,执行命令进行问题排查。
在函数详情-监控指标-实例指标页面,点击实例 ID 可以进入到函数的实例详情页面,界面右上方有登录实例的按钮,点击即可进入实例。
SDK 调用
以 golang SDK 为例,其它 SDK 的调用方式大都类似。
SDK 对 InstanceExec API 进行了封装,在调用接口的时候需要使用 OnStdout 、OnStderr 传入两个回调函数,回调函数定义了处理 Exec 通道返回数据的具体逻辑 ;同时可以使用返回的 execConn 输入 stdin 消息以传输给远端的 Exec 通道。
适用场景
1. 排查线上问题
在一些日常的场景下,实例命令行操作会带来更符合用户习惯、更高效便捷的排查问题方式。
用户小王是 Serverless 小白用户,写完一个程序部署到函数计算后,发现函数中设置的环境变量不生效,如果进一步排查,则需要修改代码,打印日志,重新部署,查看日志,使用这样繁琐的排查方式。现在借助实例命令行操作,小王可以直接一个命令:s exec {instance_id} ENV 便可以一步定位问题。
实例命令行操作提供了便捷的登录体验,能帮助用户解决复杂场景下的应用问题。一些情况下,用户已经无法通过函数日志、监控指标来具体定位问题,需要借助比如 coredump 、tcpdump、jmap 等工具进行深入排查。
比如,用户小李发现自己的线上程序最近会出现一些函数错误,报错内容都是连接远程某服务超时。小李怀疑是函数实例与远端服务的网络链接不稳定,想进入实例内部,调查分析下实例与远端服务的网络情况。他可以按照这样的步骤进行:
- 登录进实例内部后,先安装 tcpdump 工具,需要执行 apt-get update 和 apt-get install tcpdump 两条命令:
- 安装完毕后,执行 tcpdump 命令,对远端服务 IP 的请求进行抓包,并将抓包结果保存在 tcpdump.cap 文件中:
- 抓包完毕,借助 OSS 命令行工具 ossutil64 ,将 tcpdump.cap 文件上传到自己的 OSS ,然后下载到本地借助分析工具 wireshark 可以进行分析。
2. 程序性能优化
很多时候,开发者需要通过各种 profiling 工具来分析性能、资源使用等问题。比如应用实例CPU、内存等资源使用不符合预期;应用性能低于预期,通过 profiling 工具找到瓶颈等等。通过实例命令行操作,开发者能够方便的运行语言、框架提供的各种 profiling 工具,优化程序性能和资源使用。
以运行在函数计算上的高德自主出行为例,其峰值 TPS 会达到数十万级别,作为实时在线应用,服务能接受的请求延迟在几十毫秒级别。考虑到成本压力,在上线前他们期望压测出单实例最高能承受的 TPS 和对应的调用延迟,以此评估需要的实例数量。
但是高德在压测中发现单实例的平均/长尾延时不符合预期,当单实例 TPS 达到 300 TPS 的时候,请求延迟会直线上升。他们想确定,是否是自己的应用程序哪里存在性能瓶颈,或者是函数计算运行时的性能存在问题?借助实例命令行操作,他们可以登录进实例内部,通过 profiling 深入分析后发现了性能问题,最后优化了程序性能达到了上线标准。
下面以 custom runtime 为例:demo 示例程序使用 golang 编写并部署到函数计算上。
- 登录进入实例后,下载 golang 安装包 :
- 并解压安装 go :
- 执行 go tool pprof 命令,并产生分析文件:
/root/pprof/pprof.bootstrap.samples.cpu.001.pb.gz
- 最后借助 OSS 命令行工具 ossutil64, 运行 ./ossutil64 cp 命令,将分析文件上传到自己的 OSS Bukcet 中 ,便可以下载到用户本地进行可视化分析。
总结
实例命令行功能的推出希望能消除用户使用 Serverless 的“最后一公里”,直接将真实的函数运行环境展现给用户,此后 Serverless 将不再是一个“黑盒”,用户可以更加信任和依赖 Serverless 平台来扩展更多的业务场景和规模。
本文为阿里云原创内容,未经允许不得转载。
Serverless 场景排查问题利器 : 函数实例命令行操作的更多相关文章
- Zookeeper的命令行操作(三)
Zookeeper的命令行操作 1. ZooKeeper服务命令 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 1. 启动ZK服务: sh bin/zkSer ...
- Hadoop系列006-HDFS概念及命令行操作
本人微信公众号,欢迎扫码关注! HDFS概念及命令行操作 一.HDFS概念 1.1 概念 HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起来实现其 ...
- kafka工作流程| 命令行操作
1. 概述 数据层:结构化数据+非结构化数据+日志信息(大部分为结构化) 传输层:flume(采集日志--->存储性框架(如HDFS.kafka.Hive.Hbase))+sqoop(关系型数 ...
- java命令行操作
一直使用eclipse操作java程序,但RMI程序需要命令行操作,故研究了下java的命令行操作. javac 用于编译.java文件,生成.class文件 假设文件夹dir下有pa.java和a. ...
- DOS命令行操作MySQL常用命令
平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...
- 【Zookeeper】结构、应用、安装部署与参数、客户端命令行操作、API应用、内部原理(选举机制、写数据、监听器)
一.Zookeeper入门 1.概述 分布式服务管理框架(存储和管理数据) Zookeeper=文件系统+通知机制 2.特点 主从集群 半数以上,正常工作 请求顺序执行 数据更新具有原子性 3.数据结 ...
- 命令行操作svn和git和git
前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...
- mysql 命令行操作入门(详细讲解版)
之前分享过多次Mysql主题,今天继续分享mysql命令行入门 1. 那么多mysql客户端工具,为何要分享命令行操作? -快捷.简单.方便 -在没有客户端的情况下怎么办 -如果是mysql未开启 ...
- windows下使用TortoiseGit代替Git命令行操作
windows下使用TortoiseGit代替Git命令行操作 大家在使用svn的时候,都非常喜欢使用小乌龟,也就是TortoiseSVN:那么git也有小乌龟版本,即TortoiseGit. 1.安 ...
- linux快速入门 1.1命令行操作
http://lovesoo.org/linux-command-line-operation.html 1.1命令行操作 目录: <wp_nokeywordlink>Shell简介 &l ...
随机推荐
- 应用层01-HTTP
2.1 应用层协议原理 2.1.1 网络应用程序体系结构 研发网络应用的程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序. 例如: Web应用程序 客户:浏览器程序(进程) 服务:Web ...
- 23_FFmpeg像素格式转换
简介 前面使用 SDL 显示了一张YUV图片以及YUV视频.接下来使用Qt中的QImage来实现一个简单的 YUV 播放器,查看QImage支持的像素格式,你会发现QImage仅支持显示RGB像素格式 ...
- 优雅的处理挂载window上的函数可能不存在的情况
背景 在做一个Web JS SDK(A)时,内部会用到另一个Web JS SDK(B)的方法.(文中后续用A/B代替两者) B通常会提供Script和NPM包两种使用方式 使用npm pkg的缺点 增 ...
- 今日学习:位运算&中国剩余定理
-2^ 31的补码是-0.也就是 1000 0000 0000 0000 0000 0000 0000 0000 补码是原码取反加1 x&(-x) 是最低位为1的位为1,其余位为0. 中国剩余 ...
- 在Blazor中使用Chart.js快速创建图表
前言 BlazorChartjs是一个在Blazor中使用Chart.js的库(支持Blazor WebAssembly和Blazor Server两种模式),它提供了简单易用的组件来帮助开发者快速集 ...
- Linux快速入门(五)Linux系统管理
top top命令相当于任务管理器.在top命令中,可以使用M,将进程列表按内存使用排序,使用P将进程列表按照CPU的使用情况排序,输入q退出. (1)第一行是任务队列信息,显示系统时间.运行时间.当 ...
- JavaScript知识总结 异步编程篇
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 异步编程的实现方式? JavaScript中的异步机制可以分为以下几种: 回调函数 的方式,使用回调函数的方式有一个缺点是,多个回调 ...
- 一些 AppKit 的坑
NSTextField 在 NSTableView 中需要先点一次再点一次才能编辑.且 hover 时鼠标指针不变化 在 storyboard 里,将 NSTableView 的 Highlight ...
- verilog之时钟信号的编写2
verilog之时钟信号的编写2 1.时钟信号的特点 时钟信号除了可以根据时序一个个变化列举出来,还可以利用其循环的变化的特点,使用循环执行语句always来实现.这种方法实现的时钟信号可以一直执行且 ...
- HDC2021技术分论坛:OpenHarmony驱动框架解读和开发实践
转自:OpenAtom OpenHarmony 作者:yuanbo,华为高级工程师 在IoT时代下,终端设备差异较大.形态各异.尺寸各异.交互方式各异,解决设备适配问题无疑是实现万物互联的一个关 ...