Paxos算法笔记

Kimi K3大模型API实战:从调用到本地知识库问答系统构建 大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例 阅读详情

这篇文章是记录本人学习Paxos算法的理解,本人才疏学浅,如果有错误欢迎指正!转载请标明出处!谢谢😄

什么是Paxos?

Paxos是位于希腊的一个小岛🏝。

Paxos算法是由分布式系统大神 Leslie Lamport 提出的一种基于消息传递并且高度容错的一致性算法。Paxos算法的命名由来,是因为Lamport最初是用一个发生在Paxos岛上的城邦议会故事阐述的,可惜并没有人能听懂他的故事。Lamport很可惜没人理解他的幽默😞,于是重新写了一篇关于Paxos算法的文章Paxos Made Simple

为什么会有Paxos?

首先想想什么是分布式系统?🤔

通俗的来说,就是使用多台机器各司其职地为用户提供服务,而于用户而言,就像是使用单机系统一样方便,不需要也感受不到后端多台机器的运作😲。

那么分布式系统中需要解决的问题也就显而易见,就是如何使多台提供同一服务的机器协调一致?我们要知道,在一个分布式系统中,多台机器的地理位置可能不同(可能有的紧挨在一个机房,也可能有的横跨半个地球),每台机器的硬件性能不同,处理速度不同,实时网速不同,也能有的机器会宕机。

这个问题是使分布式系统正确运行的根本问题,也是分布式系统设计中的一大难题。而 Paxos 算法被誉为解决一致性问题的圣经👑。

Paxos怎么运作?

为了更准确地描述算法流程避免翻译带来的歧义,算法中重要的角色我会使用英文原文的名称

Paxos 算法是出了名的晦涩难懂😩,倒不是因为它包含什么定理公式,而是因为它的流程和规则较为复杂。但是所谓难者不会,会者不难。只要理清它的执行过程,就会自然清晰明了。

为了更加清晰地解释,我们将 Paxos 分为两类:

  • Basic Paxos:一个或多个机器提出指令,仅有一个指令会被选中
  • Multi-Paxos:由多个 Basic Paxos 共同组成,用于确定一系列指令

下文将详细讨论选定单个 value 一致性的 Basic Paxos 过程,明白 Basic Paxos 后,其他的 Paxos 形式就迎刃而解了。

Basic Paxos

在阐述 Basic Paxos 过程之前,我们需要知道其包含两个角色:

  • Proposers:
    • 处理 client 请求
    • 提出一个 proposal
  • Acceptors:
    • 处理 proposers 请求
    • 回复当前 proposal 的投票情况
    • 保存已经选定的 proposal 和当前的投票状态

在Paxos Made Simple原文中还有第三个角色Learner,它的作用仅仅是获取已被选中的proposal,在此为了方便表述将它与Acceptor合为一谈

在执行Paxos算法的过程中,任何一个机器都可以同时充当其中的任意一个或多个角色

从实例出发

现在假设这样一个记录指令日志的应用场景:

我们的分布式系统中有一个服务需要由一个集群提供支持,这个集群包含五台 Server。

任意时刻都可能有某个 Client 向其中一台 Server 发出指令请求。

在这里插入图片描述

那么,当五台 Server 收到不同的 Client 请求时就会执行 Paxos 算法来确保整个集群的一致性,保证每台 Server 中的指令日志内容及顺序完全一致。这样一来,才可以保证每台 Server 按照指令日志执行完指令以后集群中的数据完全一致。

每个收到 Client 指令请求的 Server 在算法中就充当 Proposer 的角色(记住哦!Server 可以同时是 Proposer 和 Acceptor)。Client 将指令请求交给 Proposer 后就不用再管了😴,接下来就是 Server 之间协调一致的工作,完成一致性工作后 Proposer 会把执行后的结果返回给 Client。

接下来,我们详细讨论一致性工作是怎么完成的?

请求这么多,听谁的?

Basic Paxos 最终只会选定一个指令,那么这多么的指令请求,听谁的呢?

Proposer 会将 Client 的请求作为一个 value 包装成一个 proposal 发送给所有的 Acceptor,由 Acceptor 来做仲裁。

Paxos 是一个民主的算法,遵循少数服从多数的原则。当超过半数的 Acceptor 都 accept 了某个 proposal 时,这个 proposal 中的 value 就会被唯一选定,且不会再改变(划重点!!!)

有了这样一个原则,所以通常会选出奇数个 Acceptor。因为根据半数原则,如果选出偶数个 Acceptor,必然会浪费一个 Acceptor 的资源(例如选择 4 个,半数是 2;选择 3 个,半数也是 2,而只要有超过 2 个 Acceptor 的投票相同就可以确定答案)

那么只选 1 个 Acceptor 行不行呢?

在这里插入图片描述

乍一看貌似可行,但是,如果这个唯一的 Acceptor 宕机了怎么办?那么整个算法就无法执行下去了,这违背了高容错的原则,因此尽量选择 3 个及以上的 Acceptor

为了方便讲述,这里我们假设每个 Server 即是 Proposer 也是 Acceptor

还有一点要注意的是,因为只有超过半数的 Acceptor 投票后,才会选定一个 value,因此,在选定之前 Acceptor 需要暂时记录自己当前已投票的 proposal,即在 choose 阶段前,还需要有一个 accept 阶段

接下来,又有了一个新的问题:Acceptor 到底应该 accept 哪个 proposal?

accept 并且只 accept 第一个收到的 proposal?

如果我们让 Acceptor 只 accept 第一个收到的 proposal,行不行呢?来看这样一种情况:

在这里插入图片描述

可见,在这样的情况下,没有一个 proposal 的票数占据半数以上,形成了死锁

由此,我们可以提出改进,Acceptor 也许应该可以 accept 多个 proposal

accept 所有收到的 proposal?

这个方案是否可行,可以看这样一种情况:

在这里插入图片描述

在这种情况中,集群最终会选定两个 value,这违背了只能选定一个 value 的原则

仔细分析上面的情况,可以发现,在 Server5 提出 proposal(mov) 之前,集群其实已经有一个 proposal(add) 票数过半,成功选定。

因此,在一个 Proposer 提出 proposal 之前,应当先检查是否已经有一个选定的 value,如果有了就不再提出新的 value 了,这种先检查后提交的方式,正是 2PC

2PC 能够胜任吗?

至此,我们似乎已经做足了准备,可惜,这样的系统还是存在缺陷,如下:
在这里插入图片描述

在这种情况中,Server1 和 Server5 在提出 value 前都进行了检查,确实没有被选中的 value,可是因为 Acceptor 在 accept proposal 时存在网络延时,导致还是出现了选定两个 value 的情况出现,因此我们必须要对proposal进行排序,以拒绝旧的proposal (或是优先级低的)
比如在上面的例子中,Server3应该 reject Server1,因为Server5更新

独一无二的 proposal 和喜新厌旧的 Acceptor

为了能够对 proposal 排序,我们需要为每一个 proposal 设置一个唯一的id来标记它。并且规定:

  • id更高的 proposal 较 id 更低的 proposal 享有更高的优先权
  • proposer 能够选择一个比它见过或用过的 id 更高的 id 作为自己的 proposal_Id

为了保证 proposal_Id 能够保持递增且唯一,有两种实现方法:

  • RoundNumber + ServerId:因为算法可能需要多次循环才可以最终选定 value,因此每个 Server 都必须持久化保存它所见过的最大的轮次数,这样保证 id 递增,再连接 ServerId 保证唯一性。RoundNumber需要持久化保存,以保证宕机后也能快速恢复
  • TimeStamp + ServerId:使用系统TimeStamp + ServerId也可以保证递增性和唯一性,但是需要注意保证系统时间的一致

现在,Proposer 提出 proposal 的格式就是 <proposal_Id, value>

万事具备,开始执行

至此我们知道了 Basic Paxos 算法种包含的各种角色,考虑并解决了种种可能出错的情况,接下来通过一张图,疏通一下 Basic Paxos 整体运行流程:

在这里插入图片描述

为保证算法正确运行,Acceptors必须将 minProposal, acceptedProposal, acceptedValue持久化保存到本地

三个 Basic Paxos 实例

prepare 开始时已有 value 被选定

如果本轮算法执行过程中,已经有一个 value 被选定,那么后续的 Proposer 在发起 proposal 前会检查到这个结果,并且会将自己的 value 替换为已选定的 value(参考上小节步骤4)

在这里插入图片描述

已有 value 被 accepted 但是还未选定,新的 Proposer 检查到了

若在一个 Accepter 中,已经存在一个 accepted value 但是这个 value 还未被选定,而此时又收到了新的 Proposer 发了的 perpare 请求,那么这个新的 Proposer 会将自己的 value 替换为 accepted value

在这里插入图片描述

已有 value 被 accepted 但是还未选定,新的 Proposer 没有检查到

在上述的情况中,若新的 Proposer 没有检查到 accepted value,则它会继续使用自己的 value,而根据“喜新厌旧”的原则,先前的 accepted value 在后续的 Accept 阶段中会被拒绝

在这里插入图片描述

还有几点要补充

我们先看这样一种情况:

在这里插入图片描述

在这个情况中,两个 Proposer 在发起 proposal 时都未检查到对方的存在,导致活锁

解决方法:每个 Proposer 一轮 proposal 失败后,随机延时一段时间再重发 proposal,给其他 Proposer 成功的机会

我们还要注意的是:

  • Paxos 算法默认集群中没有坏消息或恶意消息,即应用在non- Byzantine fault情况下
  • Proposer 的最终目的并不是全力是自己的初始 value 被选定,而是全力是集群尽快达成一致
  • Accepter不会知道最终选定的 value 是什么,只有 Proposer 才知道,所以如果一个 Server 想知道最终被选定的 value ,它必须以 Proposer 的身份发起一次 proposal(value被选定后就唯一确定,不再更改,所以以获得选定 value 为目的的 proposal 可以携带任意 value)

参考资料

[1] Paxos lecture (Raft user study),Diego Ongaro
[2] Paxos Made Simple
[3] 知行学社——Paxos

12-RK平台U-Boot启动流程 先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。 阅读详情

相关推荐

SiamRPN++实战:如何用深度孪生网络提升无人机目标跟踪精度(附代码)

本文深入探讨了如何利用SiamRPN++深度孪生网络构建适用于无人机平台的高精度、轻量化单目标跟踪系统。文章详细解析了其兼顾精度与效率的核心原理,并提供了从PyTorch模型轻量化、骨干网络替换到TensorRT部署及应对遮挡、光照突变等实际挑战的完整工程实践指南与代码示例。

weixin_29047545的博客 370

paxos算法

paxos算法解决集群的一致性问题。 问题描述: 有一个集群,集群就是由多个节点组成的系统,每个节点可以担当以下的一个或几个角色: a)proposer:提议者,可以提出一个提议(propose),提议的内容就是设置某个值 b)acceptor:判决者,可以针对一个提议判断是否通过。一个acceptor通过提议不代表集群通过提议,集群通过提议的方法待定。 c)leaner:使用提议的结果 要求集群满足一致性:在任一时刻,集群中的值都是唯一的,即无论从哪个可访问的节点访问一个值,得到的结果都.

cocoti的博客 425

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

Paxos 算法

(3)Propose: Proposer收到多数Acceptor的Promise应答后,从应答中选择Proposal ID最大的提案的Value,作为本次要发起的提 案。(1)Prepare: Proposer生成全局唯一且递增的Proposal ID,向所有Acceptor发送Propose请求,这里无需携带提案内容,只携带Proposal ID即可。➢ 不违背以前做出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。

yitian881112的专栏 763

安装了anaconda,pycharm导入numpy时提示没有该包(模块)?

**问题详情:**我安装了anaconda,在利用Pycharm学习numpy这个库的时候,导入numpy这个包的时候提示我没有nummpy这个模块:No module named numpy.如下图所示。 应该说安装了Anaconda,里边就自带了numpy这个库,就应该能够使用。我一个新手怎么搞得懂呢?于是网上查了查找到了一个解决办法,说是我项目的解释器应该设置为Anaconda安装目录下的python.exe,而不应该是系统自带的:https://blog.youkuaiyun.com/aanndd77/art

qq_39820505的博客 1万+

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲)

本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器和跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器和新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。

weixin_40590799的博客 2958

分布式事务之底层原理揭秘

点击上方“服务端思维”,选择“设为星标”回复”669“获取独家整理的精选资料集回复”加群“加入全国服务端高端社群「后端圈」作者 | 妖道出品| 远赴星辰刚性事务柔性事务本地事务分布式事务...

梁桂钊的博客 626

通过 CoovaChilli 和 FreeRADIUS 搭建一个公共 Wi-Fi 的认证系统,实现用户连接到 Wi-Fi 后通过 Captive Portal(强制登录页面)进行认证

要实现固定设备连接的功能,你可以通过MAC 地址认证来限制哪些设备可以通过 FreeRADIUS 进行身份验证和连接。你可以在 FreeRADIUS 的users文件中直接配置允许的设备的 MAC 地址,也可以通过数据库存储和查询设备信息,进一步提高管理效率。通过这些方法,你可以灵活地控制哪些设备能够访问你的 Wi-Fi 网络。

m0_69943017的博客 2650

Paxos共识算法详解

在一个分布式系统中,由于节点故障、网络延迟等各种原因,根据CAP理论,我们只能保证一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance) 中的两个。 对于一致性要求高的系统,比如银行取款机,就会选择牺牲可用性,故障时拒绝服务。MongoDB、Redis、MapReduce使用这种方案。 对于静态网站、实时性较弱的查询类数据库,会牺...

weixin_34245169的博客 440

Autosar 下电过程-基于ETAS工具

本文介绍基于ETAS工具对应的BIP包的下电过程,仅供参考。在最后调用SBC下电时,需要理清楚SBC的休眠流程,否则可能会出现休眠又唤醒情况。后面有空会介绍9471的休眠流程。

赞的博客 813

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

2025年华为杯D题:低空湍流监测及最优航路规划思路与Matlab实现

前程算法屋的博客 772

Zookeeper-相关流程

选主流程:   当Zk进入恢复模式时,需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。Zk的选举算法有两种:一种是基于basic paxos实现的,一种是基于fast paxos算法实现的。系统默认的是fast paxos。 basic paxos流程:   1、当前Server中发起选举的线程担任选举线程,主要功能是对投票结果进统计,并选出推荐的S...

diaohudou1168的博客 146

UE实现贴地线(SurfaceLine)效果

UnrealEngine实现贴地线效果

专注GIS开发 4572

paxos算法_Paxos算法笔记

这篇文章是记录本人学习Paxos算法的理解,本人才疏学浅,如果有错误欢迎指正!转载请标明出处!谢谢 什么是Paxos?Paxos是位于希腊的一个小岛 。Paxos算法是由分布式系统大神Leslie Lamport提出的一种基于消息传递并且高度容错的一致性算法。Paxos算法的命名由来,是因为Lamport最初是用一个发生在Paxos岛上的城邦议会故事阐述的,可惜并没有人能听懂他的故事。Lampor...

weixin_39609718的博客 163

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Paxos算法学习笔记

学习了1个多月,现在回头看,觉得要理解paxos算法,需要阅读下面三篇论文: The part-time parliament [英文] [中文] Paxos Made Simple [英文] [翻译] Paxos Made Code [英文] 前两篇更多的是理论,第三篇介绍了paxos的实现。 阅读第三篇还是很有必要的,在看第三篇之前,我一直不理解一个paxos的instanc

m_vptr的专栏 6607

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PAXOS算法读书笔记

一 概述 paxos 是一种提高分布式系统容错性的一致性算法。 二 算法理解 1 问题描述 假设一组可以提出提案的进程集合,对于一个一致性算法来说,需要满足以下几点: 在这些提出的提案中,只有一个会被选定 如果没有提案被提出,就不会有被选定的题案 如果一个提案被选定后,进程应该可以获取被选定的提案信息。 从整体上说,paxos算法的目标是保证最终会有一个提案被选定,当提案...

SECURE2的博客 320

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

转载笔记:paxos算法推导

转载链接:分布式系列文章——Paxos算法原理与推导 - lzslbd - 博客园Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。本文试图带大家一步步揭开Paxos神秘的面纱。https://www.cnblogs.com/linbingdong/p/6253479.html Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。 网上有很多讲解Paxos算法的文章,

jiangliming123的博客 125

经典Paxos算法笔记

介绍 Paxos算法是一个高容错性的分布式一致性算法。去年学习过Paxos算法,一直没将整理到博客。现在将经典Paxos算法相关内容整理到博客上。 经典Paxos算法本身也并不是太难理解,Lamport从期望的结果出发,通过增强条件一步步反推,最终发掘出可以保证了系统一致性的Paxos算法。如果能仔细体会到这其中一步步的反推,就会觉得Paxos是个很自然的东西了。 首先了解一下Paxos算法的作者...

weixin_30511107的博客 144

Paxos、Raft、PacificA一致性算法笔记

1. Paxos算法 Paxos算法是一个经典的分布式算法,它引入了提议者,接受者,学习者三种角色,generalize了二阶段提交模型。大致思想是,提议者通过竞争获得提议资格(超过半数认可),提议被多数接受者确认后即成事实,无法改变。它是基于以下假设的,后来的提议者无条件接受已经被大多数接受者认可的提议,接受者一旦接受某个提议者的提议,那么此轮中不再接受其他提议者。具体我们可以通过一个...

Think++ 2025

zookeeper学习笔记之-Paxos算法(一)- Basic Paxos

提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos 算法、Cheap Paxos 算法、Raft 算法等等。而很多同学都会在准确和系统理解 Paxos 算法上踩坑,比如,只知道它可以用来达成共识,但不知道它是如何达成共识的。 这其实侧面说明了 Paxos 算法有一定的难度,可分布式算法本身就很复杂,Paxos 算法自然也不会例外,当然了,除了这一点,还跟兰伯特有关。 兰伯特提出的..

huanglei_hacker的博客 432

zookeeper学习笔记之-Paxos算法(二)- Multi-Paxos

Basic Paxos 只能就单个值(Value)达成共识,一旦遇到为一系列的值实现共识的时候,它就不管用了。虽然兰伯特提到可以通过多次执行 Basic Paxos 实例(比如每接收到一个值时,就执行一次 Basic Paxos 算法)实现一系列值的共识。但是,很多同学读完论文后,应该还是两眼摸黑,虽然每个英文单词都能读懂,但还是不理解兰伯特提到的 Multi-Paxos,为什么 Multi-Paxos 这么难理解呢? 在我看来,兰伯特并没有把 Multi-Paxos 讲清楚,只是介绍了大概的思想,.

huanglei_hacker的博客 393

阅读笔记(八)共识算法Paxos

一. 前言   本文接前文2PC, 3PC,继续介绍最常用的共识算法之一:Paxos

ty的博客 738

Paxos算法:学习笔记

Paxos算法:学习笔记

qq_62815329的博客 188

分布式协议与算法实战——Basic Paxos(笔记)

在过去几十年里,Paxos算法基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos算法、Cheap Paxos 算法、Raft 算法、ZAB 协议等等。 兰伯特提出的 Paxos 算法包含 2 个部分: Basic Paxos 算法:描述的是多节点之间如何就某个值(提案 Value)达成共识; Multi-Paxos 思想:描述的是执行多个 Basic Paxos 实例,就一系列值达成共识。 Basic Paxos算法 三种角色 提议者(Propos.

weixin_42094659的博客 4158

分布式一致性Paxos算法学习笔记(一):paxos大杂烩

取名 Paxos(Greek: Παξοί,pronouncedPaksi in English)又名Paxi是希腊西南部一个风景如画的小岛。而Paxos算法则是现在很火的分布式一致性算法,为何以一个希腊小岛名字算法?Lamport这样解释道: I thought, and still think, that Paxos is an important alg...

aa8621090的博客 276

分布式学习笔记---一致性算法,Paxos算法

分布式学习笔记—一致性算法 1. 一致性算法:Paxos算法 Paxos算法是Lamport提出的一种基于消息传递的分布式一致性算法 自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性。Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题,如Chubby、Megastore以及Spanner等。开源的ZooKeeper,以及MySQL 5.7推出的用来取代传统的主从复制的MySQL Group Replication等纷纷采用Paxos算法解

qq_39314972的博客 366
上一篇: 分布式调度系统-任务调度
下一篇: 关于Java互斥锁
WhataNerd
博客等级 码龄11年 191粉丝 64原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值