带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(3)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(3)

带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(2)https://developer.aliyun.com/article/1377522


image.png

 

Metrics的最佳实践是一定要在端侧预聚合指标。我们的指标来源于span的,对应的就是埋点统计方法的耗时。这样一个span的字段有很多,比如span name接口名、耗时以及产生的时间。我们按照15秒聚合一次,把这段时间内所有调用聚合出来,就可以得到上图的一条数据,这就是端侧预聚合的概念。

 

那么为什么要做端侧预聚合呢?有两个原因,一个是我们的指标在预聚合之后它的量很少,另外一个是预聚合之后它的数据一定是准确的。同样在一些开源产品里,它是没有指标预聚合的,它统计出来的指标都是基于采样后的span,所以它的数据是不准确的。

 

在我们做了预聚合之后,我们会在端侧采集一些指标,上图右侧列了一些我们会去采集的指标以及给这些指标加的维度。这些指标和维度话基本都是通过在阿里内部服务电商业务以及服务公共云上的用户总结下来。通过这些指标能够定位线上大多数的问题。比如请求数、请求大小、响应大小、耗时、活跃请求数、线程池的指标。关键维度我们会去记录接口名、上游接口名以及状态码。

 

在做端测指标预聚合的时候,也会有一些比较困难的点。

 

做指标的应该都会知道维度发散的问题,在端侧我们要做维度收敛。大家可以看一下上图左侧,它的spanname是一个相对来说比较发散的情况。它聚合之后从7条数据变成了4条数据,聚合效果就没那么好了。如果它是更发散的情况,它的聚合效果就会更差,且会导致数据的上报量也会很大,端服务端存储成本也比较高,所以一定要做维度收敛。

 

在Spring MVC场景下,Spring MVC会放到request attribute里面的一个base matching pattern attribute这样的key里面,这个key一定会映射到后端用户的controller上面。

 

另外,在SpringCloud Gateway的场景下,它没有base matching pattern attribute的key,所以我们会把它的收敛后置到转发请求的后面业务服务上去做收敛。业务服务会把收敛的结果通过response heater返回给SpringCloud Gateway。然后SpringCloud Gateway再把返回来的结果前面加一个固定的前缀,比如API,来保证在任意场景下,都可以把发散的url收敛成一个固定的url。

 

在统计精准指标上,就像请求数这样的指标,因为它是counter一直递增的。我们采集指标可能是15秒采集一次,如果现在要拿一分钟的精确指标,就相当于它强依赖于定时任务调度的15秒的精确度。但精确度很难保证,所以我们在做指标的时候,会去考虑按时间分桶。在预聚合指标的时候就把一个指标聚合在那个上报周期了,以此保证统计一分钟请求数量的时候,不会出现偏差。

 

在准确统计分位数上,很难有一个方案把内存占用、二次聚合、精确性这三方面都照顾的很好。经过我们的调研,DDSketch 算法可以在这三方面有一个比较好的权衡。可以得到一个比较精确的结果,内存占用也是可预期的,结果也可以进行二次聚合。

 

image.png 

 

带你读《Apache Tomcat的云原生演进》——Web容器可观测最佳实践(4)https://developer.aliyun.com/article/1377520

相关文章
|
3月前
|
缓存 监控 网络性能优化
从内核的视角观测容器——SysOM 容器监控
从内核的视角观测容器——SysOM 容器监控
|
12天前
|
Web App开发 Java 应用服务中间件
【Java Web】在 IDEA 中部署 Tomcat
【Java Web】在 IDEA 中部署 Tomcat
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
132 1
|
2月前
|
Kubernetes 监控 Cloud Native
阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
178 2
|
3月前
|
存储 安全 Java
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
从HTTP到Tomcat:揭秘Web应用的底层协议与高性能容器
|
3月前
|
Cloud Native Dubbo 应用服务中间件
Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题 50 万奖金池
Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题 50 万奖金池
|
3月前
|
数据中心 容器
容器与虚拟机的区别:以Web应用部署为例
容器与虚拟机的区别:以Web应用部署为例
42 0
|
3月前
|
监控 Java 应用服务中间件
【Linux】Web服务之Tomcat服务
【Linux】Web服务之Tomcat服务
37 0
|
3月前
|
监控 Linux 网络安全
【Linux】Web服务之Apache服务
【Linux】Web服务之Apache服务
43 0
|
3月前
|
Kubernetes Cloud Native 安全
云原生技术专题 | 云原生架构未来发展趋势,探索容器技术未来的发展趋势
云原生架构指的是基于云原生技术的一套架构原则和设计模式,目的是最大限度地去除云应用中的非业务代码部分。这样,云设施可以接管应用中大量原有的非功能性特性(如弹性、韧性、安全性、可观察性、灰度等),使非功能性业务中断不再成为难题,为业务提供轻量化、敏捷、高度自动化的优势。
563 6
云原生技术专题 | 云原生架构未来发展趋势,探索容器技术未来的发展趋势

热门文章

最新文章

  • 1
    Serverless 应用引擎操作报错合集之阿里函数计算中我打开sd时遇到错误,信息为"Function instance exited unexpectedly(code 1, message:operation not permitted) with start command ' '."如何解决
    10
  • 2
    Serverless 应用引擎操作报错合集之阿里函数计算中配置完fc,出现‘Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'npm run start '. 报错如何解决
    11
  • 3
    Serverless 应用引擎操作报错合集之阿里函数计算中,出现"Process exited unexpectedly before completing request"错误如何解决
    6
  • 4
    Serverless 应用引擎操作报错合集之阿里函数计算中,总是报错“Process exited unexpectedly before completing request (duration: 0ms, maxMemoryUsage: 0.00MB)”如何解决
    7
  • 5
    Serverless 应用引擎操作报错合集之阿里函数计算中{"ErrorCode":"AccessDenied","ErrorMessage":"Current user is in debt."}出现这个代码如何解决
    10
  • 6
    Serverless 应用引擎操作报错合集之阿里函数计算中我的3dopenpose报错 "error 预览失败" 如何解决
    10
  • 7
    Serverless 应用引擎操作报错合集之阿里函数计算中,(FC)无法正常运行如何解决
    7
  • 8
    Serverless 应用引擎操作报错合集之阿里函数计算中,出现FC 3 assert torch.cuda.is_available() 报错如何解决
    9
  • 9
    Serverless 应用引擎操作报错合集之阿里函数计算中,生成图片时进程卡住如何解决
    10
  • 10
    Serverless 应用引擎操作报错合集之阿里函数计算中出现关于“FC environment variables [FC_RuntIME_API] are not defined exit status 1”的报错如何解决
    12
  • 推荐镜像

    更多