双十一线上服务调用链路追踪SkyWalking实战分析

news2024/11/28 22:23:02

序言

随着电商行业的飞速发展,双十一购物节已成为全球最大的购物狂欢节之一。在双十一期间,电商平台需要处理海量的用户请求和订单,这对系统的稳定性和性能提出了极高的要求。为了确保系统在高并发环境下的稳定运行,对线上服务的调用链路进行追踪和分析显得尤为重要。本文将通过实战案例,详细介绍如何在双十一期间使用SkyWalking对线上服务进行调用链路追踪,并结合Seata实现分布式事务管理,从而保障系统的稳定性和性能。

场景案例描述

背景介绍

某知名电商平台计划在双十一期间推出大规模促销活动,预计用户访问量和交易量将激增。为了确保系统能够应对高并发访问,平台技术团队决定引入调用链路追踪和分布式事务管理技术。具体来说,技术团队希望通过SkyWalking实现调用链路的实时监控和分析,同时利用Seata处理分布式事务,确保数据的一致性和完整性。

技术挑战

  1. 高并发处理:双十一期间,系统需要处理比平时高出数倍甚至数十倍的并发请求,这对系统的负载能力和响应速度提出了巨大挑战。
  2. 调用链路复杂:电商平台的业务逻辑通常涉及多个微服务之间的调用,调用链路复杂且难以追踪。
  3. 数据一致性:在分布式系统中,如何确保多个服务之间的数据一致性是一个关键问题。

解决业务场景思路

引入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采用两阶段提交协议来确保分布式事务的一致性。

  1. 第一阶段(准备阶段)
    • TM开启全局事务,并分配XID。
    • RM注册分支事务,并记录操作日志(Undo Log和Redo Log)。
    • RM向TC报告分支事务的准备状态。
  1. 第二阶段(提交/回滚阶段)
    • TC根据所有分支事务的准备状态,决定全局事务是提交还是回滚。
    • TC通知所有RM提交或回滚分支事务。
    • RM根据TC的指令,执行提交或回滚操作,并利用Undo Log或Redo Log进行补偿。

总结

通过在双十一期间引入SkyWalking进行调用链路追踪和Seata管理分布式事务,电商平台技术团队能够实时监控和分析系统的调用链路和性能指标,快速定位和解决性能瓶颈和故障点。同时,Seata确保了分布式事务的一致性,保障了数据的完整性和可靠性。这种组合方案为电商平台在双十一期间的高并发访问和交易处理提供了有力的技术保障。

未来,随着云原生和分布式架构的普及,分布式追踪和监控技术将进一步发展。SkyWalking和Seata等开源项目将不断完善和扩展其功能,为开发者提供更加全面和高效的解决方案。同时,结合机器学习和AI算法等智能化技术,分布式监控系统将能够自动识别性能异常和故障模式,实现主动式监控和自动化运维,进一步提升系统的稳定性和可靠性。

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

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

相关文章

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件 文章目录 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件什么是 exe4j准备工作打包 Spring Boot 项目为 EXE 文件1.启动 exe4j2. 选择项目类型3. 配置项目名称和输出目录4. 配置项目类型或可执行文件名称5. java配…

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对…

阿里Qwen系列开源模型介绍

模型种类丰富 Qwen2:包含Qwen2-0.5b、Qwen2-1.5b、Qwen2-7b、Qwen2-57b-a14b以及Qwen2-72b等五种规模的预训练和指令微调模型,其在多语言处理、长文本处理、代码生成、数学和逻辑推理等能力上,在mmlu、gpqa、humaneval等国际测评中得到了验证…

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟,基于 Java 开发的小程序电商商城开源源码,为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行,可以实现管理员;首页、个人中心、用户…

开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序源码助力品牌共建:价值、策略与实践

摘要:在当今数字化商业环境下,品牌构建已演变为企业与消费者深度共建的过程。本文聚焦于“开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序源码”,探讨其如何融入品牌建设,通过剖析品牌价值构成,阐述该技术工具在助力…

力扣797. 所有可能的路径

算法思想 深度优先搜索(DFS): 使用递归从节点 0 开始,探索所有从当前节点到终点 n−1 的路径。每次访问一个节点时,将该节点加入当前路径 path。 回溯法: 在递归返回时,通过 path.pop_back()…

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢? 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时,选择合适的配置Flash是我们进行硬件设计必须考虑的,那么配置Flash大小的选择由什…

Git简单介绍

一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN) VS 分布式(git) 集中式版本控制系统,版本库是集中存放在中央服务器的,工作时要先从中央…

FreeSWITCH 简单图形化界面34 - 网络环境安全的情况下,进行任意SIP注册

FreeSWITCH 简单图形化界面34 -网络环境安全的情况下,进行任意SIP注册 测试环境1、前言2、参数3、实践一下 测试环境 http://myfs.f3322.net:8020/ 用户名:admin,密码:admin FreeSWITCH界面安装参考:https://blog.cs…

力扣 二叉树的层序遍历-102

二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…

鸿蒙学习使用本地真机运行应用/元服务 (开发篇)

文章目录 1、前提条件2、使用USB连接方式3、使用无线调试连接方式4、运行 1、前提条件 在Phone和Tablet中运行HarmonyOS应用/元服务的操作方法一致&#xff0c;可以采用USB连接方式或者无线调试的连接方式。两种连接方式是互斥的&#xff0c;只能使用一种&#xff0c;无法同时…

数据库导论

data 数据是数据库中存储的基本数据&#xff0c;描述事物的符号称为数据。 DB 数据库是长期存储在计算机内&#xff0c;有组织&#xff0c;可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织&#xff0c;描述和存储&#xff0c;具有较小的冗余度&#xff0c;较…

数据结构 ——— 归并排序算法的实现

目录 归并排序的思想 归并排序算法的实现 归并排序的思想 将已经有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序后&#xff0c;再使子序列段间有序 若将两个有序表合并成一个有序表&#xff0c;称为二路归并 归并排序步骤示意图&#x…

【数据结构】【线性表】一文讲完队列(附C语言源码)

队列 队列的基本概念基本术语基本操作 队列的顺序实现顺序队列结构体的创建顺序队列的初始化顺序队列入队顺序队列出队顺序队列存在的问题分析循环队列代码汇总 队列的链式实现链式队列的创建链式队列初始化-不带头结点链式队列入队-不带头节点链式队列出队-不带头结点带头结点…

chrome允许http网站打开摄像头和麦克风

第一步 chrome://flags/#unsafely-treat-insecure-origin-as-secure 第二步 填入网址&#xff0c;点击启用 第三步 重启 Chrome&#xff1a;设置完成后&#xff0c;点击页面底部的 “Relaunch” 按钮&#xff0c;重新启动 Chrome 浏览器&#xff0c;使更改生效。

Spring Boot教程之十: 使用 Spring Boot 实现从数据库动态下拉列表

使用 Spring Boot 实现从数据库动态下拉列表 动态下拉列表&#xff08;或依赖下拉列表&#xff09;的概念令人兴奋&#xff0c;但编写起来却颇具挑战性。动态下拉列表意味着一个下拉列表中的值依赖于前一个下拉列表中选择的值。一个简单的例子是三个下拉框&#xff0c;分别显示…

DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放

提示&#xff1a;视频转hls流加密、web解密播放 需求&#xff1a;研究视频截屏时&#xff0c;播放器变黑&#xff0c;所以先研究的视频转hls流加密 文章目录 [TOC](文章目录) 前言一、工具ffmpeg、openssl二、后端nodeexpress三、web播放四、文档总结 前言 ‌HLS流媒体协议‌&a…

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5&#xff1a;卷积神经网络的先驱 LeNet-5的关键特点&#xff1a; 2. AlexNet&#xff1a;深度学习的突破 AlexNet的关键特点&#xff1a; 3. VGGNet&#xff1a;深度与简洁的平衡 VGGNet的关键特点&#xff1a; 4. ResNe…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜…

华为云云连接+squid进行正向代理上网冲浪

1 概述 ‌Squid‌是一个高性能的代理缓存服务器&#xff0c;主要用于缓冲Internet数据。它支持多种协议&#xff0c;包括FTP、gopher、HTTPS和HTTP。Squid通过一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求&#xff0c;这使得它在处理请求时具有较高的效率‌。…