云原生之深入解析Kubernetes中服务的性能

一、Pyroscope 简介

① 什么是 Pyroscope?

  • 开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因,为此通常需要可以通过日志和代码工具收集的信息。不幸的是,这种方法通常很耗时,并且不能提供有关潜在问题的足够详细信息。
  • 一种现代且更先进的方法是应用和使用分析技术和工具来突出显示最慢的应用程序代码,即消耗大部分资源的区域。现在将讨论持续分析,然后使用名为 Pyroscope 的开源工具检测在 Kubernetes 上运行的微服务。
  • 必须对代码进行分析、调试和审查,以确定使其运行得更快的最有效方法。使用分析工具检查应用程序的代码有助于我们定位和修复性能瓶颈。这可以快速诊断应用程序的执行情况,并使程序员能够深入了解性能不佳的核心细节。结果是一个简化的代码库,减少了 CPU/内存消耗,使用户体验更好。
  • Profiling 是一种程序分析,用于测量程序的内存、时间复杂度或函数调用的频率和持续时间。分析信息用于帮助程序优化和性能,Profiler 程序可以跟踪每一行代码。

② 连续分析

  • Continuous Profiler 用于更快、更轻松地进行故障排除。Continuous Profiler 是生产代码分析器,可随时间分析整个环境中的代码级性能。
  • 随着配置文件的不断收集,它们可以在引入新代码后快速揭示资源最密集的特性(或代码行)。优化可以减少最终云提供商帐户和用户的延迟。

③ 有哪些连续分析器?

  • Pyroscope:Pyroscope 是一个开源平台,由服务器和代理组成,它允许用户以 CPU 和磁盘高效的方式收集、存储和查询分析数据。
  • Parca:Parca 收集、存储和提供配置文件,以便随着时间的推移进行查询,它是开源的,可以部署在生产环境中,因为 Parca 专注于对两种主要类型的配置文件进行采样分析:跟踪和采样。
  • Datadog:Datadog Continuous Profiler 始终在任何环境(包括生产环境)中分析和比较代码性能,它指出了由低效代码导致的难以复制的生产问题。还具有自动代码分析洞察力。
  • Google - Cloud Profiler:Cloud Profiler 是一种低开销的统计分析器,可从生产应用程序中持续收集 CPU 使用率和内存分配信息,它具有可操作的应用程序分析、低影响的生产 Profilin 和广泛的平台支持。

④ 为什么使用 Pyroscope?

  • 在开始探索 Pyroscope 之前,来看看它与市场上其他少数可用的连续分析工具有何不同。DataDog 和 Google Cloud Profiler 在业界被广泛使用,正如一位 Reddit 用户所指出的,以下是 Pyroscope 比其他两个更好的一些原因。
  • Datadog、Google Cloud 和 Pyroscope 连续分析功能的比较:

在这里插入图片描述

  • Pyroscope 专注于构建专门用于分析数据的存储引擎,以尽可能高效地存储和查询数据。它使用代理服务器模型将配置文件从应用程序发送到 Pyroscope 服务器:

在这里插入图片描述

  • Pyroscope 允许任何语言的分析器向其发送数据,并让存储引擎有效地存储该数据。例如,Pyroscope 具有针对 Go、Python、Ruby、eBPF、Java、.NET、PHP 和 Rust 的语言特定代理。
  • 另一方面,Parca 采用了稍微不同的方法,它依赖 eBPF 来编译 C、C++、Go 等语言。与 Pyroscope 类似,它也可以从 HTTP 端点读取任何pprof 格式的配置文件。
  • 从理论上讲,由于所有这些语言最终都会编译下来并在内核上运行,因此 eBPF 应该适用于这些语言中的任何一种。然而,在实践中,如果你真的为 Python 等解释性语言运行 eBPF,在许多情况下,函数名称对人类来说是不可读的。这是因为符号不是以这些语言存储的。
  • 出于这个原因,Pyroscope 同时支持特定于语言的分析器和 eBPF 分析器。与仅在内核级别运行的 eBPF 相比,这以集成语言特定代理的工作量稍多为代价,但它也带来了更多可操作和人类可读的配置文件的好处。

二、如何安装 Pyroscope?

  • 无论使用什么,Docker、Linux,或者正在寻找 Ruby 或 Go 文档,Pyroscope 都可以启动服务器,然后再启动代理。即使目标是 10 秒或 10 个月的软件分析数据,他们定制设计的存储引擎也可以进行快速查询。
  • 使用 minikube 来运行 Kubernetes 集群,使用 minikube 创建集群:
minikube start
  • 添加 Helm 图表存储库:
helm repo add pyroscope-io https://pyroscope-io.github.io/helm-chart
  • 安装 Helm 图表:
helm install pyroscope pyroscope-io/pyroscope --set service.type=NodePort
  • 检查 Pyroscope Helm 图表安装成功:
helm list
  • 检查 Pyroscope 是否正在运行:
kubectl get all
  • 现在 Kubernetes 集群中运行了 Pyroscope,那么将继续使用该应用程序的步骤,这里使用 Google 微服务来进行此演示。

三、将 Google 微服务演示与 Pyroscope 集成

  • 需要修改容器镜像以使用 pyroscope 二进制文件,这个二进制文件将启动应用程序并注入自己进行监控。使用来自 Google 微服务的 Python、Go 和 .NET 微服务进行演示,所有修改都推送到GitHub 上的 Google 微服务分支,来看看每个服务的这些更改。
  • 要在 Google 微服务演示中试用 Pyroscope,无需自己构建 Docker 镜像,可以只应用 Kubernetes 清单,如从微服务获取分析数据部分所示。

① Python

  • 将使用 Python 编写的电子邮件服务应用程序,在 DockerfilePyroscope 中使用 Python 应用程序需要进行以下更改:
COPY --from=pyroscope/pyroscope:latest /usr/bin/pyroscope /usr/bin/pyroscope
CMD [ "pyroscope", "exec", "python", "email_server.py" ]
  • 编辑 Dockerfile 后,在同一文件夹下,继续构建和推送镜像:
docker build . -t beellzrocks/emailservice:latest
docker push beellzrocks/emailservice:latest

② .NET

  • 使用适用于 .NET 的应用程序 Cart Service,要将 .NET 应用程序与 Pyroscope 一起使用,需要对 Dockerfile 进行以下更改:
COPY --from=pyroscope/pyroscope:latest /usr/bin/pyroscope /usr/bin/pyroscope
ENTRYPOINT ["pyroscope", "exec", "-spy-name", "dotnetspy", "/app/cartservice"]
  • 编辑 Dockerfile 后,继续构建和推送镜像。

③ GO

  • 采用 Go 编写的 Product Catalog Service 应用程序,要使用带有 Pyroscope 的 Go 应用程序,需要对 server.go 进行以下更改:
import (pyroscope "github.com/pyroscope-io/pyroscope/pkg/agent/profiler"
)func main() {pyroscope.Start(pyroscope.Config{ApplicationName: os.Getenv("APPLICATION_NAME"),ServerAddress:   os.Getenv("SERVER_ADDRESS"),})// code here
)
  • 编辑 server.go 后,继续构建和推送镜像。

四、从微服务获取分析数据

  • 修改 Kubernetes 清单以将图像与 Pyroscope 一起使用,该 kubernetes-manifests.yaml 文件包含所有应用程序的资源,再对其进行编辑以使用在上述步骤中构建的镜像,即电子邮件服务、购物车服务、产品目录服务:
containers:- name: serverimage: beellzrocks/emailservice
  • 在 Kubernetes 中运行 Pyroscope 时,需要做以下更改:
    • 添加 SYS_PTRACE 能力;
    • 告诉代理 Pyroscope 服务器的位置,以及使用环境变量的应用程序名称。
containers:- name: serverenv:- name: PYROSCOPE_SERVER_ADDRESS # To change Pyroscope Server Port change the valuevalue: "http://pyroscope:4040"- name: PYROSCOPE_APPLICATION_NAME # Application name shown in the UIvalue: "email.service" securityContext:capabilities:add:- SYS_PTRACE
  • 现在,要部署所有服务,可以将 Kubernetes 清单应用到集群:
kubectl apply -f https://raw.githubusercontent.com/infracloudio/microservices-demo-dev/master/release/kubernetes-manifests.yaml
  • 获取 Pyroscope 的服务 url:
minikube service pyroscope
|-----------|-----------|-------------|---------------------------|
| NAMESPACE |   NAME    | TARGET PORT |            URL            |
|-----------|-----------|-------------|---------------------------|
| default   | pyroscope | http/4040   | http://192.168.49.2:30639 |
|-----------|-----------|-------------|---------------------------|Opening service default/pyroscope in default browser
  • 要访问 Pyroscope UI,可以访问 URL:http://192.168.49.2:30639(依据上述反馈打开实际地址):

在这里插入图片描述

  • 正如在上面的屏幕截图中看到的,Pyroscope 本身在本地存储数据时占用的 CPU 使用率很低,它使用 Badger 数据库在本地存储数据。

五、Pyroscope 资源利用

  • 监控 Kubernetes pod 在资源使用、利用率和成本控制方面也很重要,Pyroscope 使用低资源和低开销,Pyroscope CPU 利用率如下所示:

在这里插入图片描述

六、使用 Pyroscope 进行监控

  • Pyroscope 根据编程语言使用不同的代理来分析代码,如下是一些使用 Pyroscope 的分析应用程序的火焰图示例:
    • 带有 Go 产品目录服务应用程序的 Pyroscope:

在这里插入图片描述

    • Pyroscope 与 .Net Cart 应用程序:

在这里插入图片描述

    • 带有 Python 电子邮件应用程序的 Pyroscope:
      在这里插入图片描述

七、结论

  • 持续分析性能是满足最终用户期望的关键因素,如果出现性能问题,必须准备好在影响最终用户体验之前诊断问题。因此,需要继续优化应用程序并立即解决问题,以继续使用 Pyroscope 等工具为用户提供超快速的应用程序性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读:Medical Transformer论文创新点解读

这篇文章其实就是基于Axial-DeepLab: Stand-Alone Axial-Attention forPanoptic Segmentation论文上进行的一些小创新 Stand-Alone Axial-Attention forPanoptic Segmentation论文解读: 论文解读:Axial-DeepLab: Stand-Alone Axial-Attention forPanop…

【TES720D-KIT】基于国内某厂商FMQL20S400全国产化ARM开发套件(核心板+底板)

板卡概述 TES720D-KIT是专门针对我司TES720D(基于国内某厂商FMQL20S400的全国产化ARM核心板)的一套开发套件,它包含1个TES720D核心板,加上一个TES720D-EXT扩展底板。 FMQL20S400是国内某厂商电子研制的全可编程融合芯片&#xf…

使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题

文章目录 一、 篇头二、 操作步骤2.1 编译AOSP AS工程文件2.2 将AOSP导入Android Studio2.3 切到Project试图2.4 等待index结束2.5 下载缺失的JDK 1.82.6 导入完成 三、 导入AS的好处3.1 本文案例演示源码编译错误AS对比同文件其余地方的调用AS错误提示依赖AS做错误修正 一、 篇…

逆向经历回顾总结

逆向经历回顾总结 一、前言 将自己的逆向经验做个总结,希望新手对逆向大方向能快速了解。高手有啥不一样的经验也可以讨论讨论。 二、个人经历 本人入行逆向全因一部韩剧“幽灵”,里面涉及渗透、病毒分析、取证的攻防对抗,我觉得对新手来说…

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站,它可以基于截图生成站点代码,生成速度快且准确。

SpringBoot 究竟是如何跑起来的

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《SpringBoot》。🎯🎯 &…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统(DBMS)中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

基于ssm服装定制系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 基于ssm服装定制系统源码和论文751 1.1项目研究的背景 困扰管理层的许多问题当中,服装定制将是广大用户们不可忽视的一块。但是管理好服装定制又面临很多麻…

EasyV易知微助力智慧城市未来趋势发展——数字孪生城市

“智慧城市的未来趋势就是数字孪生”——《基于数字孪生的智慧城市》 城市数字化管理、智慧城市和数字孪生城市的发展是相互促进、逐步深化的过程。 城市数字化管理作为起点,奠定了信息化、数据化的基础;而智慧城市则将数字城市管理进一步升级&#xff…

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费,**这类消费异常的数据将会保存在死信队列中防止消息丢失,例如用户在商城下单成功并点击支付后,在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…

Springboot集成支付宝支付---完整详细步骤

网页操作步骤 1.进入支付宝开发平台—沙箱环境 使用开发者账号登录开放平台控制平台 2.点击沙箱进入沙箱环境 说明:沙箱环境支持的产品,可以在沙箱控制台 沙箱应用 > 产品列表 中查看。 3.进入沙箱,配置接口加签方式 在沙箱进行调试前…

Python (十) operator

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

找不到vcomp100.dll,无法继续执行代码怎么解决

在计算机编程中,我们经常会遇到一些错误提示,其中之一就是“找不到vcomp100.dll,无法继续执行代码”。这个错误通常出现在使用Visual Studio进行C开发时,它表示程序无法找到vcomp100.dll文件。vcomp100.dll是Visual C 2015 Redist…

认识产品经理以及Axure简单安装与入门

目录 一.认识产品经理 1.1.项目团队 1.2.概述 1.3.认识产品经理 1.4.产品经理工作范围 1.5.产品经理工作流程 1.6.产品经理的职责 1.7.产品经理的分类 1.8.产品经理能力要求 1.9.产品工具 1.10.产品体验报告 二.Axure简介 三.应用场景 四.安装与汉化 4.1.安装 4…

指纹浏览器有什么用?AdsPower 指纹浏览器都有哪些优势?

说到指纹浏览器,各位跨境卖家肯定都不陌生,指纹浏览器已经成为跨境电商不可或缺的有力工具,那么它具体有什么作用呢?如今市场上指纹浏览器品牌琳琅满目,东哥有没有什么推荐呢?在这里,东哥将为大…

matter模组有无源测试事例

测试一款matter模组的硬件性能 1.1 天线阻抗、电压驻波比测试 主要测试:PCB板载天线设计效率及板材PCB铜面的平整度等 1.2 模组有源数据测试 主要测试:模组的阻抗匹配、频偏等情况 1.3 模组传输能量精度 主要测试:矢量误差等数据 1.4 模…

Unity2023.3(Unity6)版本开始将可以发布WebGPU

翻译一段官网上的话: 利用Unity 2023.3(正式发布时应该称为Unity6)中最新的WebGPU图形API集成,尝试最大限度的提升您的网络游戏的真实感。 通过与谷歌的战略合作,Unity实时3D平台的强大的图形功能现在为图形丰富的网络游戏进行微调&#xff0…

提升英语学习效率,尽在Eudic欧路词典 for Mac

Eudic欧路词典 for Mac是一款专为英语学习者打造的强大工具。无论您是初学者还是高级学习者,这款词典都能满足您的需求。 首先,Eudic欧路词典 for Mac具备丰富的词库,涵盖了各个领域的单词和释义。您可以轻松查询并学习单词的意思、用法和例…

猫粮哪个牌子好?盘点十大主食冻干猫粮品牌排行榜!

近年来,冻干猫粮作为备受追捧的高品质猫粮,吸引了越来越多养猫人的关注。新手养猫就弄不明白了,什么是冻干猫粮呢?冻干猫粮可以作为日常主食一直喂吗? 作为一位6年养猫人,我会用最简单的文字告诉你主食冻干…

安装NLTK Data

文章目录 NLTK离线安装1. 获取安装包2. 放置nltk_data文件3. Demo4. 参考链接 关注公众号:『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或CSDN滴滴我 nltk库是python语言为自然语言处理提供的一个功能强大,简单易用的函数库&a…