应用响应时延背后深藏的网络时延
应用异常时,基本可以分为服务访问不通和服务响应慢两个大类。其中服务响应慢的问题定位非常棘手,很多无头案。应用团队有日志和追踪,对于自认为的不可能不合理的事情都会甩给基础设施团队,又由于基础设施团队现有的监控数据缺乏应用的观测视角,通常成为一切「不是我的问题」超自然现象的终极背锅侠,其中以网络团队尤为严重。
欢迎预约8月2日由【云原生社区】主办,【云杉网络】发起的”可观测性技术实践“系列直播,一起探索应用性能瓶颈的秘密。通过来自物流、智能汽车行业的实战案例,深入了解 DeepFlow 的典型应用场景,你将学习到如何高效的进行快速排障和时延瓶颈定位,将棘手问题的排查时间从数天降低到几分钟,帮助你的效率提升10倍。
01|响应时延
服务为什么响应慢???首先,我们需要一种方式来度量何为响应慢,参考 Google 在 SRE Handbook 中提到过4 个黄金信号
及 Weave Cloud 提出来的 RED 方法
,都存在度量的指标(Latency/Duration),后文统称为响应时延
。
-
Latency 表达的是服务处理某个请求所需要的时间,站在的是服务端视角
-
Duration 表达的是每个请求所花费的时间,站在的是客户端视角
总结下来,不论站在什么视角,响应时延
表达的都是处理一个请求所花费的时间,可以用来表征服务响应慢的度量指标,但若要定位为什么响应慢还需要进一步剖解响应时延:
-
系统时延:系统转发请求/响应的时延消耗
-
网络时延:包含查询 DNS 时延及网络处理的时延
-
应用时延:从不同视角来看,包含客户端应用处理时延 + 服务端应用处理时延
响应时延拆解
确定度量指标后,接下就可以分析服务响应慢的原因,此时可以利用分布式链路追踪能力来快速来定界瓶颈点,例如可利用 DeepFlow 的分布式追踪能力来快速定界瓶颈点在应用、系统还是网络。
分布式链路追踪-火焰图
完成瓶颈点定界后,则需要去查找根因。对于应用或者系统的问题,可以利用性能剖析(profile)继续追查根因,而对应网络时延的分析,其中 DNS 时延分析是相对简单的,只需要关注请求的响应时延即可,但网络处理时延瓶颈的定位却缺少了分析的工具,接下来将主要聚焦讨论网络传输时延如何分析。
性能剖析-火焰图
02|网络时延
参考 AWS 中的定义网络时延是指网络通信中的延时,网络时延显示了数据通过网络传输所需的时间。讨论网络时延如何,也是需要可度量的指标,AWS 也指定了使用“首字节时间”和“往返时间”等指标来衡量网络时延,这两个指标是可以适用于所有网络协议的传输时延的度量,但实际应用 80% 都使用的 TCP 协议,对于 TCP 协议是需要更细粒度的度量指标,下文通过图文的形式,详细的介绍目前可用的度量指标及用法。
TCP 协议是面向连接的传输层通信协议,对其详细的通信过程分析,时延可分为三大类:
1)建连时产生的时延
-
[1] 完整的
建连时延
包含客户端发出 SYN 包到收到服务端回复的 SYN+ACK 包,并再次回复 ACK 包的整个时间。建连时延拆解开又可分为客户端建连时延
与服务端建连时延
-
[2]
客户端建连时延
为客户端收到 SYN+ACK 包后,回复 ACK 包的时间 -
[3]
服务端建连时延
为服务端收到 SYN 包后,回复 SYN+ACK 包的时间
2)数据通信时产生的时延,可拆解为客户端等待时延
+数据传输时延
-
[1]
客户端等待时延
为建连成功后,客户端首次发送请求的时间;为收到服务端的数据包后,客户端再发起数据包的时间 -
[2]
数据传输时延
为客户端发送数据包到收到服务端回复数据包的时间 -
[3] 在数据传输时延中还会产生系统协议栈的处理时延,称为
系统时延
3)断连时产生的时延:因为断连的时延并不影响到应用的响应时延,因此并不会单独统计此部分使用
TCP 网络时延解剖
度量的网络时延的指标已经拆解好了,接下来讨论在哪里采集指标,网络的报文将在客户端,各种虚拟和物理网络与服务端之间穿梭,因此可报文穿梭的位置点来采集,后续统称为统计位置
。当然统计位置越多,定位网络的瓶颈路径越快,但是统计位置多则随之带来的计算量也是成倍增加,企业在有成本压力时,建议在重要节点进行采集即可,比如 K8s Pod 虚拟网卡、K8s Node 网卡、云服务器网卡、网关(如 LVS/Nginx 等)网卡、硬件防火墙/负载均衡器前后......
统计位置
分析到这,基本已经清晰网络时延的详细的度量指标了,回过头结合响应时延再讨论下如何查看网络时延对其的影响,基本可以分两种情况讨论:
a)应用发起请求为短连接:此时分析网络时延需要查看 DNS 时延 + 建连时延 + 客户端等待时延 + 数据传输时延 + 系统时延,则可快速定位时延发生的具体原因了。
-
DNS 时延高,结合统计位置,则可回答是网络传输时延高还是DNS 服务响应慢
-
建连时延高,结合客户端建连时延 + 服务端建连时延 + 统计位置,则可回答是网络传输时延高还是客户端系统回复慢还是服务端处理建连响应慢
-
客户端等待时延高,结合统计位置,则可回答是网络传输时延高还是客户端请求发送延迟
-
数据传输时延高,结合统计位置,则可回答是网络传输时延高还是服务端响应慢
-
系统时延高,结合统计位置,则可回答网络传输时延高还是服务端协议栈处理慢
b )应用发起请求为长连接:因为长连接是保持长期活动的 HTTP 连接,不需要考虑 DNS 查询与建连的时延消耗,只需要关注客户端等待时延 + 数据传输时延 + 系统时延即可
03|案例分析
限于笔者时间限制又想早点将应用响应时延背后深藏的网络时延剖解分享给大家,本文不继续补充实际案例,将在一周后分享在某xx智能终端公司的如何结合 DeepFlow 在服务响应慢时,网络团队在存在可观测性的时延数据时,如何硬气回怼。
04|什么是 DeepFlow
DeepFlow[1] 是一款开源的高度自动化的可观测性平台,是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术,创新的实现了 AutoTracing、AutoMetrics、AutoTagging、SmartEncoding 等核心机制,帮助开发者提升埋点插码的自动化水平,降低可观测性平台的运维复杂度。利用 DeepFlow 的可编程能力和开放接口,开发者可以快速将其融入到自己的可观测性技术栈中。
GitHub 地址:https://github.com/deepflowys/deepflow
访问 DeepFlow Demo[2],体验高度自动化的可观测性新时代。
05|参考文档
-
https://aws.amazon.com/cn/what-is/latency/
-
https://baike.baidu.com/item/%E7%B3%BB%E7%BB%9F%E5%93%8D%E5%BA%94%E6%97%B6%E9%97%B4/22026261
-
https://dev.to/aws/why-are-services-slow-sometimes-mn3
-
https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/promql/prometheus-promql-best-praticase
-
https://www.weave.works/blog/the-red-method-key-metrics-for-microservices-architecture/
-
https://aws.amazon.com/what-is/latency/
参考资料
[1] DeepFlow: https://github.com/deepflowys/deepflow
[2] DeepFlow Demo: https://deepflow.yunshan.net/docs/zh/install/overview/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
字节跳动 EB 级 Iceberg 数据湖的机器学习应用与优化
深度学习的模型规模越来越庞大,其训练数据量级也成倍增长,这对海量训练数据的存储方案也提出了更高的要求:怎样更高性能地读取训练样本、不使数据读取成为模型训练的瓶颈,怎样更高效地支持特征工程、更便捷地增删和回填特征。本文将介绍字节跳动如何通过 Iceberg 数据湖支持 EB 级机器学习样本存储,实现高性能特征读取和高效特征调研、特征工程加速模型迭代。 机器学习样本存储:背景与趋势 在字节跳动,机器学习模型的应用范围非常广泛。为了支持模型的训练,我们建立了两大训练平台:推荐广告训练平台和通用的 CV/NLP 训练平台。推荐广告平台每周训练规模达到上万个模型,而 CV/NLP 平台的训练规模更是每周高达 20 万个模型。如此庞大的模型训练规模背后离不开海量的训练样本支持。目前,在字节跳动的离线训练样本存储中,数据总量已经达到了 EB 级,每日还在以 PB 级的速度增长。这些数据被用于支持广告、搜索、推荐等模型的训练,覆盖了多个业务领域;这些数据还支持算法团队的特征调研、特征工程,并为模型的迭代和优化提供基础。目前字节跳动以及整个业界在机器学习和训练样本领域的一些趋势如下: 首先, 模型 ...
- 下一篇
JeeSite V5.4.1 和 V4.7.0 发布,一个 Java 快速开发平台
V5.4.1 升级内容 新增 对象存储 增加 expires 参数,生成私有对象地址的有效期 去掉 对象存储 publicUrl 中的桶名称(阿里云、七牛云、腾讯云、MinIO) 增加 配置参数 web.xssFilterExcludeUri 方便排除一些特殊地址不过滤 优化 文件预览 禁用pdfobject,直接使用pdfjs,防止pdf中的js运行 优化 数据源 createDruidDataSource 接口,可以自定义xa数据源 优化 支持自定义 j2Cache 的二级缓存,可以将 Redis 替换为同类产品 优化 文件管理 groupType 参数,文件柜编码开头为 self 的自动过滤自己的,开头是 office 自动过滤本部门的 优化 主题风格细节、多语言国际化译文 修正 因修改右上角消息溢出,导致国际化en英文环境下的,用户下拉换行的问题 修正 tree 删除问题 #I7GCVK Cloud 新增消息模块独立微服务 Cloud 新增文件模块独立微服务 Cloud 新增扩展模块独立微服务 Cloud 升级 seata 1.6.1 Vue分离端 功能国际化语言包完善 升级方...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6