Gearman分布式任务处理系统(七)问题研究与性能优化

ComfyUI 本地部署指南:概念、部署过程、生成图片、共享 WebUI 模型 ComfyUI 是一个基于节点的 Stable Diffusion 图形化用户界面。您可以通过将不同的节点连接在一起来构建生成图像的工作流程。一些常用的节点包括加载检查点模型(Load Checkpoint)、输入提示词(CLIP Text Encode)、指定采样器(KSampler)等。ComfyUI 将工作流程分解为可重新排列的元素,以便您可以轻松创建自己的元素。 阅读详情

Gearman工作流程细解



一次正常的Gearman任务执行流程如上图所示:

  1. worker向Gearman Server注册自身可以执行的功能
  2. worker尝试获取一个任务
  3. server通告worker暂无任务
  4. worker通告server:“我先睡会,有活干时再叫醒我”
  5. client向server发起任务请求
  6. server唤醒可以完成这项工作的worker(可能会唤醒多个woker)
  7. worker向server发起“饥饿”请求,尝试获得一个任务
  8. server选定一个worker,将该任务分配下去
  9. 通告client:“我安排别人处理你的请求了,耐心等待吧”
  10. worker辛苦工作一段时间后,向server通告“干完了”
  11. server将结果反馈给用户

值得说明的几点

1. 任务分类:
    按优先级分:普通(SUBMIT_JOB),高(SUBMIT_JOB_HIGH),低(SUBMIT_JOB_LOW)
    按执行方式分:普通(_JOB_HIGH,_JOB_LOW),后台(_JOB_HIGH_BG,_JOB_LOW_BG)

    最大区别在于,client可以跟踪前台任务的工作状态,而不能跟踪BG任务

2. 任务工作状态的通告(worker-->server-->client):
    WORK_DATA
    WORK_WARNING
    WORK_STATUS
 对于长任务,worker应该每隔一段时间通告任务状态
    WORK_COMPLETE
    WORK_FAIL
    WORK_EXCEPTION

3. Server监控

    Gearman有“Administrative Protocol”专门用于对Gearman Server的监控,主要涉及以下几方面:

    status:所注册职能分类,worker总数目,处于工作状态的worker数目,可用worker数目等

    worker的详细信息:所注册功能、IP

    server的缓存任务最大队列长度:可以被查询也可以被设定

    该功能详见《Gearman使用》


问题分析与研究

Job Server 的单点问题
实际上 Job Server 是存在单点问题的,我们只能通过增加冗余 Job Server 的方式来解决这个问题。
我们可以通过配置域名、多个服务器配置列表等方法,在遇到其中一个 Job Server 失败时,将 Client 的请求转向另外的 Job Server。
这种情况下,Job Server 中原来存在的任务会发生丢失,除非使用了数据库或其他类似的持久化方法。

如果遇到正在连接的那个故障,由client、worker切换到好用的gearmand服务器,这样来完成high-avliable。

可以看出这里实现的并不完善,需要客户端程序自己判断,而且也可以看出并不支持几个Job Server的负载均衡调用。


Job Server 重启
Job Server重启后,worker会自动重新注册。通过 gearmand -vvvvvvv  分析发现,如果 gearmand 关闭并重新启动后,原来的 worker 会马上与 Job Server 建立连接,并询问是否有任务。
但是客户端client程序是不会自动重连的,这个要靠客户端程序中来判断重连。

使用持久队列避免任务的丢失
因为 Gearmand 的队列是放在内存中的,所以宕机或重启事件会导致队列的丢失。为了避免这种情况,可以使用持久队列,将队列存储在一个相对中立的位置。注意,持久队列只对于后台任务有效。
 
Gearman Worker 的无缝重启
我在实现Worker的过程中,采用了PHP脚本,脚本调用外部的配置文件。如果外部的配置文件修改后,需要重新启动脚本才能够使配置文件中修改的变量生效,所以想要坐到无缝的重启。即脚本Stop、Start的过程不会影响正在进行的业务。
对于无缝重启的问题,我总结了如下几个思路进行处理,解决的方法:
1、每次修改完代码后,Worker需要手工重启(先杀死然后启动)。
2、在Worker中设置,单次任务循环完成后,就对Worker进行重启。 
3、在Worker中添加一个退出函数,如果需要Worker退出的时候,在Client端发送一个优先级比较高的退出调用。 
4、在Worker中检查文件是否发生变化,如果发生了变化,退出并重启自身。 
5、为Worker编写信号控制,接受重启指令,类似于 http restart graceful 指令


多台Job Server客户端重连接问题

Gearman在多个Job Server服务器之间并不通讯,而是运行多个Job Server服务器,通过client、worker连接多个服务器。

客户端连接Job Server时,通过addJobServer或addJobServers的方式,为客户端增加多台Job Server服务器,客户端程序初始执行时不会真正的去连接所有的Job Server,只是打开连接符放到一个服务器连接列表中,当run_task时,才会真正的去连接服务器,首先向最后一台服务器发送,如果失败,客户端程序针对这笔当前的task不会自动切到另一台服务器,下一个task连接时发现这台服务器有问题就会自动切换到下个服务器,这样也是对的,因为当前这笔task的状态是不确定的,也许worker执行了返回没收到。这种情况只能是客户端程序自己判断。

为验证这种情况,自己试验一下:

在一台机上起两个gearmand(端口分别为4730和4830),在客户端把这2个gearmand都加到GearmanClient中,通过addJobServer或addJobServers的方式。

正常的,GearmanClient会将任务发送到最后添加的JobServer(4830),把job发送过去。
kill掉4830这个进程,log中报:
PHP Warning:  GearmanClient::do(): gearman_connection_read:lost connection to server
当执行下一个任务时然后自动的采用第二个JobServer,任务发送到第二个JobServer上了。

但是如果一个连接已经存在,要重复这个连接的使用,在发送Job的时候,不断的报错,不会自动切换到另一个好的JobServer上。

还有一个问题就是,这时如果前面出错那台机器又恢复使用了,客户端程序可以继续向这台机器发task,但是首次的发送会收不到应答直到超时,然后下一笔就正常了,原因需要进一步验证。

这种情况下客户端无法知道这笔task有没有被处理,这在业务上客户端必须加判断,不然一个任何有可能会被执行多次。


对background_job的异步处理的返回

待完善。。。


Gearman 性能调优 

线程模型
在大规模使用的时候,需要针对应用类型进行参数设置,以使Gearman的性能达到最优,这首先应该了解Gearman的线程模型。
 
为确保具备对海量任务调度的支持能力,Gearman毫无悬念的选择libevent作为网络操作支撑库。因此Gearman的服务器Gearmand提供了三类线程角色:
端口监听和管理线程,接受新连接请求并将之交给IO线程,1个 IO线程,完成实际的任务处理,包括命令解析,队列操作等,n个 处理线程,完成内部数据结构的管理,无系统调用尽可能简单,1个
其中第1, 3种线程对全局处理性能没有直接影响,虽然处理线程有可能成为瓶颈,但他的工作足够简单消耗可忽略不计,因此我们的性能调优主要目标是在IO线程的数量。
对每个IO线程来说,它都会有一个libevent的实例;所有Gearman的操作会以异步任务方式提交到处理线程,并由IO线程获取完成实际操作,因此IO线程的数量是与可并行处理任务数成正比。Gearmand 提供 -t 参数调整总IO线程数,需要使用 libevent 1.4 以上版本提供多线程支持。
 
进程句柄数
另外一个影响大规模部署的是进程句柄数,Gearman会为每一个注册的Worker分配一个fd(文件描述符),而这个fd的总数是受用户限制的,可以使用 ulimit -n 命令查看当前限制

flier@debian:~$ ulimit -n
 1024
flier@debian:~$ ulimit -HSn 4096 // 设置进程句柄数的最大软硬限制
4096
 
也就是说gearman缺省配置下,最多允许同时有小于1024个worker注册上来,fd用完之后的Worker和Client会出现连接超时或无响应等异常情况。因此,发生类似情况时,我们应首先检查 /proc/[PID]/fd/ 目录下的数量,是否已经超过 ulimit -n 的限制,并根据需要进行调整。而全系统的打开文件设置,可以参考 /proc/sys/fs/file-max 文件,并通过 sysctl -w fs.file-max=[NUM] 进行修改。
flier@debian:~$ cat /proc/sys/fs/file-max
24372
flier@debian:~# sysctl -w fs.file-max=100000
100000

Gearmand 本身也提供了调整句柄数量限制的功能,启动时则可以通过 –file-descriptors 参数指定,但非特权进程不能设置超过soft limit的数额。
-f [ --file-descriptors ] arg         

Number of file descriptors to allow for the process (total connections will be slightly less). Default is max allowed for user.

轮询调度 
此外,Gearmand 还提供了一些增强任务调度公平性的参数,例如 0.13 里面新增的 round-robin 模式,允许将任务公平的调度到多个 Worker,而不是用缺省按 Worker 注册函数的顺序进行调度,避免工作过于集中在少数设备上。
-R, –round-robin Assign work in round-robin order per
workerconnection. The default is to assign work in
the order of functions added by the worker.
 
Gearmand 内部通过一个 Worker 队列,在 RR 模式下动态调整 Worker 的调度次序。

 受限唤醒 
而通过 –worker-wakeup 参数,则可以指定收到任务时,需要唤醒多少个 Worker 进行处理,避免在 Worker 数量非常大时,发送大量不必要的 NOOP 报文,试图唤醒所有的 Worker。
 
-w, –worker-wakeup=WORKERS Number of workers to wakeup for each job received.
The default is to wakeup all available workers.
 
根据 Gearman 协议设计, Worker 如果发现队列中没有任务需要处理,是可以通过发送 PRE_SLEEP 命令给服务器,告知说自己将进入睡眠状态。在这个状态下,Worker 不会再去主动抓取任务,只有服务器发送 NOOP 命令唤醒后,才会恢复正常的任务抓取和处理流程。因此 Gearmand 在收到任务时,会去尝试唤醒足够的 Worker 来抓取任务;此时如果 Worker 的总数超过可能的任务数,则有可能产生惊群效应。

除此之外,针对应用特点合理使用持久化队列,在大并发任务量的情况下对性能也会有直接影响。 
归根结底,需要根据自己的应用场景,合理设计一些测试用例和自动化脚本,通过实际的运行状态进行参数调整。


YOLOv13-SWC (ShiftWise Convolution) 完整移植与原理深度解析教程 YOLOv13-SWC模型移植与原理解析 本文详细介绍了YOLOv13-SWC模型的完整移植过程与核心技术原理。YOLOv13-SWC在YOLOv8架构基础上引入ShiftWise Convolution(SWC)模块,通过创新性的位移操作、重参数化大核卷积和LoRA分解技术,显著提升了模型性能。文章包含三个核心部分: 模型移植实现:包括配置文件创建、任务模块修改和核心代码实现,重点介绍了SWC模块的掩码机制和LoRA卷积分解策略。 ShiftWise操作原理:深入解析了将大核卷积分解为小核卷积位移组合的数 阅读详情

相关推荐

TCS34725颜色识别模块实战调校:从“一坨”例程到精准RGB

本文针对TCS34725颜色识别模块初始数据不准的问题,提供了从基础例程到精准调校的实战指南。核心在于通过白光校正与黑白光校正两种方法,补偿传感器偏差与环境光影响,将原始数据准确映射为标准RGB值。文章详细阐述了校准原理、操作步骤与代码实现,并分享了进阶调试技巧与避坑指南,帮助开发者显著提升颜色识别的准确性与项目可靠性。

weixin_29188043的博客 287

影响分布式系统性能的3个方面

看了俄罗斯Roman Elizarov(此人乃某年google编程大赛第三名)写的一个ppt,讨论如何设计高性能分布式系统。 他提出影响性能的3个方面:锁机制内存操作数据结构对于代码优化这一块,他倒是建议不要进行。 锁机制:简单的说就是消息队列因为要实现线程安全,必然会用同步机制,这时就需要考虑如何有效的减少锁/解锁操作内存操作:尽量减少内存分配,同时能

Stone的专栏 2056

Spec-Kit实战:用‘规范驱动开发’重构一个老旧Node.js项目(避坑指南)

本文详细介绍了如何使用Spec-Kit工具通过‘规范驱动开发’(SDD)重构老旧Node.js项目。从逆向工程提取规范到增量改造策略,再到避免典型陷阱,提供了实战指南和避坑技巧,帮助开发者高效实现架构现代化,显著提升代码质量和维护效率。

weixin_42525582的博客 554

几种分布式网络性能分析方法(基于交易图,Transaction graphs)

区块链的兴起区块链技术在全球的普及,越来越多的分布式应用开始兴起。本文介绍几种分布式网络性能的衡量方法。[目前主要衡量的方法是TPS,Transactions Per Second] 这里介绍几种图分析方法。 平均交易响应时间 此图显示在测试方案运行的每一秒内执行事务所需的平均时间。 目的:如果定义了可接受的最小和最大事务处理时间,则可以使用此图来确定服务器的性能是否在可接受的范围内。 X轴:自运行开始以来经过的时间。 Y轴:每笔交易的平均响应时间(以秒为单位) 每秒交易数图 为每个事务显示在负载测试方案

weixin_43137080的博客 631

从Mate到Mate40 Pro+:华为旗舰核心配置演进与选购避坑指南

本文回顾了华为Mate系列从初代到Mate40 Pro+的核心配置演进历程,重点分析了处理器性能、影像系统、屏幕设计及续航快充的技术突破。针对选购需求,提供了区分版本、5G选择及存储配置的实用避坑建议,帮助消费者明智选择华为旗舰机型。

weixin_30015371的博客 494

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2199

Gearman 任务调度程序

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资 源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。 Gearman 分布式任务实现原理上只用到2个字段,function name和data。function name即任务名称,由client传给job

lxw1844912514的博客 697

用Python玩转共现分析:从NLTK到热力图可视化(附完整代码)

本文详细介绍了如何使用Python进行文本共现分析,从NLTK基础文本处理到构建共现矩阵,并实现热力图可视化。通过完整的代码示例,帮助数据分析师和开发者掌握这一揭示词语间关联网络的实用NLP技术,快速从文本中提取语义关系和主题结构。

weixin_29313817的博客 348

python集群任务分发_分布式任务分发框架Gearman测试、性能监控、队列持久化【python 实例】...

Gearman提供了一种通用的程序框架来将你的任务分发到不同的机器或者不同的进程当中。它提供了你进行并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。Gearman能够应用的领域非常广泛,从高可用的网站到数据库的复制任务。总之,Gearman就是负责分发处理的中枢系统,它的优点包括:开源:Gearman免费并且开源而且有一个非常活跃的开源社区,如果你想来做一些贡献,请点击 。多...

weixin_39801202的博客 430

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3841

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

m0_58523831的博客 1万+

PHP利用Gearman来处理并行多进程问题

最近工作中开发的一套系统,其中很多都是需要操作多服务器的,比如需要同时发布数据到2000个服务器上,或者同时向2000个服务器拉取数据。刚开始的解决方案就是单纯用PHP的curl_multi的方式并发处理请求,而且参考了淘宝技术博客的《Rolling cURL: PHP并发最佳实践》,但是由于网络和数据以及各个服务器等等的一些情况导致这种并发处理的响应时间很慢,因为在并发请求的过程中还包括记录

大鹏 3045

YOLOv8科研探索:HAttention激活更多特征点,真心助你提升细粒度检测精度

如果你在集成中遇到问题,不妨从特征点激活阈值、多尺度融合的逻辑入手,一点点打磨——科研的突破,往往就藏在这些细致的尝试里。想象一下,普通模型可能只关注目标的“大块区域”,而HAttention能让模型同时捕捉到目标的“边缘”“纹理”等细粒度特征点,就像给模型装上了“显微镜”,再小的细节也逃不过它的“眼睛”。比如,小目标的细粒度特征点(如昆虫的触角)和大目标的整体特征点(如昆虫的身体)会被同时考虑,通过注意力权重的分配,让小细节融入全局理解,避免模型“只见树木不见森林”。HAttention通过。

FJN110的博客 78

【未完】Gearman分布式处理,mysql队列详解

参考文档:1-Gearman分布式任务处理系统(七)问题研究与性能优化http://blog.youkuaiyun.com/jiao_fuyou/article/details/16335857 2-Gearman的使用http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html 3-gearman mysql持久化htt...

weixin_34302798的博客 103

OV9734 DATASHEET,完整规格书

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Gearman分布式任务处理系统(三)libevent介绍

为确保具备对海量任务调度的支持能力,Gearman毫无悬念的选择libevent作为网络操作支撑库。 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据

很多时候,你缺少的不是知识而是热情 3945

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

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

如何实现gearmand持久化任务队列:终极数据库集成指南 [特殊字符]

在分布式系统中,任务队列的持久化是确保数据可靠性的关键。gearmand作为一款强大的分布式作业调度系统,提供了多种数据库集成方案来实现持久化任务队列。本文将为您详细介绍gearmand与MySQL、PostgreSQL、SQLite等数据库的集成方法,帮助您构建可靠的分布式任务处理系统。 ## 📊 为什么需要持久化任务队列? 在gearmand中,所有作业队列默认存储在内存中。这意味着如果

gitblog_00519的博客 489

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

gearmand进阶技巧:提升任务处理效率的10个实用方法

想要让您的分布式任务处理系统性能翻倍吗?gearmand作为一款强大的作业服务器,提供了丰富的配置选项和优化技巧。本文将为您揭秘10个实用的gearmand进阶技巧,帮助您显著提升任务处理效率!🚀 Gearmand是一个通用的应用程序框架,可以将工作分配给其他更适合执行任务的机器或进程。它允许您并行处理工作、负载均衡处理,并在不同语言之间调用函数。gearmand作为Gearman系统的核心服

gitblog_00155的博客 974

gearmand性能调优:从理论到实践的完整指南

Gearmand作为分布式任务队列系统的核心组件,其性能调优对于构建高可用、高性能的分布式系统至关重要。本文将为您提供从基础理论到实际操作的完整性能优化指南,帮助您充分发挥gearmand的潜力,提升系统吞吐量和响应速度。🚀 ## 为什么需要gearmand性能调优? 在分布式系统中,gearmand作为任务调度的核心枢纽,其性能直接影响整个系统的响应时间和吞吐量。通过合理的性能调优,您可以

gitblog_00959的博客 950

Queues.IO深度解析:现代消息队列技术全景图与技术选型指南

在分布式系统架构演进过程中,消息队列技术已成为微服务解耦、异步处理和数据流编排的核心基础设施。然而,面对市场上数十种不同的消息队列解决方案,技术决策者往往陷入选择困境:RabbitMQ、Kafka、NSQ、AWS SQS等各有何优劣?如何根据业务场景选择最合适的队列系统?Queues.IO项目应运而生,为开发者提供了一个全面、系统的消息队列技术知识库。 ## 消息队列技术的核心痛点与架构挑战

gitblog_00439的博客 506

gearman client的doBackground 与doNormal方法的区别

doNormal方法是阻塞的,需要等到worker处理完之后才返回,否则一直阻塞住; doBackground 方法是非阻塞的,只要将数据发送到gearmand之后,就立马返回,不等待worker的处理,可以先启动client,不启动worker,分别使用doNormal,doBackground看他们之间的区别. 转载于:https://www.cnblogs.com/maxomnis/p/5...

weixin_30470643的博客 248

Gearman 性能调优

文章来自:http://blog.flier.lu/2010/04/gearman-performance-tunning/ Gearman是最早由LiveJournal内部开发并使用的一个通用并行任务调度框架,允许不同语言直接通过非常简单的方式进行互操作。前台提交工作任务(Task)和参数,由后台工作进程(Worker)完成实际工作。 例如前台提交用户需要进行渲染的图片,由Gearm...

freespace 292

gearman rabbitMQ等 异步队列方案

开发的时候,错误没有任何信息,输出空白会让你发狂! 有时是权限错误问题,有时是php错误什么的,程序停止运行,输出空白,让你一脸懵逼

sm_Bo的博客 1932

Gearman分布式任务处理系统(一)基本介绍

Gearman介绍 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复

很多时候,你缺少的不是知识而是热情 1万+

Gearman vs Beanstalkd

在Web应用程序中大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面。如果这类处理会消耗大量时间和资源,将其分离出来以异步的方式执行是比较常见的做法。要完成这样的任务,需要一个消息队列来进行管理。Gearman和Beanstalkd是比较常用的两个,这里对这两个队列进行一个对比。 Gearman: Gearman是一个分发任务的程序框架来将你的任务分发到不同

syhd142的专栏 6967

gearman性能与应用架构设计

一、Gearman架构中的三个角色 client:    请求的发起者,工作任务的需求方(可以是C、PHP、Java、Perl、Mysql udf等等) Job Server:请求的调度者,负责将client的请求转发给相应的worker(gearmand服务进程创建) worker:    请求的处理者(可以是C、PHP、Java、Perl等等) Fig-1 从上图可以看出,Gea

北雨南萍 1799

gearman初步尝试

网上安装使用的资料已经一堆了  这个也给大家汇总一下,比较高端的几个。 http://www.php.net/manual/zh/book.gearman.php http://huoding.com/2012/10/30/196 http://www.oschina.net/question/4873_11032 http://blog.youkuaiyun.com/jiao_fuyou

Ben_OnceMore 1862
上一篇: Gearman分布式任务处理系统(六)跨多种环境部署
下一篇: Gearman分布式任务处理系统(八)开发讲解
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值