Shardingsphere整合Atomikos对XA分布式事务的支持(1)

分库分表后如何保证数据一致性?Sharding-JDBC整合XA分布式事务实践 当业务发展到一定规模,分库分表成为提升数据库吞吐的常见手段,但数据被拆分到多个物理库后,原本的本地事务便无法保证跨库操作的一致性,分布式事务由此成为关键议题。XA协议通过两阶段提交,由事务管理器统一协调各资源节点执行准备与提交,实现强一致性的跨库原子操作。Sharding-JDBC与Mybatis-Plus的整合,使得开发者只需少量注解即可接入XA事务,在订单、账户等敏感数据场景中高效落地。本文基于实际项目,梳理分库分表下的分布式事务挑战、XA核心机制及Atomikos配置实践,为同类工程提供参考。 阅读详情

Shardingsphere整合Atomikos对XA分布式事务的支持(1)

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。

分布式系统CAP理论

一致性(Consistency)
  • 一致性指 all nodes see the same data at the same time,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,不能存在中间状态。

  • 关于一致性,如果用户时刻看到的数据都是一致的,那么称之为强一致性。如果允许存在中间状态,只要求经过一段时间后,数据最终是一致的,则称之为最终一致性。此外,如果允许存在部分数据不一致,那么就称之为弱一致性

可用性(Availability)
  • 可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。有限的时间内是指:对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。

  • 返回结果是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果,不论这个结果是成功还是失败。

分区容错性(Partition tolerance )
  • 布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

X/Open DTP模型与XA规范

X/Open,即现在的open group,是一个独立的组织,主要负责制定各种行业技术标准。官网地址:http://www.opengroup.org/。X/Open组织主要由各大知名公司或者厂商进行支持,这些组织不光遵循X/Open组织定义的行业技术标准,也参与到标准的制定。下图展示了open group目前主要成员(官网截图):

DTP模型

  • 应用程序(Application Program ,简称AP):用于定义事务边界(即定义事务的开始和结束),并且在事务边界内对资源进行操作。

  • 资源管理器(Resource Manager,简称RM,一般也称为事务参与者):如数据库、文件系统等,并提供访问资源的方式。

  • 事务管理器(Transaction Manager ,简称TM,一般也称为事务协调者):负责分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚等。

XA规范

这里的接口规范特别多,我们只要来讲讲几个最重要的。

  • xa_start : 在 RM端调用此接口开启一个XA事务,后面需要接上XID 作为参数。

  • xa_end : 取消当前线程与事务的关联, 与 xa_start是配对使用。

  • xa_prepare : 询问RM 是否已经准备好了提交事务。

  • xa_commit : 通知RM 提交事务分支。

  • xa_rollback : 通知RM 提交回滚事务分支。

XA二阶段提交
  • 阶段一 :TM通知各个RM准备提交它们的事务分支。如果RM判断自己进行的工作可以被提交,那就就对工作内容进行持久化,再给TM肯定答复;要是发生了其他情况,那给TM的都是否定答复。在发送了否定答复并回滚了已经的工作后,RM就可以丢弃这个事务分支信息。

  • 阶段二 :TM根据阶段1各个RM prepare的结果,决定是提交还是回滚事务。如果所有的RM都prepare成功,那么TM通知所有的RM进行提交;如果有RM prepare失败的话,则TM通知所有RM回滚自己的事务分支。

MySQL对XA协议的支持

MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持XA事务。
MySQL 在DTP模型中也是属于资源管理器RM。

MySQL XA 事务的 SQL语法
XA START xid    //开启XA事务,xid是一个唯一值,表示事务分支标识符
XA END xid  //结束一个XA事务,
XA PREPARE xid 准备提交
XA COMMIT xid [ONE PHASE] //提交事务。两阶段提交协议中,如果只有一个RM参与,那么可以优化为一阶段提交
XA ROLLBACK xid  //回滚
XA RECOVER [CONVERT XID]  //列出所有处于PREPARE阶段的XA事务
MySQL xid详解

mysql中使用xid来作为一个事务分支的标识符。通过C语言进行描述,如下:

/∗
∗ Transaction branch identification: XID and NULLXID:
∗/
#define XIDDATASIZE 128  /∗ size in bytes ∗/
#define MAXGTRIDSIZE 64  /∗ maximum size in bytes of gtrid ∗/
#define MAXBQUALSIZE 64  /∗ maximum size in bytes of bqual ∗/
struct xid_t {
    long formatID;     /* format identifier */
    long gtrid_length; /* value 1-64 */
    long bqual_length; /* value 1-64 */
    char data[XIDDATASIZE];
    };
/∗
∗ A value of -1 in formatID means that the XID is null.
∗/
typedef struct xid_t XID;
/∗
∗ Declarations of routines by which RMs call TMs:
∗/
extern int ax_reg(int, XID ∗, long);
extern int ax_unreg(int, long);
  • gtrid :全局事务标识符(global transaction identifier),最大不能超过64字节。

  • bqual :分支限定符(branch qualifier),最大不能超过64字节。

  • formatId:记录gtrid、bqual的格式,类似于memcached中flags字段的作用。

  • data :xid的值,其是 gtrid和bqual拼接后的内容。。

MySQL XA事务状态

JTA规范

JTA(Java Transaction API):为J2EE平台提供了分布式事务服务(distributed transaction)的能力。某种程度上,可以认为JTA规范是XA规范的Java版,其把XA规范中规定的DTP模型交互接口抽象成Java接口中的方法,并规定每个方法要实现什么样的功能。

JTA 定义的接口
  • javax.transaction.TransactionManager : 事务管理器,负责事务的begin, commit,rollback 等命令。

  • javax.transaction.UserTransaction:用于声明一个分布式事务。

  • javax.transaction.TransactionSynchronizationRegistry:事务同步注册

  • javax.transaction.xa.XAResource:定义RM提供给TM操作的接口

  • javax.transaction.xa.Xid:事务xid接口。

TM provider:
  • 实现UserTransaction、TransactionManager、Transaction、TransactionSynchronizationRegistry、Synchronization、Xid接口,通过与XAResource接口交互来实现分布式事务。

RM provider:
  • XAResource接口需要由资源管理器者来实现,XAResource接口中定义了一些方法,这些方法将会被TM进行调用,如:

    • start方法:开启事务分支

    • end方法:结束事务分支

    • prepare方法:准备提交

    • commit方法:提交

    • rollback方法:回滚

    • recover方法:列出所有处于PREPARED状态的事务分支

ShardingSphere对XA分布式事务的支持

ShardingSphere针对XA分布式事务的接口以及JTA规范,提供了标准的,基于SPI实现的org.apache.shardingsphere.transaction.spi.ShardingTransactionManager。

public interface ShardingTransactionManager extends AutoCloseable {

    /**
     * Initialize sharding transaction manager.
     *
     * @param databaseType database type
     * @param resourceDataSources resource data sources
     */
    void init(DatabaseType databaseType, Collection<ResourceDataSource> resourceDataSources);

    /**
     * Get transaction type.
     *
     * @return transaction type
     */
    TransactionType getTransactionType();

    /**
     * Judge is in transaction or not.
     * 
     * @return in transaction or not
     */
    boolean isInTransaction();

    /**
     * Get transactional connection.
     *
     * @param dataSourceName data source name
     * @return connection
     * @throws SQLException SQL exception
     */
    Connection getConnection(String dataSourceName) throws SQLException;

    /**
     * Begin transaction.
     */
    void begin();

    /**
     * Commit transaction.
     */
    void commit();

    /**
     * Rollback transaction.
     */
    void rollback();
}

对于XA分布式事务的支持的具体实现类为 :org.apache.shardingsphere.transaction.xa.XAShardingTransactionManager。
在此类中,会调用基于SPI实现的org.apache.shardingsphere.transaction.xa.spi.XATransactionManager,来进行XA事务的管理操作。

总结

在此篇中,我们了解了分布式事务的CAP理论,了解了X/Open的DTP模型,以及XA的接口规范,MySQL对XA协议的支持。最好我们讲解了JTA的规范,以及ShardingSphere对XA事务进行整合的时候定义的SPI接口,这些都是很重要的理论基础,在下一篇,我们将详细来讲解基于AtomkikosXATransactionManager的具体实现,以及源码解析。

作者介绍:肖宇,Apache ShardingSphere Committer,开源hmily分布式事务框架作者,
开源soul网关作者,热爱开源,追求写优雅代码。目前就职入京东数科,参与ShardingSphere的开源建设,以及分布式数据库的研发工作。

扫码关注

ShardingSphere

ShardingSphere与Atomikos XA的分布式事务实现示例 最后,我们配置了一个XA事务管理器,指定了使用的数据源。通过以上示例代码,我们演示了如何使用ShardingSphere和Atomikos XA来实现分布式事务。通过合理配置和结合两者的功能,我们可以轻松处理跨多个数据库节点的事务操作。方法中,我们获取ShardingSphere和Atomikos的连接,并在各自的连接上执行操作。首先,我们需要初始化ShardingSphere的数据源和Atomikos的事务管理器。请注意,以上示例代码仅用于演示目的,实际使用时需要根据具体的业务需求进行适当的调整和优化。 阅读详情

相关推荐

Altium AD20的PCB板框绘制、定义板子形状、重新设置原点、放置尺寸标注

AD20的板框绘制与以前的版本不同,以前板框是在KeepOut层,而在AD20中没有这个层,绘制板框需要到机械层Mechanical1。 板框大小评估 首先进行板框大小评估。 工具 - 器件摆放 - 在矩形区域摆放。 之后通过鼠标框选矩形区域,元件会自动按照框选的范围进行摆放。这个操作可以重复多次,最后大致得出需要的板框尺寸。确定好后右键。 板框绘制,重新定义板子形状 点击下方的 Mechanical1,切换到机械层。放置线条,根据元件摆放来绘制PCB大致的形状,将元件完全包裹。

Mark_md的博客 10万+

ShardingSphere事务

ShardingSphere支持将普通的数据库连接池,转换为支持XA事务的连接池,对HikariCP, Druid和DBCP2连接池内置支持,无需额外配置。其它连接池需要用户实现的SPI接口进行扩展。

Mamba Out 891

欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”

蓝牙是怎么找设备的?扫描与广播的对话技术介绍

hoony123的博客 1381

ShardingSphere分库分表5-ShardingSphere的分布式事务详解

文章目录一、ShardingJDBC分布式事务快速上手LOCAL本地事务XA事务快速上手BASE柔性事务快速上手二、分布式事务原理详解XA事务Base柔性事务ShardingJDBC扩展分布式事务管理器三、ShardingProxy分布式事务示例 一、ShardingJDBC分布式事务快速上手 ShardingJDBC支持的分布式事务方式有三种 LOCAL, XA , BASE,这三种事务实现方式都是采用的对代码无侵入的方式实现的。具体见 TransactionTypeHolder.set(Transact

roykingw的专栏 2312

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 756

【NLP】文献翻译4——CH-SIMS:中文多模态情感分析数据集与细粒度的模态注释

CH-SIMS: A Chinese Multimodal Sentiment Analysis Dataset with Fine-grained Annotations of Modality摘要1. 介绍2. 相关工作2.1 多模态数据集2.2 多模态情感分析2.3 多任务学习3. CH-SIMS 数据集3.1 数据获取3.2 标注3.3 特征提取4. 多模式多任务学习框架4.1 单模态子网4.2 特征融合网络4.3 优化目标5. 实验5.1 基准5.2 实验的细节5.3 结果和讨论5.3.1 与

YoungSeng's Blog 1万+

Shardingsphere整合Atomikos对XA分布式事务的支持(2)

Shardingsphere整合Atomikos对XA分布式事务的支持(2)Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC...

ShardingSphere官微 2351

从UE4到Unity:双叶高光技术在角色皮肤渲染中的移植全流程

本文详细解析了将UE4中的双叶高光技术移植到Unity引擎的全流程。该技术通过模拟皮肤油脂层和真皮层的不同反射特性,能显著提升角色皮肤渲染的真实感。文章从核心原理、贴图资产处理、Shader代码重构到参数调校,提供了完整的跨引擎移植实战指南,帮助开发者实现高质量的皮肤质感还原。

alice7model的博客 478

ShardingSphere分布式事务详解

ShardingJDBC支持的分布式事务方式有三种 LOCAL, XA , BASE,这三种事务实现方式都是采用的对代码无侵入的方式实现的。

Zhuxiaoyu_91的博客 2317

文档多模态识别工具对比:MinerU、PaddleOCR、Marker

本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC

朴拙科技的博客 4744

第10章: MMU notifier与HMM的协作

本文摘要: HMM(Heterogeneous Memory Management)是Linux内核提供的异构内存管理框架,用于统一CPU与设备(如GPU、DSP等)的内存访问。它通过镜像页表技术实现虚拟地址空间共享,自动同步CPU和设备页表变化,支持透明的内存迁移和设备内存管理。HMM构建在mmu_interval_notifier机制上,利用序列号检测页表修改冲突,提供高效并发控制。核心数据结构包括hmm_range和HMM PFN标志位,通过hmm_range_fault()实现页表遍历和缺页处理。

图形/计算GPU的驱动与虚拟化技术分享园地 3094

atomikos分布式事务_Shardingsphere整合Atomikos对XA分布式事务的支持(1)

Shardingsphere整合Atomikos对XA分布式事务的支持(1)Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种...

weixin_35057726的博客 1028

YOLOv8极速瘦身实战:LAMP剪枝让模型又快又准

一个庞大的模型虽然强大,但在实际部署,尤其是资源受限的边缘设备(如无人机、移动电话、嵌入式系统)上,却面临着严峻的挑战:高昂的内存占用、巨大的计算量以及随之而来的高延迟和高能耗。本教程从LAMP剪枝的深刻理论出发,详细解释了它如何通过最小化最坏情况下的L2失真,并借助巧妙的数学简化,最终推导出一种高效、无超参数、层自适应的剪枝策略。它如同为臃肿的模型进行一次精准的“瘦身手术”,通过移除网络中冗余或不重要的权重、神经元甚至整个结构,来显著降低模型的参数量和计算量(FLOPs),从而实现推理加速和资源节约。

FJN110的博客 258

万字长文详解Shardingsphere对XA分布式事务的支持

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。 ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。 分布式系统CAP理论 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存

ShardingSphere官微 5401

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深度剖析Apache Shardingsphere对分布式事务的支持

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部...

朱小厮的博客 1898

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ShardingSphere之Sharding-JDBC整合XA模式、Saga模式、Seata原理介绍以及代码演示

ShardingSphere之Sharding-JDBC整合XA模式、Saga模式、Seata原理介绍以及代码演示

weixin_44795847的博客 2595

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

表弟写了一万字,就是要讲清楚分布式事务 XA

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 354

ShardingSphere官网操作指南补充和重点整理-分布式事务-参考示例(十二)

分布式事务 ShardingDataSource已经整合了分布式事务的功能,因此不需要用户进行额外的配置,每次获取ShardingConnection前,通过修改TransactionTypeHolder,可以对事务类型进行切换。 XA事务 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere&...

astra_zhao的专栏 2929

SpringBoot与ShardingSphere整合,重构高并发库存扣减场景的分布式事务模型

订单创建和库存扣减操作必须保证原子性,避免出现超卖或欠卖的情况,利用 ShardingSphere 的分布式事务管理功能,确保跨多个数据库的操作具有一致性。XA 事务支持:ShardingSphere 提供了 XA 协议的支持,确保跨多个数据库的操作具有强一致性,即使在分布式环境下也能保持数据的一致性。柔性事务:除了 XA 事务外,ShardingSphere 还支持柔性事务解决方案,如 Saga 和 BASE 模型,以适应不同的业务场景。灵活的分片策略:可以根据不同的业务需求选择合适的分片算法(如。

qq_18244417的博客 547

<span class=“js_title_inner“>SpringBoot与ShardingSphere整合,重构高并发库存扣减场景的分布式事务模型</span>

订单创建和库存扣减操作必须保证原子性,避免出现超卖或欠卖的情况,利用 ShardingSphere 的分布式事务管理功能,确保跨多个数据库的操作具有一致性。XA 事务支持:ShardingSphere 提供了 XA 协议的支持,确保跨多个数据库的操作具有强一致性,即使在分布式环境下也能保持数据的一致性。柔性事务:除了 XA 事务外,ShardingSphere 还支持柔性事务解决方案,如 Saga 和 BASE 模型,以适应不同的业务场景。灵活的分片策略:可以根据不同的业务需求选择合适的分片算法(如。

qq_18244417的博客 339

Sharding-JDBC分布式事务实战与优化指南

分布式事务是微服务架构中的关键技术,用于确保跨数据库操作的数据一致性。其核心原理包括两阶段提交(2PC)和柔性事务(BASE理论),前者保证强一致性但性能较低,后者通过最终一致性提升系统吞吐量。Sharding-JDBC作为Apache ShardingSphere生态的核心组件,整合了XA、Saga、Seata等多种事务模式,特别适合分库分表场景下的数据一致性保障。在实际工程中,开发者需要根据业务场景选择合适的事务模型:金融支付等强一致性需求推荐XA模式,而电商订单等长流程业务可采用Saga模式配合补偿机

weixin_34195364的博客 373

Sharding-JDBC分布式事务实战

简介 ShardingSphere整合了XA、Saga和Seata模式后,为分布式事务控制提供了极大的便利,我们可以在 应用程序编程时,采用以下统一模式进行使用。 实战 引入Maven依赖 //XA模式 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-transaction-xa-core</artifactId> &l

jiqiren1994的博客 1400

Sharding-JDBC分库分表实战:从原理到Spring Boot整合与避坑指南

在应对海量数据存储与高并发访问时,数据库的水平扩展是核心技术挑战之一。其核心原理是通过将数据分散到多个数据库或数据表中,以突破单机性能瓶颈。这一技术为系统带来了显著的扩展性与性能提升价值,广泛应用于电商、金融、社交等需要处理大规模用户数据的业务场景。作为该领域的轻量级Java框架,Sharding-JDBC(现为Apache ShardingSphere-JDBC)通过在应用层透明地拦截与改写JDBC操作,实现了对业务代码无侵入的分库分表能力。本文聚焦于其与Spring Boot的整合实践,深入解析了分片键

weixin_34342905的博客 353

Apache ShardingSphere 数据分片实战:从核心原理到避坑指南

数据分片(Sharding)是解决数据库水平扩展、应对海量数据增长的核心技术之一。其基本原理是将单一数据库中的数据,按照特定规则(如取模、范围)分布到多个数据库或表中,从而突破单机性能瓶颈。这项技术的核心价值在于,它能让应用程序像操作单一数据库一样进行数据访问,而由中间件透明地处理复杂的数据路由、SQL改写与结果归并,极大地提升了系统的可扩展性。在实际的工程实践中,数据分片被广泛应用于高并发、大数据量的互联网业务场景,如电商交易、用户中心、日志分析等。然而,实现高效的分布式数据访问并非易事,其中涉及分片键设

weixin_33889245的博客 319

SSM框架核心原理与高频面试题深度解析

控制反转(IoC)和面向切面编程(AOP)是Spring框架的两大核心设计理念。IoC容器通过Bean的生命周期管理实现组件解耦,而AOP则基于动态代理技术实现横切关注点的模块化。MyBatis作为优秀的ORM框架,其SQL映射和缓存机制能显著提升数据访问效率。在Java企业级开发中,SSM(Spring+SpringMVC+MyBatis)组合因其轻量级和灵活性成为经典选择。本文深入剖析Spring事务传播机制、MyBatis动态SQL实现等关键技术点,特别针对循环依赖、批量插入优化等典型面试场景提供解决

weixin_34356555的博客 511
上一篇: Apache ShardingSphere 5.0.0-alpha版本发布
下一篇: 万字长文详解Shardingsphere对XA分布式事务的支持
ShardingSphere
博客等级 码龄7年 447粉丝 137原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值