Zookeeper 系统模型

Zookeeper学习:ZooKeeper系统模型 1. ZooKeeper 数据模型 Znode 在Zookeeper中,数据信息被保存在一个个数据节点上,这些节点被称为ZNode。ZNode 是 Zookeeper 中最小数据单位,在 ZNode 下面又可以再挂 ZNode,这样一层层下去就形成了一个层次化命名空间 ZNode 树,我们称为ZNode Tree,它采用了类似文件系统的层级树状结构进行管理。见下图示例: 在Zookeeper中,每一个数据节点都是一个ZNode,上图根目录下有两个节点,分别是∶app1 和 app2,其中 app1 下面又 阅读详情

为了应对大流量,现代应用/中间件通常采用分布式部署,此时不得不考虑 CAP 问题。ZooKeeper是面向 CP 设计的一个开源的分布式协调框架,将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

数据模型

ZooKeeper 有一个分层命名空间,很像分布式文件系统。唯一的区别是命名空间中的每个节点都可以有与其关联的数据以及子节点。ZooKeeper 树中的每个节点都称为 znode。znode 维护一个 stat 结构,其中包括数据更改的版本号、acl 更改。stat 结构也有时间戳。每次 znode 的数据更改时,版本号都会增加。例如,每当客户端检索数据时,它也会收到数据的版本。当客户端执行更新或删除时,它必须提供它正在更改的 znode 数据的版本。如果它提供的版本与数据的实际版本不匹配,则更新将失败。

节点特性

Zookeeper 的命名空间是由一系列的数据节点组成的。我们在本节详细讲解一下。

节点类型

在 ZooKeeper 中,每个数据节点都是有生命周期的,其生命周期的长短取决于数据节点的节点类型。在 3.6.0 版本之前,节点类型可以分为持久节点(PERSISTENT)、临时节点(EPHEMERAL)和顺序节点(SEQUENTIAL)三大类,具体在节点创建过程中,通过组合使用,可以生成以下四种组合型节点类型:

持久节点(PERSISTENT)

持久节点是 ZooKeeper 中最常见的一种节点类型。所谓持久节点,是指该数据节点被创建后,就会一直存在于 ZooKeeper 服务器上,直到有删除操作来主动清除这个节点。

持久顺序节点(PERSISTENT_SEQUENTIAL)

持久顺序节点的基本特性和持久节点是一致的,额外的特性表现在顺序性上。在 ZooKeeper 中,每个父节点都会为它的第一级子节点维护一份顺序,用于记录下每个子节点创建的先后顺序。基于这个顺序特性,在创建子节点的时候,可以设置这个标记,那么在创建节点过程中,ZooKeeper 会自动为给定节点名加上一个数字后缀,作为一个新的、完整的节点名。另外需要注意的是,这个数字后缀的上限是整型的最大值。

临时节点(EPHEMERAL)

和持久节点不同的是,临时节点的生命周期和客户端的会话绑定在一起,也就是说,如果客户端会话失效,那么这个节点就会被自动清理掉。注意,这里提到的是客户端会话失效,而非 TCP 连接断开。另外,ZooKeeper 规定了不能基于临时节点来创建子节点。

临时顺序节点(EPHEMERAL_SEQUENTIAL)

临时顺序节点的基本特性和临时节点也是一致的,同样是在临时节点的基础上,添加了顺序的特性。

在 3.6.0 版本又加入了下面两种节点:

容器节点(Container Nodes)

容器节点的表现和持久节点是一样的,区别在于 ZooKeeper 服务端启动后,会有一个单独的线程去扫描所有的容器节点,当发现容器节点的子节点数量为 0 时,会自动删除该节点,除此之外和持久节点没有区别。

Container znodes are special purpose znodes useful for recipes such as leader, lock, etc.

官方文档建议容器节点可用于领导者、锁定等场景。

TTL 节点(TTL Nodes)

创建 PERSISTENT 或 PERSISTENT_SEQUENTIAL 类型的节点时,可以选择为 znode 设置一个 TTL(以毫秒为单位)。如果 znode 在 TTL 内没有被修改并且没有子节点,它将成为将来某个时候被服务器删除。

状态信息

Zookeeper 的每个数据节点除了存储了数据内容之外,还存储了数据节点本身的一些状态信息。我们可以用 stat 命令查看节点的状态信息。

上图展现的字段其实就是数据节点的 Stat 对象的格式化输出,可以看下图 Stat 里面的属性解释。

版本

ZooKeeper 中为数据节点引入了版本的概念,每个数据节点都具有三种类型的版本信息,对数据节点的任何更新操作都会引起版本号的变化。

它表示的是对数据节点的数据内容、子节点列表,或是节点ACL信息的修改次数,每次更新之后版本号就会加 1。

在 ZooKeeper 中,version 属性正是用来实现乐观锁机制中的“写入校验”的。当更新数据时 version 的传值不为 -1,需要校验传入的 version 是否与当前节点的 version 值相等,如果不相等这次更新操作就会失败。

// Set the data for the node of the given path if such a node exists and the given version matches the version of the node (if the given version is -1, it matches any node's versions).
Stat setData(String path, byte[] data, int version)

Watch

ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

特性

ZooKeeper 的 Watcher 具有以下几个特性:

一次性

从上面的介绍中可以看到,无论是服务端还是客户端,一旦一个 Watcher 被触发,ZooKeeper 都会将其从相应的存储中移除。因此,开发人员在 Watcher 的使用上要记住的一点是需要反复注册。这样的设计有效地减轻了服务端的压力。如果注册一个Watcher之后一直有效,那么针对那些更新非常频繁的节点,服务端会不断地向客户端发送事件通知,这无论对于网络还是服务端性能的影响都非常大。注意:3.6.0版本加入了支持持久化和递归特性的 Watcher,这个 Watcher 在触发后不会被移除,监视触发事件类型有 NodeCreated、NodeDeleted 和 NodeDataChanged,并且可以选择递归的监视注册的 znode 开始的所有 znode,并且这种不会触发 NodeChildrenChanged 事件。

客户端串行执行

客户端 Watcher 回调的过程是一个串行同步的过程,这为我们保证了顺序,同时,需要开发人员注意的一点是,千万不要因为一个 Watcher 的处理逻辑影响了整个客户端的 Watcher 回调。

轻量

WatchedEvent 是 ZooKeeper 整个 Watcher 通知机制的最小通知单元,这个数据结构中只包含三部分内容:通知状态、事件类型和节点路径。也就是说,Watcher 通知非常简单,只会告诉客户端发生了事件,而不会说明事件的具体内容。例如针对 NodeDataChanged 事件,ZooKeeper 的 Watcher 只会通知客户端指定数据节点的数据内容发生了变更,而对于原始数据以及变更后的新数据都无法从这个事件中直接获取到,而是需要客户端主动重新去获取数据,这也是 ZooKeeper 的 Watcher 机制的一个非常重要的特性。

另外,客户端向服务端注册 Watcher 的时候,并不会把客户端真实的 Watcher 对象传递到服务端,仅仅只是在客户端请求中使用 boolean 类型属性进行了标记,同时服务端也仅仅只是保存了当前连接的 ServerCnxn 对象。

如此轻量的 Watcher 机制设计,在网络开销和服务端内存开销上都是非常廉价的。

注意事项

  1. 普通的 Watcher 是一次性触发器,如果你想未来还接收到通知则需要再注册一个 Watcher。
  2. 因为普通的 Watcher 是一次性触发器,并且在接收到通知和设置新 Watcher 都会有延时,在这段时间内节点的变更不会通知客户端。

ACL

权限:Permission

在ZooKeeper中,所有对数据的操作权限分为以下五大类:

· CREATE(C) :数据节点的创建权限,允许授权对象在该数据节点下创建子节点。

· DELETE(D) :子节点的删除权限,允许授权对象删除该数据节点的子节点。

· READ(R) :数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或子节点列表等。

· WRITE(W) :数据节点的更新权限,允许授权对象对该数据节点进行更新操作。

· ADMIN(A) :数据节点的管理权限,允许授权对象对该数据节点进行 ACL 相关的设置操作。

权限模式:Scheme

权限模式用来确定权限验证过程中使用的检验策略。在ZooKeeper中,开发人员使用最多的就是以下四种权限模式。

  • IP:IP 模式通过 IP 地址粒度来进行权限控制,例如配置了“ip:192.168.0.110”,即表示权限控制都是针对这个 IP 地址的。同时,IP 模式也支持按照网段的方式进行配置,例如“ip:192.168.0.1/24”表示针对 192.168.0. 这个IP段进行权限控制。

  • Digest:Digest是最常用的权限控制模式,也更符合我们对于权限控制的认识,其以类似于“username:password”形式的权限标识来进行权限配置,便于区分不同应用来进行权限控制。当我们通过“username:password”形式配置了权限标识后,ZooKeeper 会对其先后进行两次编码处理,分别是 SHA-1 算法加密和 BASE64 编码。

  • World:World 是一种最开放的权限控制模式,从其名字中也可以看出,事实上这种权限控制方式几乎没有任何作用,数据节点的访问权限对所有用户开放,即所有用户都可以在不进行任何权限校验的情况下操作 ZooKeeper 上的数据。另外,World 模式也可以看作是一种特殊的 Digest 模式,它只有一个权限标识,即“world:anyone”。

  • Super:Super模式,顾名思义就是超级用户的意思,也是一种特殊的 Digest 模式。在Super模式下,超级用户可以对任意 ZooKeeper 上的数据节点进行任何操作。

zookeeper使用篇-Zookeeper系统核心模型 一般开发中,Zookeeper自带的权限操作已经满足日常使用,但是如果需要特殊的权限控制操作,Zookeeper同样支持自定义一个权限控制器,在Zookeeper中,权限主要在接口中定义,其代码定义如下:我们需要实现自定义的权限控制器只要实现当前接口,在实现完毕以后,我们将该自定义的权限控制器注册到Zookeeper服务中去,而注册的方式有两种:1.系统属性配置在Zookeeper启动的时候,在启动参数中指定:2.配置文件方式。 阅读详情

相关推荐

进阶数据结构——链式前向星

链式前向星是一种进阶的数据结构,主要用于图的存储。我希望大家先看这个视频(蓝色字体点进去) 不然你很难理解的。在图论中,图的存储方式主要有邻接矩阵和邻接表两种。邻接矩阵虽然建图简单方便,但占内存较大,节点数量稍微大点的题目就难以使用(适合稠密图);而邻接表虽然节省空间,但其指针形式难写易错,且vector形式的读取速度较慢,易导致大数据下的超时(TLE)。针对上述问题,链式前向星作为一种折中的方式应运而生。链式前向星本质上是一种静态链表,它将数据以链表形式连接在一起。

ycs66的博客 2138

Zookeeper学习笔记

1)Zookeeper是什么 zookeeper,它是一个分布式服务框架,是大数据中的重要组件,它是一个具有高吞吐量的分布式协调系统,它的主要作用是为分布式系统提供协调服务,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 Dubbo官方推荐使用zookeeoer作为注册中心,注册中心负责服务地址的注册和查找,相当于目录服务。 什么是注册中心?举个简单的例子 ,就像字典目录 ,你要查个字, 找到目录, 然后找到对应的页, 然后字就找到了。 zk也是一个意思,把你要注册的服务给..

Morning Sunshine的IT技术博客 5272

CAN开发笔记(TI开发者推荐笔记)

查阅了很多资料没有查阅到关于5728芯片CAN模块寄存器的介绍,希望通过本文能给做CAN驱动的后来者有一点参考意义,我也是刚接触CAN模块有些不足请各位多多指正。 由下图所示是CAN模块初始化流程图 首先要开始初始化,设置CAN位时间,然后配置message objects, 完成初始化。 1.开始初始化 首先要控制DCAN_CTL 寄存器,该寄存器是CAN模块的总控制器,很多配置通过...

weixin_44316996的博客 3563

ZooKeeper为什么是CP

总结起来,ZooKeeper的ZAB协议,利用【消息广播阶段】和【崩溃恢复阶段】来实现数据一致性。1、在消息广播阶段,leader节点接收和广播事务请求,并根据大多数节点的反馈决定是否进行commit。2、崩溃恢复阶段,当leader不可用时,进行leader选举和数据同步操作。Zxid是ZAB协议中的一个重要概念,用于【标识事务的编号】和【确定leader周期】。通过这些机制,ZooKeeper保证了在分布式场景下数据的一致性和可靠性。

weixin_37862824的博客 1987

Pixhawk变砖自救指南:从DFU模式到固件重刷全流程(附2.4.8实测)

本文详细介绍了Pixhawk飞控变砖后的自救方法,从DFU模式进入、固件重刷到高级恢复技巧全流程。特别针对国产版本boot0引脚未引出的特殊情况提供了解决方案,帮助用户通过QGC或Mission Planner地面站工具恢复飞控功能,适用于2.4.8等常见固件版本。

weixin_29168813的博客 339

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1833

zookeeper是cp还是ap

zookeeper是cp还是ap

weixin_43854800的博客 4369

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

452

CAP理论与ZooKeeper

zookeeper在选举leader时,会停止服务,直到选举成功之后才会再次对外提供服务,这个时候就说明了服务不可用,但是在选举成功之后,因为一主多从的结构,zookeeper在这时还是一个高可用注册中心,只是在优先保证一致性的前提下,zookeeper才会顾及到可用性。也就是说,如果一个客户端将Znode z的值更新为a,在之后的操作中,它又将z的值更新为b,则没有客户端能够在看到z的值是b之后再看到值a(如果没有其他对z的更新)。在此时间段内,任何系统的改变将被客户端看到,或者被客户端侦测到。

m0_37967990的博客 2万+

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2393

SAP Fiori 从技术上而言到底包含哪些组件?

SAP Fiori是企业级UX设计的系统化解决方案,基于五大原则构建:角色导向(Role-based)、自适应(Adaptive)、简洁(Simple)、一致(Coherent)和愉悦(Delightful)。其技术实现包含SAPUI5开发框架、Fiori Launchpad统一入口、OData服务网关等核心组件,通过标准化设计模式与开发工具链,显著提升企业应用的用户体验和开发效率。典型案例显示,遵循Fiori原则可缩短30%以上的操作时长,降低50%的培训成本。该体系既保持跨设备一致性,又支持业务场景的深

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 226

zookeeper系统模型

本文将从数据模型、节点特性、版本、监听器、ACL五方面来阐述zookeeper的系统模型。 1. 数据模型 zookeeper采用树形层次结构,树中的每个节点被称为znode。 znode的节点路径标识方式和Unix文件系统路径非常相似,都是由一系列使用斜杠(/)进行分割的路径表示,开发人员可以向这个节点中写入数据,...

LIEY 507

博途PLC如何建立与笔记本电脑端的连接?(新手必会)

对S7-1500PLC下载硬件组态或程序,需要建立PC与PLC的连接。 由于S7-1500CPU都具有PN端口,因此建立PC与S7-1500PLC的连接通常使用工业以太网来实现。 1.使用网线连接PC-PLC 使用网线,一端连接PC的以太网卡端口,另一端连接S7-1500CPU的PN端口。 2.设置本机IP地址 2.1 确认本机要设置的IP地址段 本机IP地址要和PLC程序组态IP地址段前三位保持一致,后一位使用组态中没有用到的IP地址段。如下图所示。 那么看了这个图片应该就知道了,地址应该设置成192.

weixin_42430971的博客 1万+

Zookeeper(3) Zookeeper的系统模型

一、前言 前面已经讲解了Zookeeper的一些应用场景,但是并没有深入到Zookeeper内部进行分析,本篇将讲解其系统模型。 二、系统模型 2.1 数据模型 Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,称为树。 在Zookeeper中,事务是指能够改变Zooke...

cowbin2012的专栏 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

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

ZooKeeper的系统模型

ZooKeeper的系统模型 ZooKeeper的系统模型1.系统模型(1)数据模型(2)节点特性(3)版本(4)Watcher 1.系统模型 (1)数据模型   ZooKeeper的视图结构和标准的Unix文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的“数据节点”概念,称之为ZNode。ZNode是ZooKeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载节点,构成一个层次化的命名空间,是个树。其数据模型如下图所示:   在ZooKeeper

loser与你 522

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Zookeeper系统模型

ZooKeeper中,数据信息被保存在⼀个个数据节点上,这些节点被称为ZNode。ZNode 是Zookeeper 中最⼩数据单位,在ZNode下可以再挂 ZNode,形成如下图所示的 ZNode Tree,它采⽤了类似⽂件系统的层级树状结构进⾏管理。............

脑细胞:-D的博客 229

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Zookeeper学习笔记——Zookeeper系统模型

从数据模型、节点特性、版本、Watcher和ACL五方面分析Zookeeper的系统模型。 1、数据模型 如图1所示,Zookeeper的数据模型在结构上与Unix文件系统类似,采用树型层次结构,Zookeeper树中每个节点称为Znode。 图1 Zookeeper数据模型 在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,包括数据节点创建/删除、数据节点内容更新以及...

qq_41688455的博客 332

ZooKeeper技术内幕——系统模型

系统模型包括五个部分:数据模型、节点特性、版本、Watcher和ACL。 数据模型 数据节点 用ZNode来表示,ZNode是ZooKeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载子节点,因此构成了一个层次的命名空间,称之为树。 事务ID 在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作。一般包括:数据节点创建与删除、数据节点内容更新...

Ackerman的博客 438

【分布式】Zookeeper系统模型

一、前言   前面已经讲解了Zookeeper的一些应用场景,但是并没有深入到Zookeeper内部进行分析,本篇将讲解其系统模型。 二、系统模型   2.1 数据模型   Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,称为树。   在Zookeeper中...

weixin_34104341的博客 139

zookeeper学习笔记---Zookeeper系统模型

zookeeper学习笔记—Zookeeper系统模型 1.ZooKeeper数据模型Znode 2. ZNode 的类型 zookeeper的节点类型可以分为三大类 事务ID Znode的状态信息 cZxid 就是 Create ZXID,表示节点被创建时的事务ID。 ctime就是 Create Time,表示节点创建时间。 mZxid 就是 Modified ZXID,表示节点最后⼀次被修改时的事务ID。 mtime 就是 Modified Time,表示节点最后⼀次被修改的时间。 p

qq_39314972的博客 260

Zookeeper系统模型介绍

本文主要讲解的是zookeeper的系统模型

gaoqiandr的博客 1101

zookeeper-系统模型

1.    Zookeeper技术内幕 1.1. 系统模型 1.1.1.  数据模型         树 zookeeper名字空间由节点znode构成,其组织方式类似文件系统,其中各个节点相当于目录和文件,通过路径作为唯一标识。 事务ID         在传统数据库中事务具有所谓的ACID特性:即原子性、一致性、隔离性、和持久性。         在Zookeeper中,事务是指

PHL的专栏 725

Zookeeper系统模型和工作原理

分布式协调框架ZooKeeper分布式协调技术什么是分布式协调技术?如何实现分布式锁?了解ZooKeeperZooKeeper简介ZooKeeper来源选择ZooKeeper原因ZooKeeper基本概念ZooKeeper系统模型数据模型节点特性节点结构 分布式协调技术 什么是分布式协调技术? 什么是分布式协调技术? 分布式协调技术主要用来解决分布式环境中多个进程之间的同步控制,让它们有序地访问某种临界资源,防止造成“脏数据”。为了防止分布式系统中的多个进程之间相互干扰,就需要一种分布式协调技术来对这些进程

weixin_48368732的博客 446

ZooKeeper系统模型

作流程为:客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。刚刚已经了解到,Zookeeper的znode tree是由⼀系列数据节点组成的,那接下来,我们就对数据节点做详细讲解。而在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,我们也称之为事务操作或更新操作,在不同的权限模式下,授权对象是不同的,表中列出了各个权限模式和授权对象之间的对应关系。首先,先了解,事务是对物理和抽象的应用状态上的操作集合。...

凉茶铺的博客 753

【ZooKeeper】ZooKeeper 系统模型

1 数据模型 ZooKeeper 的视图结构和标准的 Unix 文件系统非常类似,但没有引入传统文件系统中目 录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为 ZNode o ZNode 是 ZooKeeper 中数据的最小单元,每个 ZNode 上都可以保存数据,同时还可以挂载子节 点,因此构成了一个层次化的命名空间,我们称之为树。 树 首先我们来看下图所示的 ZooKeeper 数据节点示意图,从而对 ZooKeeper 上的数据节 点有一个大体上的认识。在 ZooKeeper 中,

菜鸡也有大佬梦 418
上一篇: Java 下数据业务逻辑开发技术 JOOQ 和 SPL
下一篇: 干货!阿里「大型分布式技术手册」,站在巨人肩膀上学习架构
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值