双十一线上服务调用链路追踪SkyWalking实战分析
序言
随着电商行业的飞速发展,双十一购物节已成为全球最大的购物狂欢节之一。在双十一期间,电商平台需要处理海量的用户请求和订单,这对系统的稳定性和性能提出了极高的要求。为了确保系统在高并发环境下的稳定运行,对线上服务的调用链路进行追踪和分析显得尤为重要。本文将通过实战案例,详细介绍如何在双十一期间使用SkyWalking对线上服务进行调用链路追踪,并结合Seata实现分布式事务管理,从而保障系统的稳定性和性能。
场景案例描述
背景介绍
某知名电商平台计划在双十一期间推出大规模促销活动,预计用户访问量和交易量将激增。为了确保系统能够应对高并发访问,平台技术团队决定引入调用链路追踪和分布式事务管理技术。具体来说,技术团队希望通过SkyWalking实现调用链路的实时监控和分析,同时利用Seata处理分布式事务,确保数据的一致性和完整性。
技术挑战
- 高并发处理:双十一期间,系统需要处理比平时高出数倍甚至数十倍的并发请求,这对系统的负载能力和响应速度提出了巨大挑战。
- 调用链路复杂:电商平台的业务逻辑通常涉及多个微服务之间的调用,调用链路复杂且难以追踪。
- 数据一致性:在分布式系统中,如何确保多个服务之间的数据一致性是一个关键问题。
解决业务场景思路
引入SkyWalking进行调用链路追踪
SkyWalking是一个开源的APM(应用性能监控)和可观测性分析平台,专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。通过SkyWalking,技术团队可以实时监控和分析系统的调用链路,快速定位性能瓶颈和故障点。
SkyWalking的核心功能
- 分布式追踪:追踪分布式系统中的请求流,记录请求在各个组件之间的传递过程,识别性能瓶颈。
- 性能监控:监控关键性能指标,如响应时间、吞吐量等,帮助了解系统的整体性能表现。
- 问题排查:提供详细的跟踪信息,帮助快速定位和解决系统中的问题。
- 可视化界面:提供丰富的图表分析功能,如拓扑图、调用链路分析、性能趋势等。
SkyWalking的架构组件
- 探针(Agent):负责收集应用运行时的性能数据,如方法调用、服务调用、异常等。探针以非侵入的方式工作,对应用程序的性能影响非常小。
- 平台后端(OAP):负责接收探针发送的数据,并进行数据的聚合、分析和存储。OAP支持水平扩展,可以通过增加节点来处理更多的数据。
- 展示页面(UI):提供了一个直观的界面,用于展示监控数据和分析结果。UI支持多种图表和视图,如拓扑图、服务地图、调用链、性能指标等。
- 存储:支持多种存储解决方案,如MySQL、ElasticSearch、H2等,以适应不同的部署需求和性能要求。
使用Seata管理分布式事务
Seata是一个开源的分布式事务解决方案,由阿里巴巴和蚂蚁金服共同研发。它提供了一种对业务代码侵入性较小的方式来处理分布式事务问题,确保多个服务间的操作可以保持原子性和一致性。
Seata的核心组件
- TC(Transaction Coordinator):事务协调者,负责维护全局和分支事务的状态,驱动全局事务提交或回滚。
- TM(Transaction Manager):事务管理器,定义全局事务的范围,负责开始全局事务,并在事务结束时根据业务执行的结果发起全局提交或全局回滚的请求给TC。
- RM(Resource Manager):资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务的提交或回滚。
Seata的事务模式
- AT模式:基于数据库层面的自动补偿机制,通过拦截SQL语句并在数据库中记录回滚日志来达到分布式事务的一致性。
- TCC模式:一种编程模型,要求业务开发人员实现Try(尝试)、Confirm(确认)和Cancel(取消)三个接口方法,以手动编写业务补偿逻辑。
- SAGA模式:通过一系列子事务的正向和逆向操作序列来实现最终一致性。
实战步骤
1. 部署SkyWalking
首先,需要在服务器上部署SkyWalking。下载SkyWalking的压缩包并解压,然后编辑配置文件application.yml,配置存储后端(如ElasticSearch)和其他相关参数。启动SkyWalking OAP服务和Web UI服务。
yaml复制代码
# application.yml 配置文件示例
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/skywalking"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
启动命令:
bash复制代码
# 启动SkyWalking OAP服务
./bin/startup.sh oap
# 启动SkyWalking Web UI服务
./bin/startup.sh webapp
2. 集成SkyWalking Agent
在电商平台的各个微服务中集成SkyWalking Agent,以便收集调用链路数据。将Agent的JAR包添加到每个服务的启动参数中,并配置服务名称和Collector地址。
bash复制代码
# 启动服务时添加SkyWalking Agent参数
java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=YourServiceName -Dskywalking.collector.backend_service=localhost:11800 -jar your-application.jar
3. 部署Seata服务
下载并部署Seata服务,配置事务日志存储(如MySQL)和其他相关参数。启动Seata服务。
yaml复制代码
# Seata配置文件示例
store:
mode: db
db:
datasource: druid
dbType: mysql
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/seata
user: mysql
password: mysql
启动命令:
bash复制代码 # 启动Seata服务 ./seata-server.sh start
4. 集成Seata客户端
在电商平台的各个微服务中集成Seata客户端,配置事务组名称和服务地址。在每个需要分布式事务支持的方法上添加@GlobalTransactional注解。
java复制代码
// 在Spring Boot应用的主类上添加注解
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableGlobalTransaction
public class YourApplication {
public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}
}
// 在需要分布式事务支持的方法上添加注解
@Service
public class YourService {
@GlobalTransactional
public void yourTransactionalMethod() {
// 业务逻辑代码}
}
5. 监控与分析
启动电商平台服务,并通过SkyWalking Web UI监控调用链路和性能指标。在双十一期间,技术团队可以实时监控系统的调用情况和性能指标,快速定位和解决性能瓶颈和故障点。
同时,通过Seata确保分布式事务的一致性。在事务提交或回滚时,Seata会协调各个分支事务的状态,确保数据的一致性。
底层原理介绍
SkyWalking的工作原理
SkyWalking通过探针(Agent)收集应用运行时的性能数据,并将数据发送到平台后端(OAP)进行处理和存储。OAP对收集到的数据进行聚合、分析和存储,并通过展示页面(UI)提供可视化展示。
Trace与Span
- Trace:表示一次完整的请求处理过程,从客户端发起请求到服务器返回响应结束。每个Trace有一个唯一的Trace ID来标识。
- Span:是Trace的基本单元,代表请求在单个服务节点上的处理过程。每个Span有自己的Span ID,并且包含在特定的Trace中。
数据采集与传输
SkyWalking Agent通过字节码增强技术,拦截服务的方法调用和数据库操作等,生成Span数据。Agent将Span数据打包后发送到OAP进行处理。
数据存储与查询
OAP将处理后的数据存储到配置的存储后端中(如ElasticSearch)。用户可以通过SkyWalking UI查询和分析存储的数据,了解系统的调用链路和性能指标。
Seata的工作原理
Seata通过引入全局事务的概念,将分布式事务划分为多个局部的分支事务。Seata通过TC、TM和RM三个关键组件来协调和管理分布式事务。
全局事务与分支事务
- 全局事务:由TM开启,并分配一个全局唯一的事务ID(XID)。
- 分支事务:参与全局事务的局部事务,由RM管理。每个分支事务在提交或回滚时,都会向TC报告状态。
两阶段提交协议
Seata采用两阶段提交协议来确保分布式事务的一致性。
- 第一阶段(准备阶段):
-
- TM开启全局事务,并分配XID。
- RM注册分支事务,并记录操作日志(Undo Log和Redo Log)。
- RM向TC报告分支事务的准备状态。
- 第二阶段(提交/回滚阶段):
-
- TC根据所有分支事务的准备状态,决定全局事务是提交还是回滚。
- TC通知所有RM提交或回滚分支事务。
- RM根据TC的指令,执行提交或回滚操作,并利用Undo Log或Redo Log进行补偿。
总结
通过在双十一期间引入SkyWalking进行调用链路追踪和Seata管理分布式事务,电商平台技术团队能够实时监控和分析系统的调用链路和性能指标,快速定位和解决性能瓶颈和故障点。同时,Seata确保了分布式事务的一致性,保障了数据的完整性和可靠性。这种组合方案为电商平台在双十一期间的高并发访问和交易处理提供了有力的技术保障。
未来,随着云原生和分布式架构的普及,分布式追踪和监控技术将进一步发展。SkyWalking和Seata等开源项目将不断完善和扩展其功能,为开发者提供更加全面和高效的解决方案。同时,结合机器学习和AI算法等智能化技术,分布式监控系统将能够自动识别性能异常和故障模式,实现主动式监控和自动化运维,进一步提升系统的稳定性和可靠性。
相关文章:
双十一线上服务调用链路追踪SkyWalking实战分析
序言 随着电商行业的飞速发展,双十一购物节已成为全球最大的购物狂欢节之一。在双十一期间,电商平台需要处理海量的用户请求和订单,这对系统的稳定性和性能提出了极高的要求。为了确保系统在高并发环境下的稳定运行,对线上服务的…...
网络安全究竟是什么? 如何做好网络安全
网络安全是如何工作的呢? 网络安全结合多层防御的优势和网络。每个网络安全层实现政策和控制。授权用户访问网络资源,但恶意参与者不得进行攻击和威胁。 我如何受益于网络安全? 数字化改变了我们的世界。我们的生活方式、工作、玩耍,和学习都发生了变化。每个组织希望提供…...
【C++】入门【一】
本节目标 一、C关键字(C98) 二、命名空间 三、C的输入输出 四、缺省函数 五、函数重载 六、引用 七、内联函数 八、auto关键字(C11) 九、范围for(C11) 十、指针空值nullptr(C11) 一.…...
【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据
经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另:Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影: 目标投影:与MODIS数据相同(Sinu…...
python学opencv|读取图像
【1】引言 前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下: OpenCV: Getting Started with Images 不过读起来是英文版,可能略有难度,所以另推荐一…...
ffmpeg RTP PS推流
要实现 CRtpSendPs 类,使其能够将 H264 数据通过 RTP PS 流推送到指定的 URL,并支持 TCP 和 UDP 传输方式,您需要使用 FFmpeg 库。以下是该类的实现示例,包括必要的初始化、推流和退出函数。 步骤 初始化 FFmpeg 库:…...
Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)
tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…...
NUMA架构及在极速网络IO场景下的优化实践
NUMA技术原理 NUMA架构概述 随着多核CPU的普及,传统的对称多处理器(SMP)架构逐渐暴露出性能瓶颈。为了应对这一问题,非一致性内存访问(NUMA, Non-Uniform Memory Access)架构应运而生。NUMA架构是一种内存…...
Brain.js 用于浏览器的 GPU 加速神经网络
Brain.js 是一个强大的 JavaScript 库,它允许开发者在浏览器和 Node.js 环境中构建和训练神经网络 。这个库的目的是简化机器学习模型的集成过程,使得即使是没有深厚机器学习背景的开发者也能快速上手 。 概述 Brain.js 提供了易于使用的 APIÿ…...
Linux——用户级缓存区及模拟实现fopen、fweite、fclose
linux基础io重定向-CSDN博客 文章目录 目录 文章目录 什么是缓冲区 为什么要有缓冲区 二、编写自己的fopen、fwrite、fclose 1.引入函数 2、引入FILE 3.模拟封装 1、fopen 2、fwrite 3、fclose 4、fflush 总结 前言 用快递站讲述缓冲区 收件区(类比输…...
视觉感知与处理:解密计算机视觉的未来
文章目录 前言1. 计算机视觉的概述2. 计算机视觉的应用3. 运动感知与光流4. 人类视觉感知4.1 大脑中的视觉处理4.2 视觉缺陷与对比4.3 分辨率4.4 视觉错觉5. 图像采集与处理6. 图像处理流程7. 二值图像处理与分割8. 3D 机器视觉系统8.1 主动3D视觉8.2 立体视觉9. 商业机器视觉系…...
【大数据学习 | Spark-Core】广播变量和累加器
1. 共享变量 Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。 累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象,…...
postgresql按照年月日统计历史数据
1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…...
pywin32库 -- 读取word文档中的图形
文章目录 前置操作解析body中的图形解析页眉中的图形 前置操作 基于pywin32打开、关闭word应用程序; import pythoncom from win32com.client import Dispatch, GetActiveObjectdef get_word_instance():""" 获取word进程 实例"""py…...
GitLab使用示例
以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab,进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…...
uniapp echarts tooltip formation 不识别html
需求: echarts 的tooltip 的域名太长,导致超出屏幕 想要让他换行 思路一: 用formation自定义样式实现换行 但是: uniapp 生成微信小程序, echart种的tooltip 的formation 识别不了html ,自定义样式没办…...
3D扫描对文博行业有哪些影响?
三维扫描技术对文博行业产生了深远的影响,主要体现在以下几个方面: 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备,能够捕捉到文物的每一个细节,包括形状、纹理、颜色等,从而生成逼真的3D模型。这些模…...
面试(十一)
目录 一.IO多路复用 二.为什么有IO多路复用机制? 三.IO多路复用的三种实现方式 3.1 select select 函数接口 select 使用示例 select 缺点 3.2 poll poll函数接口 poll使用示例 poll缺点 3.3 epoll epoll函数接口 epoll使用示例 epoll缺点 四. 进程和线程的区别…...
React-useState的使用
useState 是 React 提供的一个 Hook,允许你在函数组件中添加和管理状态(state)。在类组件中,状态管理通常是通过 this.state 和 this.setState 来实现的,而在函数组件中,useState 提供了类似的功能。 基本…...
设计模式之破环单例模式和阻止破坏
目录 1. 序列化和反序列化2. 反射 这里单例模式就不多说了 23种设计模式之单例模式 1. 序列化和反序列化 这里用饿汉式来做例子 LazySingleton import java.io.Serializable;public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
