蚂蚁金服 Service Mesh 大规模落地系列 - RPC 篇

蚂蚁金服 Service Mesh 深度实践 作者丨敖小剑 2019 年,蚂蚁金服在 Service Mesh 领域继续高歌猛进,进入大规模落地的深水区。本文介绍了 Service Mesh 在蚂蚁金服的落地情况和即将来临的双十一大考,以及大规模落地时遇到的困难和解决方案,助你了解 Service Mesh 的未来发展方向和前景。 一、前言 大家好,我是敖小剑,来自蚂蚁金服中间件团队,今天带来的主题是“诗和远方:蚂蚁金服 Service... 阅读详情

蚂蚁金服云原生负责人鲁直 双十一后首次线下分享

引言

Service Mesh 是蚂蚁金服下一代架构的核心,本主题主要分享在蚂蚁金服当前的体量下,我们如何做到在奔跑的火车上换轮子,将现有的 SOA(service-oriented architecture,面向服务的架构)体系快速演进至 Service Mesh 架构。聚焦 RPC 层面的设计和改造方案,本次将分享蚂蚁金服双十一核心应用是如何将现有的微服务体系平滑过渡到 Service Mesh 架构下并降低大促成本。

蚂蚁金服每年双十一大促会面临非常大的流量挑战,在已有 LDC(Logical Data Center,逻辑数据中心,是蚂蚁金服原创的一种“异地多活单元化架构”实现方案)微服务架构下已支撑起弹性扩容能力。

本次分享主要分为 5 部分:
  • Service Mesh 简介;

  • 为什么要 Service Mesh;

  • 方案落地;

  • 分时调度案例;

  • 思考与未来;

作者简介


黄挺(花名:鲁直):蚂蚁金服云原生负责人 主要 Focus 领域:

  • SOFAStack 微服务领域;

  • Service Mesh,Serverless 等云原生领域;

雷志远(花名:碧远):蚂蚁金服 RPC 框架负责人 主要 Focus 领域:

  • 服务框架:SOFARPC(已开源);

  • Service Mesh:MOSN(已开源);

SOFARPC:https://github.com/sofastack/sofa-rpc

MOSN:https://github.com/sofastack/sofa-mosn

Service Mesh 简介

在讲具体的蚂蚁金服落地之前,想先和大家对齐一下 Service Mesh 的概念和蚂蚁金服对应的产品。这张图大家可能不陌生,这是业界普遍认可的 Service Mesh 架构,对应到蚂蚁金服的 Service Mesh 也分为控制面和数据面,分别叫做 SOFAMesh 和 MOSN,其中 SOFAMesh 后面会以更加开放的姿态参与到 Istio 里面去。

今天我们讲的实践主要集中在 MOSN 上,以下我的分享中提到的主要就是集中在数据面上的落地,这里面大家可以看到,我们有支持 HTTP/SOFARPC/Dubbo/WebService。

为什么我们要 Service Mesh

有了一个初步的了解之后,可能大家都会有这样一个疑问,你们为什么要 Service Mesh,我先给出结论:

因为我们要解决在 SOA 下面,没有解决但亟待解决的:基础架构和业务研发的耦合,以及未来无限的对业务透明的稳定性与高可用相关诉求。

那么接下来,我们一起先看看在没有 Service Mesh 之前的状况。

在没有 Service Mesh 之前,整个 SOFAStack 技术演进的过程中,框架和业务的结合相当紧密,对于一些 RPC 层面的需求,比如流量调度、流量镜像、灰度引流等,是需要在 RPC 层面进行升级开发支持,同时需要业务方来升级对应的中间件版本,这给我们带来了一些困扰和挑战。如图所示:

  • 线上客户端框架版本不统一;

  • 业务和框架耦合,升级成本高,很多需求由于在客户端无法推动,需要在服务端做相应的功能,方案不够优雅;

  • 机器逐年增加,如果不增加机器,如何度过双十一;

  • 在基础框架准备完成后,对于新功能,不再升级给用户的 API 层是否可行; 

  • 流量调拨,灰度引流,蓝绿发布,AB Test 等新的诉求;

这些都困扰着我们。我们知道在 SOA 的架构下,负责每个服务的团队都可以独立地去负责一个或者多个服务,这些服务的升级维护也不需要其他团队的接入,SOA 其实做到了团队之间可以按照接口的契约来接耦。但是长期以来,基础设施团队需要推动很多事情,都需要业务团队进行紧密的配合,帮忙升级 JAR 包,基础设施团队和业务团队在工作上的耦合非常严重,上面提到的各种问题,包括线上客户端版本的不一致,升级成本高等等,都是这个问题带来的后果。

而 Service Mesh 提供了一种可能性,能够将基础设施下沉,让基础设施团队和业务团队能够解耦,让基础设施和业务都可以更加快步地往前跑。

我们的方案

说了这么多,那我们怎么解决呢?我们经历了这样的选型思考。

总体目标架构

我们的 MOSN 支持了 Pilot、自有服务发现 SOFARegistry 和自有的消息组件,还有一些 DB 的组件。在产品层,提供给开发者不同的能力,包括运维、监控、安全等能力,这个是目前我们的一个线上状态。

SOFARegistry 是蚂蚁金服开源的具有承载海量服务注册和订阅能力的、高可用的服务注册中心,在支付宝/蚂蚁金服的业务发展驱动下,近十年间已经演进至第五代。

SOFARegistry:https://github.com/sofastack/sofa-registry

看上去很美好,要走到这个状态,我们要回答业务的三个灵魂拷问。

这三个问题后面,分别对应着业务的几大诉求,大家做过基础框架的应该比较有感触。

框架升级方案

准备开始升级之后,我们要分析目前我们的线上情况,而我们现在线上的情况,应用代码和框架有一定程度的解耦,用户面向的是一个 API,最终代码会被打包在 SOFABoot 中运行起来。

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。

SOFABoot:https://github.com/sofastack/sofa-boot

那么,我们就可以在风险评估可控的情况下,直接升级底层的 SOFABoot。在这里,我们的 RPC 会检测一些信息,来确定当前 Pod 是否需要开启 MOSN 的能力。然后我们完成如下的步骤。

我们通过检测 PaaS 传递的容器标识,知道自己是否开启了 MOSN,则将发布和订阅给 MOSN,然后调用不再寻址,直接完成调用。

可以看到,通过批量的运维操作,我们直接修改了线上的 SOFABoot 版本,以此来直接使得现有的应用具备了 MOSN 的能力。有些同学可能会问,那你一直这么做不行吗?不行,因为这个操作是要配合流量关闭等操作来运行的,也不具备平滑升级的能力,而且直接和业务代码强相关,不适合长期操作。

这里我们来详细回答一下,为什么不采用社区的流量劫持方案?

主要原因是一方面 iptables 在规则配置较多时,性能下滑严重。另一个更为重要的方面是它的管控性和可观测性不好,出了问题比较难排查。蚂蚁金服在引入 Service Mesh 的时候,就是以全站落地为目标的,而不是简单的“玩具”,所以我们对性能和运维方面的要求非常高,特别是造成业务有损或者资源利用率下降的情况,都是不能接受的。

容器替换方案

解决了刚刚提到的第一个难题,也只是解决了可以做,而并不能做得好,更没有做得快,面对线上数十万带着流量的业务容器, 我们如何立刻开始实现这些容器的快速稳定接入?

这么大的量,按照传统的替换接入显然是很耗接入成本的事情,于是我们选择了原地接入,我们可以来看下两者的区别:

在之前,我们做一些升级操作都需要有一定的资源 Buffer,然后批量的进行操作,替换 Buffer 的不断移动,来完成升级的操作。这就要求 PaaS 层留有非常多的 Buffer,但是在双十一的情况下,我们要求不增加机器,并且为了一个接入 MOSN 的操作,反而需要更多的钱来买资源,这岂不是背离了我们的初衷。有人可能会问,不是还是增加了内存和 CPU 吗?这是提高了 CPU 利用率,以前业务的 CPU 利用率很低,并且这是一个类似超卖的方案,看上去分配了,实际上基本没增加。

可以看到, 通过 PaaS 层,我们的 Operator 操作直接在现有容器中注入,并原地重启,在容器级别完成升级。升级完成后,这个 Pod 就具备了 MOSN 的能力。

MOSN 升级方案

在快速接入的问题完成后,我们要面临第二个问题。由于是大规模的容器,所以 MOSN 在开发过程中势必会存在一些问题,出现问题时该如何升级?要知道线上几十万容器要升级一个组件的难度是很大的,因此,在版本初期我们就考虑到 MOSN 升级的方案。

能想到最简单的方法,就是销毁容器,然后用新的来重建。但是在容器数量很多的时候,这种运维成本是不可接受的。如果销毁容器重建的速度不够快,就可能会影响业务的容量,造成业务故障。因此,我们在 MOSN 层面和 PaaS 一起,开发了无损流量升级的方案。

在这个方案中,MOSN 会感知自己的状态,新的 MOSN 启动会通过共享卷的 Domain Socket 来检测是否已有老的 MOSN 在运行,如果有,则通知原有 MOSN 进行平滑升级操作。

具体来说,MOSN 启动的时候查看同 Pod 是否有运行的 MOSN (通过共享卷的 Domain Socket),如果存在,需要进入如下流程:

  • New MOSN 通知 Old MOSN,进入平滑升级流程;

  • Old MOSN 把服务的 Listen Fd 传递给 New MOSN,New MOSN 接收 Fd 之后启动, 此时 Old 和 New MOSN 都正常提供服务;

  • 然后 New MOSN 通知 Old MOSN,关闭 Listen Fd,然后开始迁移存量的长链接;

  • Old MOSN 迁移完成, 销毁容器;

这样,我们就能做到,线上做任意的 MOSN 版本升级,而不影响老的业务,这个过程中的技术细节,不做过多介绍,之后本公众号会有更详细的分享文章。

分时调度案例

技术的变革通常不是技术本身的诉求,一定是业务的诉求,是场景的诉求。没有人会为了升级而升级,为了革新而革新,通常是技术受业务驱动,也反过来驱动业务。

在阿里经济体下,在淘宝直播,实时红包,蚂蚁森林,各种活动的不断扩张中,给技术带了复杂的场景考验。

这个时候,业务同学往往想的是什么?我的量快撑不住了,我的代码已经最优化了,我要扩容加机器,而更多的机器则对应付出更多的成本。面对这样的情况,我们觉得应用 Service Mesh 是一个很好的解法,通过和 JVM、系统部的配合,利用进阶的分时调度实现灵活的资源调度,不加机器,也可以在资源调度下有更好的效果。

首先,我们假设有两个大的资源池的资源需求情况,可以看到在 X 点的时候,资源域 A 需要更多的资源,Y 点的时候,资源域 B 需要更多的资源,总量不得增加。那当然,我们就希望能借调机器,就像下面这样,请大家看左图。

在这个方案中, 我们需要先释放资源,销毁进程,然后开始重建资源,启动资源域 B 的资源。这个过程对于大量的机器是很重的,而且变更就是风险,关键时候做这种变更,很有可能带来衍生影响。

而在 MOSN 中,我们有了新的解法。如右图所示,有一部分资源一直通过超卖,运行着两种应用,但是 X 点的时候,对于资源域 A,我们通过 MOSN 来将流量全部转走,应用的 CPU 和内存就被限制到非常低的情况,大概保留 1% 的能力。这样操作,机器依然可以预热,进程也不停。

在这里,我们可以看这张图。

在需要比较大的资源调度时,我们推送一把开关,则资源限制打开,包活状态取消。资源域 B 瞬间可以满血复活,而资源域 A 此时进入上一个状态,CPU 和内存被限制。在这里,MOSN 以一个极低的资源占用完成流量保活的能力,使得资源的快速借调成为可能。

我们对 Service Mesh 的思考与未来


Service Mesh 在蚂蚁金服经过 2 年的沉淀,最终经过双十一的检验。在双十一,我们覆盖了数百个双十一交易核心链路,MOSN 注入的容器数量达到了数十万,双十一当天处理的 QPS 达到了几千万,平均处理 RT<0.2 ms,MOSN 本身在大促中间完成了数十次的在线升级,基本上达到了我们的预期,初步完成了基础设施和业务的第一步的分离,见证了 Mesh 化之后基础设施的迭代速度。

不论何种架构,软件工程没有银弹。架构设计与方案落地总是一种平衡与取舍,目前还有一些 Gap 需要我们继续努力,但是我们相信,云原生是远方也是未来,经过我们两年的探索和实践,我们也积累了丰富的经验。

我们相信,Service Mesh 可能会是云原生下最接近“银弹”的那一颗,未来 Service Mesh 会成为云原生下微服务的标准解决方案,接下来蚂蚁金服将和阿里集团一起深度参与到 Istio 社区中去,一起和社区把 Istio 打造成 Service Mesh 的事实标准。

今天的分享就到这里,感谢大家。如果有想交流更多的,欢迎参与到社区里来,寻找新技术带来更多业务价值,也欢迎加入我们。

SOFAStack:https://github.com/sofastack

本次分享 PPT 以及回顾视频地址:

https://tech.antfin.com/community/activities/985/review/949

蚂蚁金服 Service Mesh 大规模落地系列文章

蚂蚁金服 Service Mesh 落地系列直播也在报名中,点击“阅读原文”即可报名参与直播~

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“U型枕”,试试手气~

* 本期互动奖品“蚂蚁 U型枕”

蚂蚁金服serviceMesh落地实践与挑战 蚂蚁金服serviceMesh落地实践与挑战,讲解蚂蚁金服在落地ServiceMesh中遇到的一系列问题及解决思路。 来自大会PPT。 立即下载

相关推荐

ABB机器人C#二次开发实战:从通信打通到数据读写的落地指南(附完整工程)

最近在做自动化产线升级项目时,遇到一个核心需求:用C#上位机实时读取ABB机器人的关节角度、IO信号,同时下发运动指令和参数配置。翻遍全网,要么是Robot Studio的基础操作教程,要么是C++/VC++的老旧案例,C#相关的实操内容要么只给片段代码,要么跳过通信配置、权限设置等关键步骤,导致刚上手时踩了无数坑——连接超时、数据读不到、写入无响应,甚至误触发机器人安全保护。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1394

Service Mesh 解决问题

Service Mesh 解决问题

spirit_8023的博客 724

SAP FI实战入门:从借贷法则到F-02记账,新手必懂的会计凭证操作

本文详细介绍了SAP FI模块中借贷记账法的核心逻辑及F-02凭证录入的全流程操作。通过实例解析借贷方向规则、科目编码设置及金额镜像原则,帮助新手快速掌握会计凭证操作技巧。同时提供了FS10N余额查询和常见错误排查方法,助力用户高效完成SAP财务记账任务。

weixin_29306571的博客 263

Service Mesh介绍

背景:微服务模式下,线上往往存在很多微服务实例,不同的实例之间,通过http、rpc调用完成服务之间的调用问题。在这种情况Service Mesh就把网络管控的一些功能,统一摘出来处理做成了基础设施层(Service的底座),通常以Sidecar的形式部署,用来处理服务和服务之间的通信。Sidecar 被称为边车模式,简单说就是三轮摩托车,在某些国外的文档中是这么介绍的,业务作为一个独轮车依赖于一辆摩托车,组合起来一起运行。

001 docker入门学习(安装篇) 1175

Allegro17.4原理图-PCB双向联动技巧:从网表生成到同步高亮

本文深入解析了Cadence Allegro 17.4中原理图与PCB的深度双向联动技巧。核心在于通过精准的网表生成与管理、实时的跨窗口交互高亮与信号追踪,以及元件与封装的智能匹配更新,构建高效协同设计工作流。掌握这些技巧能显著提升高速、高密度电路设计的效率与准确性,实现从逻辑设计到物理实现的无缝衔接。

weixin_29178069的博客 358

药物对接仿真软件:HADDOCK_(5).HADDOCK中蛋白质-配体对接流程

半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。如果是PDB格式,确保文件包含所有必要的原子信息。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。

kkchenjj的博客 1081

【服务网格】Service Mesh 是什么?为我们解决了什么问题?

服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。Istio 负载测试网格包含了 1000 个服务和 2000 个 sidecar,全网格范围内,QPS 为 70,000。在使用 Istio 1.5.1 运行测试后,我们得到了如下结果:通过代理的 QPS 有 1000 时,Envoy 使用了 0.5 vCPU 和 50 MB 内存。

DreamSun的博客 6602

YOLOv13改进策略【多YAML融合】| HWD + DSC3k2_PConv + Detect_MBConv

本文记录的是利用HWD + DSC3k2_PConv + Detect_MBConv改进YOLOv13,分别涉及骨干、颈部和检测头部分的改进。一方面按照此配置,其工作量及创新程度能够满足论文发表的需求,另一方面是一些难以融合多个YAML的举例,以帮助大家理解如何将多个YAML整合到一个YAML中。小波下采样:一个简单但有效的语义分割下采样模块。块由两个主要块组成:无损特征编码块和特征表示学习块。HWD模块与其他下采样模块对比:保留信息能力:传统的下采样方法(如最大池化、平均池化和步幅卷积等)会导致信息丢失,

Limiiiing的博客 496

ServiceMesh介绍(一)

云原生之istio

KAITUOZHEMJ的博客 2193

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

weixin_72050316的博客 1049

华为OD机试 - 比赛的冠亚季军(Python/JS/C/C++ 双机位C卷 100分)

有个运动员,他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比赛,以此类推,每一轮,相邻的运动员进行比赛,获N (3\leq N< 10000)胜的进入下一轮,实力值大的获胜,实力值相等的情况,id小的情况下获胜,轮空的直接进入下一轮。(0 <= 实力值 <= 10000000000)。输入一行N个数字代表N的运动员的实力值。输出冠亚季军的id,用空格隔开。

学Java,找哪吒 1587

蚂蚁金服 Service Mesh 大规模落地系列 – 运维篇

本文为《蚂蚁金服 Service Mesh 大规模落地系列》第三篇 – 运维篇,该系列将会从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service Mesh 双十一大规模落地实践进行详细解析。文末包含往期系列文章。 引言 Service Mesh 是蚂蚁金服下一代架构的核心,也是蚂蚁金服内部向云原生演进的重要一环。本文为 Service Mesh 系列文章的运维...

weixin_40253011的博客 1131

PCIe(二) —— 配置空间

好了,这一篇我们把配置空间的结构,分配和访问,都大概总结了一遍,并且还介绍了它们的头部字段和这些字段的意义,包括BAR和消息路由的原理。之后,如果有时间,我们会继续来探索PCIe的数据报文的结构和传输等等。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1767

蚂蚁金服 Service Mesh 大规模落地系列 - 质量篇

本文为《蚂蚁金服 Service Mesh 大规模落地系列》最后 一篇 - 质量篇,该系列从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service Mesh 双十...

金融级分布式架构 3775

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇

本文为《蚂蚁金服 Service Mesh 大规模落地系列》第五篇 - 网关篇,该系列将会从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service Mesh 双十...

金融级分布式架构 1517

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

蚂蚁金服 Service Mesh 大规模落地系列 - 消息篇

本文为《蚂蚁金服 Service Mesh 大规模落地系列》第二篇,该系列将会从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service Mesh 双十一大规模落地实践进行详细解析。文末包含往期系列文章。引言Service Mesh 作为蚂蚁金服向下一代云原生架构演进的核心基础设施,在2019年得到了大规模的应用与落地,截止目前,蚂蚁金服的 Service Mesh 数据平面...

金融级分布式架构 951

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蚂蚁金服 Service Mesh 大规模落地系列 - 核心篇

揭秘 2019Service Mesh 双十一大考蚂蚁金服很早开始关注 Service Mesh,并在 2018 年发起 ServiceMesher 社区,目前已有 4000+ 开发者在社区活跃。在技术应用层面,Service Mesh 的场景已经渡过探索期,今年已经全面进入深水区探索。2019 年的双十一是我们的重要时刻,我们进行了大规模的落地。作为技术人能面对世界级的流量挑战,是非常紧张和兴...

ServiceMesher 1106

蚂蚁金服 Service Mesh 大规模落地系列 - 运维篇

《蚂蚁金服 Service Mesh 大规模落地系列》将会从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service Mesh 双十一大规模落地实践...

ServiceMesher 790

蚂蚁金服 Service Mesh 大规模落地系列 - Operator 篇

本文为《蚂蚁金服 Service Mesh 大规模落地系列》第六篇 - Operator 篇,该系列将会从核心、RPC、消息、无线网关、控制面、安全、运维、测试等模块对 Service ...

金融级分布式架构 556

蚂蚁金服 Service Mesh 大规模落地质量管控

作者张伟(花名:柑橘) 蚂蚁金服中间件质量团队负责人,关注领域:中间件测试开发技术。王斌(花名:西经)蚂蚁金服 Service Mesh 质量主要负责人,主要 Focus 领域:MOSN...

weixin_45727359的博客 799
上一篇: 蚂蚁金服 Service Mesh 大规模落地系列 - 运维篇
下一篇: Service Mesh 在『路口』的产品思考与实践:务实是根本
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值