【Dubbo】深入理解Apache Dubbo(一):带你走近高性能RPC通信框架

分布式RPC框架Apache Dubbo Dubbo 是一个分布式服务框架,是阿里巴巴开源项目 ,被国内电商及互联网项目中使用。Dubbo致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有Dubbo这样的分布式服务框架的需求,本质上是个服务调用的东西,可以和Spring框架无缝集成。什么是RPC?RPC全称为remote procedure call,即远程过程调用。 阅读详情

1. 引言

从本篇开始,笔者将会带你进入Apache顶级项目——Dubbo的学习。本篇侧重介绍Dubbo的来龙去脉,会从架构的演进过程说明Dubbo的重要性和意义。

2. 应用架构的演进过程

2.1 单体应用

1. JEE时期

特征优点缺点
JEE是早期提供了企业级应用开发环境的工具,整体上分为展示层、业务逻辑层和数据存储层。各层的组件都被聚合在一起运行在统一的服务器上(如Tomcat、JBoss等)。分层设计明确了团队分工,职责清晰;开发简单,所有的类都能直接本地引用。大多数都部署在同一个JVM中,性能随着应用的增大急剧下降;业务之间耦合性太高。

2. MVC框架时期

特征优点缺点
Model:模型部分,负责具体的业务逻辑和数据存取;View:视图层,负责应用的展示;Controller:控制器,主要处理和用户的交互。分工明确,分层更加简单,Spring、Spring MVC、Mybatis更加轻量级。耦合问题一直没有得到改善,并且在垂直划分的应用中,这种架构虽然满足了服务之间完全独立,但是无法进行远程调用,很多基础代码不能复用。
2.2 分布式应用

1. 早期SOA
在上述说明的单体应用中,所有服务部署在一个JVM中,随着应用的不断增大, 势必会出现难以维护的情况;并且随着to C业务的不断发展,传统单应用也无法满足高并发的需求。为了解决这个问题,面向服务的架构(SOA)应运而生。
在这里插入图片描述
2. 微服务
无论是Web Service还是ESB,早期SOA不可避免的问题就是过于笨重,这个时候微服务就呼之欲出。

所谓的微服务,是指一个应用被拆分成一个个独立的、可配置、可运行、可维护的子服务,极大的方便了服务的复用。

3. 云原生
为了解决微服务架构中小服务资源的浪费以及让应用变得更加轻量级,基于云原生的服务网格也开始出现。

3. 初探Dubbo

首先对Dubbo做个简单的介绍,它是一个分布式高性能的RPC服务框架,它的核心设计原则是:微内核+插件体系。

3.1 Dubbo是什么

在这里插入图片描述
如上图Dubbo的架构所示,其中,Provider启动时会向注册中心把自己的元数据注册上去,Consumer在启动时从注册中心订阅(首次订阅会拉取全量数据)服务提供方的元数据,注册中心发生数据变更会推送给Consumer。在获取服务元数据之后,Consumer可以发起RPC调用,并且在调用前后会向监控中心上报统计信息(如并发数等)。

3.2 Dubbo解决什么问题

在弄清楚Dubbo需要解决的问题之前,不妨先回过头探讨一下互联网架构演进的过程。早期的单体应用及垂直应用架构现在已经满足不了高并发、实时计算的需求,现在基本都是分布式以及流式计算框架。架构的演进及特征见下表,需要注意的是,事实上分布式架构及流动计算架构也属于垂直应用架构的范畴。

架构演进规模特征架构关键
单一应用架构1~10将所有的应用都部署在一起,部署节点及成本较低,但是性能瓶颈较大。ORM框架
垂直应用架构10~1000将单一应用拆分成若干互不相干的应用以提升效率MVC框架
分布式服务架构1000~10000将核心业务抽取出来作为独立的业务,形成稳定的服务中心RPC框架
流动计算结构10000+增加了一个调度中心基于访问压力实时管理集群容量调度中心

初期的远程服务引用可以采用远程方法调用RMI(Remote Method Invoke),但是在服务规模不断演进的情况下,RMI根本满足不了技术需求,所以需要优秀的RPC框架——Dubbo。Dubbo致力于为用户解决问题包括:

  • 高性能、透明化的调用。Dubbo让开发者就像调用本地的方法一样调用远程服务,负载均衡、路由、序列化等皆由Dubbo保证,开发者只需要接收对应的调用结果。
  • 服务的自动注册于发现。对于大规模的服务,URL配置要想人工管理几乎不可能,Dubbo自带了服务注册中心,动态的注册也发现服务,将服务的位置透明化。
3.3 Dubbo的总体分层

Dubbo的总体分为三层:业务层(Biz)、RPC层、Remote。再细分的话一共有十层,如下图:
在这里插入图片描述
如上图所示,Service和Config两层可以认为是API层,使用者只要基于这两层配置完成业务即可;后面的所有层结合在一起可以认为是SPI(Service Provider Interface)层,主要提供给扩展者使用。

3.4 Dubbo的核心组件

Dubbo框架中不同的分层代表了不同的逻辑实现,事实上它们是一个个组件,如下表所示:

层次名作用
Service业务层,由开发者实现的业务代码
Config配置层。主要围绕ServiceConfig(暴露的服务位置)和ReferenceConfig(引用的服务位置)两个类展开初始化配置信息,可以理解为该层管理了整个Dubbo的配置
Proxy服务代理层。在Dubbo中无论是生产者还是消费者,框架都会生成一个代理类。代理层负责做远程调用,让业务层对远程调用完全无感
Registry注册层。负责Dubbo所有的服务注册与发现,实现当服务发生变更时及时推送给所有的订阅方
Cluster集群容错层。主要负责在远程调用失败时的容错策略(如失败重试、快速失败);负载均衡策略(如随机、一致性Hash等);路由策略(如某个消费者只会调用固定IP的生产者)
Monitor监控层。负责监控统计调用次数和时间
Protocol远程调用层。封装RPC调用具体过程,Protocol是Invoker暴露(发布一个服务让别人可以调用)和引用(引用一个远程服务到本地)的主功能入口,该层负责管理Invoker的整个生命周期,Invoker是Dubbo的核心模型。
Exchange信息交换层。建立Request-Response模型,封装请求响应模式,如把同步请求转换为异步请求
Transport网络传输层。把网络传输抽象为统一的接口。如Mina和Netty虽然接口不一致,但是Dubbo在它们的上层又封装了一个统一的接口
Serialize序列化层。当数据需要进行网络传输则需要先进行序列化。该层负责管理整个框架网络传输时的序列化/反序列化工作
3.5 Dubbo的总体调用过程

在消费者调用服务之前,首先服务有一个暴露过程,形象的描述一下:**在Dubbo框架启动时,通过Proxy组件调用具体协议(Protocol),把服务端要暴露的接口封装成Invoker(真实类型是AbstractProxyInvoker),然后转换成Exporter,此时Dubbo会打开服务端口记录服务实例到内存,最后通过Registry把服务元数据注册到注册中心。**在暴露过程中各个组件的含义为:

  • Proxy组件:Dubbo框架通过Proxy组件为生产者和消费者生成代理类,通过代理类发起服务调用,整个过程对用户完全透明。
  • Protocol组件:顾名思义,协议就是对数据格式的一种约定。通过不同的协议将对接口的配置转换成不同的Invoker对象,例如用DubboProtocol可以把XML文件中一个远程接口的配置转换成一个DubboInvoker。
  • Exporter组件:用于暴露到注册中心的对象,它的内部属性持有了一个Invoker对象。
  • Registry组件:把Exporter注册到注册中心。
    服务调用过程如下图所示:
    在这里插入图片描述
    接下来对服务调用过程的部分组件进行说明:
  • Proxy组件:调用过程的开始组件,持有一个Invoker对象,然后触发invoke调用。
  • Directory组件:获取所有可以调用的远程服务Invoker列表。
  • Router组件:如果用户配置了路由规则(如指定某些方法只能调用某个节点),则由Router组件根据该路由规则将Invoker列表过滤。
  • LoadBalance组件:对依然存活的Invoker做负载均衡,最终选出了可以调用的Invoker。
  • Filter组件:在最终选出的Invoker调用之前会经过该Filter过滤器链,用于处理上下文、限流、计数等。
  • Client组件:做数据传输,如Netty Client等。
  • Codec组件:构造私有协议,处理 协议头及一些半包、粘包等。
  • Serialization组件:协议构造完成之后就对数据包进行序列化,然后传输到服务提供者端。
  • ThreadPool:线程池分配处理Request请求的Server。
  • Server:处理上一步分配过来的Request请求。

小结

本篇介绍了框架的演进历史以及Dubbo产生的背景。另外也概述了Dubbo的总体架构图和核心组件,讲解了总体调用过程。下一篇笔者将用一个简单的示例演示Dubbo的使用。附Dubbo的官方文档:
  Dubbo的官方文档
关于Dubbo应用程序的简单使用请参看下一篇:
【Dubbo】深入理解Apache Dubbo(二):开发第一个Dubbo应用程序

深入理解Apache Mina Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便 apache mina 利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。 立即下载

相关推荐

Eureka常见面试题总结

点击关注我的博客原文 Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移(来源springcloud中文网的介绍:https://www.springcloud.cc/)。下图总结了Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程: 流程说明:...

u012105931的博客 2万+

Dao层service层controller层mannager层和biz层详解

本篇文章内容 1.阿里开发手册关于应用分层的部分 2.对于阿里应用分层的理解 1.阿里开发手册关于应用分层的介绍 1.开放接口层: 可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量控制等。 2.终端显示层: 各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。 3.Web 层: 主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。 4.Service 层:

山雨的博客 2万+

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

Dubbo使用invoke指令来调用dubbo接口

最近被分配了一个任务,是通过`dubbo`的方式对外提供服务,`dubbo`没有我们一般的web项目中的`Controller`层,所以没有办法通过`http`的方式进行调用调试。作为萌新的我,确实有点一筹莫展,直到被老司机提醒使用`dubbo` `invoke`的方式进行接口测试,我才有方向。

蹊源的奇思妙想的博客 2万+

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 491

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 547

apache dubbo 2.7.5 telnet找不到invoke命令

原因是:2.7.5中,invoke 命令对应的类是org.apache.dubbo.qos.legacy.InvokeTelnetHandler,但是在jar中的META-INF.internal.dubbo目录中的org.apache.dubbo.remoting.telnet.TelnetHandler文件还是旧的类(org.apache.dubbo.rpc.protocol.dubbo.telnet.InvokeTelnetHandler),具体内容: 当加载org.apache.dubbo.r

sonycong的专栏 1154

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 715

Apache Dubbo总结

文章目录????简介????架构演进????理解RPC与SOA????dubbo架构简介 ????简介 目前的工作主要是做一些业务功能的开发,涉及到的系统架构以all-in-one的单体架构为主,也少量涉及分布式系统,对于涉及到的分布式系统,几乎都是以dubbo为基础构建的,日常也主要是对其进行维护以及对开发新的功能,之前对dubbo的使用也不是特别深入,应用场景也不复杂。dubbo作为目前最流行的分布式微服务架构之一,是非常...

不瘦十斤不换名字 2843

从LLM到VLM再到VLA:三兄弟的“变形记”——定义、架构演进与最新趋同

LLM、VLM、VLA虽然在时间上依次出现,但它们在架构上的演进并非线性替代,而是形成了一个从“理解语言”到“理解世界”再到“改变世界”的认知闭环。VLA之所以能在短短三年内从概念走向现实,正是因为它站在了LLM和VLM的肩膀上——RT-2的泛化能力来自互联网规模的VLM预训练,π0的扩散策略受益于生成式模型的突破,Helix的双系统架构借鉴了“快慢思考”的认知科学洞见。而反过来,VLA在实际部署中遇到的效率瓶颈和实时性要求,也在倒逼LLM和VLM向更轻量、更高效的架构方向演进。

Ven%的博客 490

【数字孪生与仿真技术】05:从原理到实战:MATLAB/Simulink在航空航天GNC系统开发中的深度解析(含全流程代码与认证指南)

摘要:本文系统阐述MATLAB/Simulink在航空航天制导、导航与控制(GNC)系统开发中的核心应用。通过解析GNC系统高保真动力学建模、多源导航传感器融合、鲁棒控制算法设计等关键技术原理,结合Virgin Orbit运载火箭、CubeSat等真实案例,展示从需求分析、模型搭建、仿真验证到代码生成与认证的完整开发流程。文中提供1200余行关键代码、8个可复用Simulink模型及详细执行结果展示,涵盖DO-178C认证支持、实时性能优化等工业级开发规范,为航空航天工程师、科研人员提供可落地的参考方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1656

DUBBO 3.x 兼容 invoke 调用

首先是启动报错,注释掉配置 dubbo.protocol.telnet=invoke后程序可运行,但是invoke失效。文件名称:org.apache.dubbo.remoting.telnet.TelnetHandler。( 这两个类是我基于3.0.2的版本和我的版本做过适配的,如果有报错请自行解决。从DUBBO的2.7.22版本升级到了3.x的版本后,发现invoke失灵了。此时在启动,测试 telnet 下invoke调用就可以啦!在xxx目录(和上面的包路径保持一致)下添加如下两个类。

Rain___Blue的博客 1855

【GEOS-Chem模拟教程第二期下】全球生物质燃烧 GFAS 数据配置

本博客详细介绍全球生物质燃烧 GFAS 数据下载及在 GEOS-CHEM 模型中的配置

WW、forever的博客 1395

【Dubbo】深入理解Apache Dubbo(二):开发第一个Dubbo应用程序

1. 引言 本篇侧重用代码说明Dubbo应用程序的开发及使用,通过一个简单的示例演示Dubbo应用。读者要是对Dubbo框架的基本概念还有模糊,可以先阅读 【Dubbo】深入理解Apache Dubbo(一):带你走近高性能RPC通信框架 另外本篇涉及的所有源码都已经上传到GitHub,欢迎交流学习: Dubbo应用程序实战 2. 环境配置 无论你使用的是Windows、Linux还是Mac OS...

少侠露飞的学习笔记 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

dubbo连接超时:org.apache.dubbo.rpc.RpcException: Invoke remote method timeout.

        报错信息: org.apache.dubbo.rpc.RpcException: Invoke remote method timeout. method: getEasybuyUserListByMap, provider: dubbo://192.168.52.1:20880/com.buy.service.easybuyUser.EasybuyUserService?anyhost=true&app

qq_46540738的博客 7169

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

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

dubbo的invoke(dubbo通过invoke命令调用dubbo接口)

官网:http://dubbo.apache.org/zh-cn/ 使用telnet命令进入控制台 命令:telnet ip 端口 这个端口和ip,可以去dubbo管理控制台中搜索服务名,然后找到提供者的机器ip 使用invoke命令注入 如果注入的是json 那就直接传入json串就ok了,如果是基础数据类型,也可以分别对应参数直接传 invoke XxxService.xxxMethod...

shuang1562的专栏 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Dubbo 源码分析 - 服务调用过程

注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章。 1. 简介 在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含众多步骤。比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅...

dishitu6229的博客 476

java代码开发规范

Java代码开发规范 1、工程结构 工程分为三个module :sdk、biz、api api依赖biz biz依赖sdk 1.1.api api功能主要是与外部的交互部分,包括向前端提供的接口,向外部提供的RPC服务的实现等。 包分类 主要包括的package包括但不限于: 1.2.biz 业务核心部分,承接上下,联通api层与数据库、外部服务等。 1.3.sdk 对外提供rpc服务的接口、dto以及枚举等,具体实现会放在api层 remote包统一使用 1.0-SNAPSHOT 作为包管理。 re

qq_40338564的博客 7224

Dubbo invoke命令使用

首先使用telnet命令进入控制台命令:telnet ip 端口 例如你的如果dubbo.protocol.port=29952 那么就是 telnet localhost 2995 然后使用invoke命令注入: 如果注入的是json 那就直接传入json串就ok了,如果是基础数据类型,也可以分别对应参数直接传 invoke XxxService.xxxMethod({“prop”: “value”}, 1, “1”) 如果注入的参数是对象(com.yunji.bigdata.po...

大灰狼的专栏 9536

[Dubbo3.0.8源码解析系列]-12-全局视野来看Dubbo3.0.8的服务启动生命周期

目录12 全局视野来看Dubbo3的服务启动生命周期12.1 启动方法简介12.2 启动器启动方法的调用逻辑start()12.3 应用程序发布器DefaultApplicationDeployer的启动方法12.4 应用程序发布器对应用级别的初始化逻辑12.5 应用下模块的启动(服务的发布与引用)12.6 模块发布器发布服务的过程 12 全局视野来看Dubbo3的服务启动生命周期 12.1 启动方法简介 在说启动方法之前先把视野拉回第一章《1-从一个服务提供者的Demo说起》我们的Demo代码,下面只贴一

宋小生-中间件 1011

探索分布式服务框架Dubbo2:以RPC为基础的微服务

为什么说要搞定微服务架构,先搞定RPC框架? 原创:58沈剑 架构师之路2016-08-25 第一章聊了【“为什么要进行服务化,服务化究竟解决什么问题”】 第二章聊了【“微服务的服务粒度选型”】 今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢? 一、需求缘起 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图: 服务A是欧洲团队提供服务,欧洲团队的技术背景是Java,...

wr_java的博客 456

Dubbo——通信框架与通信协议(dubbo协议)原理

Dubbo 并没有自己实现一套完整的网络库,而是使用现有的、相对成熟的第三方网络库,例如,Netty、Mina 或是 Grizzly 等 NIO 框架。我们可以根据自己的实际场景和需求修改配置,选择底层使用的 NIO 框架。...

qq_46416934的博客 609

爱了爱了, 这是什么神仙级 Apache Dubbo 实战资料, 清晰! 齐全!

由于这份文档的细节文字过多,内容较为详细,小编在这里只能将这份实战文档展示部分目录,《深入理解ApacheDubbo与实战》在里面会有详细的分解版本,以及对应的每个知识点(可见目录),需要获取完整文档用于学习的猿友们,可以私信!Dubbo是国内最出名的分布式服务框架,也是Java程序员必备的必会的框架之一。Dubbo更是中高级面试过程中经常会问的技术,面试的时候是不是经常不能让面试官满意?基于API|编写Echo客户端。基于注解编写Echo服务器。基于注解编写Echo客户端。...

weixin_70730532的博客 804

带你深入理解ApacheDubbo,高性能RPC通信框架,应用架构演进过程

本章主要内容:•应用架构演进过程;•Dubbo 简介;•Dubbo总体大图。本章主要是对Dubbo总体的介绍,让读者对Dubbo有一个总体的认识。首先介绍后台应用架构的演进过程,从最初的JEE到现在的微服务架构都会介绍;然后简单介绍一下Dubbo,包括它的发展历史、未来方向等;最后讲解Dubbo的总体大图,通过分层的方式讲解Dubb。的总体架构,并介绍Dubbo的核心组件及总体流程。

2401_83384536的博客 1038

什么是RPC?RPC框架dubbo的核心流程

一、REST 与 RPC 1、什么是 REST 和 RPC 协议? 在单体应用中,各模块间的调用是通过编程语言级别的方法函数来实现,但分布式系统运行在多台机器上,一般来说,每个服务实例都是一个进程,服务间必须使用进程间通信机制来交互,而常见的通信协议主要有 RPC 和 REST 协议。 (1)REST: REST 是基于 HTTP 实现,使用 HTTP 协议处理数据通信,更加标准化与通用,因为无论哪种语言都支持 HTTP 协议。常见的 http API 都可以称为 Rest 接口。RES...

duan18888的博客 2189

分布式框架Apache Dubbo

Dubbo入门Demo

m0_58996074的博客 428
上一篇: 【EasyExcel】Java使用EasyExcel操作Excel文档
下一篇: 【Dubbo】深入理解Apache Dubbo(二):开发第一个Dubbo应用程序
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值