Dubbo与Zookeeper微服务核心机制

微服务架构(Dubbo+Zookeeper) 而且,对于服务提供方和服务消费者来说,还有可能兼具这两种角色,即需要提供服务,又需要消费服务,通过统一管理起来,可以有效地优化内部应用对服务发布/使用的流程的管理,服务注册中心可以通过特定协议来完成服务对外的统一。RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。对于服务消费方,最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、Dubbo知识体系

1. 服务注册与发现

Dubbo的服务注册与发现机制是构建微服务架构的核心,它通过服务提供者和服务消费者之间的动态通信实现服务的解耦。

多注册中心支持:在实现多注册中心支持时,Dubbo利用了服务发现的联邦机制,允许服务提供者向多个注册中心注册,同时服务消费者可以从多个注册中心订阅服务。这种机制通过服务名称的映射和注册中心的透明化处理,实现了服务注册和发现的透明性。

元数据中心:Dubbo的元数据中心通过配置文件或API接口,将服务的详细信息(如接口、版本、分组、超时时间等)存储在元数据中心中。服务消费者可以根据这些元数据信息进行服务选择和路由。

服务订阅机制:服务消费者通过注册中心的订阅机制,订阅感兴趣的服务接口。当服务提供者注册或更新服务信息时,注册中心会通过发布/订阅模式,将变更信息推送给所有订阅该服务的消费者。

2. 服务治理

Dubbo的服务治理功能提供了丰富的策略和工具,以实现对服务的动态管理和优化。

权重动态调整:Dubbo通过动态配置文件或API接口,允许管理员或自动化的策略动态调整服务提供者的权重。这种机制可以根据服务提供者的健康状况、负载情况等因素,实现负载均衡和资源优化。

标签路由:Dubbo的标签路由功能允许服务消费者根据服务提供者的标签信息进行路由选择。例如,可以根据服务的版本、环境、地域等信息,将请求路由到特定的服务实例。

服务Mock:Dubbo的服务Mock功能通过在服务消费者端实现,当服务提供者不可用时,可以返回预设的Mock数据,保证系统的稳定性和用户体验。

3. 负载均衡

Dubbo提供了多种负载均衡策略,以优化服务调用的性能和资源利用。

一致性Hash:Dubbo的一致性Hash算法通过将服务提供者映射到一个虚拟的环上,将请求均匀地分配到各个服务提供者,从而减少请求重试和流量波动。

最少活跃调用:Dubbo的“最少活跃调用”策略通过跟踪每个服务提供者的调用次数,优先选择调用次数最少的服务提供者,以减轻服务提供者的压力。

自适应策略:Dubbo的自适应策略会根据网络质量、服务提供者的健康状况等因素,动态调整负载均衡策略,以优化服务调用的性能。

4. 集群容错

Dubbo的集群容错机制确保了在服务提供者出现故障时,服务消费者仍然能够访问到正常的服务实例。

Failover重试:Dubbo的Failover重试策略在服务调用失败时,会自动重试其他服务提供者,直到成功或达到重试次数上限。

Forking并行调用:Dubbo的Forking并行调用策略会并行调用多个服务提供者,并选择最快的结果返回,提高了服务调用的效率。

Broadcast广播:Dubbo的Broadcast广播策略将请求广播到所有服务提供者,适用于发布/订阅模式,如消息队列的广播通知。

5. 服务降级

Dubbo的服务降级机制可以在服务不可用或性能下降时,保证系统的基本功能。

熔断规则:Dubbo的熔断规则通过监控服务调用失败率,当失败率超过预设阈值时,自动熔断,防止系统雪崩。

降级Mock数据:在服务降级时,Dubbo可以通过返回预设的Mock数据,保证系统的基本功能,同时为用户提供友好的错误提示。

熔断监控:Dubbo的熔断监控功能可以实时监控熔断状态,帮助开发者快速定位和排查问题。

6. 服务限流

Dubbo的服务限流功能可以防止系统过载,保证系统的稳定运行。

令牌桶算法:Dubbo的令牌桶算法通过控制令牌的生成和消耗,限制单位时间内请求的数量,从而避免系统过载。

滑动窗口:Dubbo的滑动窗口算法通过统计一定时间内的请求量,实现动态限流,以应对突发流量。

热点参数限流:Dubbo的热点参数限流功能可以针对热点参数进行限流,防止恶意攻击和系统过载。

二、Zookeeper知识体系

1. 数据模型

Zookeeper的数据模型采用树形结构,每个节点称为ZNode,具有唯一的路径标识。

持久节点:持久节点在Zookeeper关闭后仍然存在,并且其数据不会在Zookeeper重启时丢失。

临时节点:临时节点在创建后,只有短暂的存活时间,当客户端与Zookeeper断开连接时,临时节点会被自动删除。

序列节点:序列节点在创建时,会自动生成一个唯一的序列号,常用于生成分布式唯一ID,如分布式锁的锁名。

2. 分布式协调

Zookeeper在分布式系统中扮演着重要的协调角色,通过以下机制实现分布式协调:

Watch机制:Zookeeper的Watch机制允许客户端订阅ZNode的变化,当ZNode的值或子节点发生变化时,Zookeeper会通知所有订阅该变化的客户端。

Leader选举:Zookeeper采用Zab协议进行Leader选举,确保集群中只有一个Leader节点,负责处理客户端的写请求,从而保证集群的稳定性和一致性。

两阶段提交:Zookeeper采用两阶段提交协议,保证分布式事务的一致性。在两阶段提交过程中,Leader节点会协调所有参与节点,确保所有节点在第一阶段和第二阶段都达成一致。

3. 配置管理

Zookeeper提供配置管理功能,方便分布式系统进行配置管理:

配置版本控制:Zookeeper支持配置版本控制,允许用户查看配置的历史版本,方便追踪配置变更历史。

批量更新:Zookeeper支持批量更新配置,通过原子操作保证配置变更的一致性。

权限控制:Zookeeper支持权限控制,通过ACL(Access Control List)机制,确保配置的安全性。

4. 分布式锁

Zookeeper提供分布式锁功能,解决分布式系统中的锁竞争问题:

排他锁:Zookeeper的排他锁确保同一时间只有一个客户端能够访问ZNode,实现互斥访问。

共享锁:Zookeeper的共享锁允许多个客户端同时访问ZNode,实现并发访问。

锁续约:Zookeeper支持锁续约功能,通过定时发送心跳请求,防止客户端在访问ZNode时被其他客户端抢占。

5. 集群管理

Zookeeper在集群管理中扮演着重要角色:

仲裁模式:Zookeeper可以作为仲裁者,解决集群中的冲突问题,如选举Leader节点。

观察者节点:Zookeeper支持观察者节点,实时监控集群状态,如节点存活状态、集群配置等。

集群扩容:Zookeeper支持集群扩容,通过添加新的节点到集群中,实现系统扩展。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

Dubbo+Zookeeper知识点总结 分布式与微服务 **Dubbo是RPC通信框架,而不是微服务架构解决方案 ** 分布式锁 ​ 分布式协调技术,主要用来解决分布式环境中,多个线程的同步控制,让他们有序的访问临界资源,防止造成脏数据的后果。 zookeeper就是一种分布式协调技术,本质上是利用**分布式锁**。 分布式锁对象是进程 可以利用redis或者zookeeper来实现分布式锁,但redis本质并不是拿来实现分布式锁的,仅仅是利用了他的单线程处理。 redis分布式锁 获得锁:某一个进程获得资源后,就会去redis 阅读详情

相关推荐

SpringBoot集成Zookeeper与Dubbo:微服务注册中心与RPC调用实践

微服务架构将单体应用拆分为多个独立进程后,服务之间如何高效发现地址并完成远程调用成为首要挑战。早期通过静态配置或负载均衡的方式难以应对实例的动态扩缩。服务注册中心通过临时节点与监听机制维护动态地址列表,实现服务自动注册与发现;RPC框架则基于长连接与自定义协议,提供比HTTP更低延迟的方法级调用。Zookeeper与Dubbo的组合正是这两者的经典实践:Zookeeper管理服务元数据,Dubbo负责透明化远程调用与负载均衡。本文结合SpringBoot详细讲解版本选型、Provider/Consumer配

weixin_30984001的博客 286

Dubbo框架+zookeeper详解

Dubbo :是一个RPC框架,SOA框架: Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。 作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式 作为SOA:具有服务治理功能,提供服务的注册和发现,用zookeeper实现注册中心,启动时候服务端会把所有接口注册到注册中心,并且订阅configurat

qq_22162093的博客 1万+

Dubbo服务开发框架

实现诸如服务发现、负载均衡、流量调度等服务治理诉求

couture111的博客 366

服务框架Dubbo和ZooKeeper

本篇为动物园之旅~ dubbo看作动物园的动物,那么zookeeper就是动物园 如果有人想去动物园看小老虎,那么动物园中有小老虎才能看到,否则看不到~

m0_66689823的博客 7187

Dubbo+Spring Boot+ZooKeeper分布式系统整合实战

Apache Dubbo 是一款高性能、轻量级的开源分布式服务框架,广泛应用于微服务架构中。其核心功能包括服务注册与发现、远程通信、负载均衡、容错处理及服务治理等模块,帮助开发者高效构建可扩展的分布式系统。Dubbo 采用服务提供者(Provider)与消费者(Consumer)的架构模型,借助注册中心(如 ZooKeeper、Nacos)实现服务的自动注册与发现。同时,Dubbo 支持多种协议(如 Dubbo、HTTP、gRPC)与序列化方式,具备良好的灵活性与扩展性。

weixin_34718952的博客 1032

3步搞定专利数据爬取:用Selenium绕过国家知识产权局反爬(附完整代码)

本文详细介绍了3种高效获取专利数据的技术方案,重点解析了使用Selenium绕过国家知识产权局反爬的实战方法,并提供了完整代码示例。文章还探讨了Requests+lxml轻量级方案和混合技术策略,帮助开发者根据需求选择最佳数据爬取方案,特别适合需要专利统计数据的开发者参考。

weixin_29029995的博客 1112

服务框架dubbo和zookeeper

一、Dubbo框 1、分布式系统中的相关概念 (1)大型互联网项目架构目标 a、互联网项目:日常被使用的互联网项目,对所有网名都是公开的,用户群体为广大的网民 特点:用户多;流量大、并发高;海量数据;易受攻击;功能繁琐;变更快 目标:: 高性能:提供快速的访问体验 高可用:网站服务一直可以正常访问 可伸缩:通过硬件增加/减少,提高/降低处理能力 高可扩展:系统间耦合低,方便的通过新增/移除方式,增加/减少新的功能/模块 安全性:提供网站安全访问和数据加密,安全存储等策略 敏捷性:随需应

xuruhua的博客 7237

VL53L1X移植到STM32实战记录,使用软件IIC(附源代码)

序言 VL53L1X是一个很小又很优秀的测距传感器,它相比于上一代VL53L0X有着不小的提升,这次毕业设计打算将这个传感器用起来,就来移植了一下,遇到的坑怎么说还是有一些,故在此分享给大家。 开发环境 IDE:Keil V5 STM32CubeMX ,使用HAL库 具体操作 获取官方库并进行移植 这一步是移植的基础,首先从官方把API库下下来,并添加到IDE中: 适配硬件 这里由于不同的硬件平...

wmdscjhdpy的博客 1万+

ZooKeeper + Dubbo 分布式框架详解与实战指南

优势总结服务治理能力:完整的监控、限流、熔断体系高性能通信:基于Netty的NIO模型生态完善:与Spring Cloud Alibaba深度整合未来演进服务网格化:Dubbo Mesh与Istio集成云原生支持:Kubernetes服务发现适配智能化治理:AI驱动的自动扩缩容通过本文的实践指导,开发者可快速构建基于ZooKeeper+Dubbo的分布式系统,兼顾服务治理能力与高性能通信需求。建议结合具体业务场景灵活运用高级特性,同时关注Dubbo社区的最新动态。

weixin_73344672的博客 4226

新手入门机器学习案例(附源代码)

无

guguo666的博客 6657

STM32H750实战:如何用CubeMX配置NAND Flash时序(附常见问题排查)

本文详细解析了STM32H750通过CubeMX配置NAND Flash时序的实战技巧,包括硬件连接、时序参数计算与优化策略,以及常见问题如RGB屏幕干扰、多片选冲突的解决方案。特别针对NAND Flash的时序配置和抗干扰设计提供了实用代码示例和优化建议,帮助开发者提升系统稳定性和性能。

weixin_29176179的博客 365

视频教程-19年录制Zookeeper、Dubbo视频教程 微服务教程分布式教程 SpringBoot教程整合-Java

19年录制Zookeeper、Dubbo视频教程 微服务教程分布式教程 SpringBoot教程整合 ...

weixin_32613805的博客 427

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 160

Dubbo与Zookeeper核心机制解析

不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。接下来,我将为大家呈现正文内容。Mock的实现需要定义一组预定义的响应数据,当服务调用失败时,自动返回这些数据。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 917

Veritas NetBackup8.1.1安装

1.在服务器上运行Browser.exe 2.选中安装,点击"NetBackup Server Software Installation" 3.提示一个”UAC模式”,我们确定忽略它 4.下一步 5.接受授权,下一步 6.自定义安装 7.输入Key,并点击”netBackup Master Server” 8.自定义路径,下一步 9.默认端口,下一步 10.创建内置账户 创建本地用户帐户: C:\>net user nbwebsvc <StrongPassword> /

万物皆可学 2万+

C#操作MySQL从入门到精通(3)——新建数据库、新建表

我们要首先新建一个数据库,并且在数据库中新建一系列的表来管理数据库。

qq_34059233的博客 952

微服务为什么一定要Zookeeper?

作者:Marvin Mai来源:https://dwz.cn/6ByfGykc了解微服务的小伙伴都应该知道Zookeeper,Zookeeper是一个分布式的,开源的分布式应用程序协调服...

emprere的博客 271

034、MLCA 多尺度局部上下文注意力的 YOLOv11 适配:轻量级金字塔式空间上下文聚合

本文介绍了一种将多尺度局部上下文注意力(MLCA)模块集成到YOLOv11模型中的方法,以解决小目标检测中空间信息丢失的问题。MLCA采用金字塔式局部上下文聚合策略,通过不重叠的网格划分实现轻量级空间注意力计算,相比全局注意力机制能更好地保留小目标特征。 作者详细记录了实现过程,包括模块定义、参数调优和训练技巧,特别指出避免使用BN而改用GroupNorm以提升训练稳定性。在VisDrone数据集上的实验表明,MLCA-YOLOv11在参数量和计算量基本不变的情况下,mAP提升2.5%,其中行人检测提升3.

sundong_81的博客 284

Dubbo

Apache Dubbo概述1、Dubbo简介1.0 什么是RPC1.1 Dubbo核心能力1.2一站式微服务解决方案2、服务发现3、部署架构3.1注册中心3.2配置中心3.3元数据中心4、Zookeeper 注册中心4.1安装Zookeeper4.2 启动、停止Zookeeper5、 Dubbo快速入门5.1 服务提供方开发5.2 服务消费方开发7、负载均衡 1、Dubbo简介 Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信与微服务治理 两大关键能力。这意味着,使用 Dubbo 开发

Link的博客 2841

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Springboot整合Dubbo+Zookeeper

一:什么是Dubbo Dubbo是一款高性能、轻量级的开源Java RPC框架, 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 即实现了多个独立应用之间的解耦且可以远程调用对方的服务 二、为什么需要 dubbo 很多时候,因为项目需要用到分布式架构,所以就引用了dubbo这项技术,但是至于为什么我们需要用到这个技术 可能自身并不是很了解,但是,其实了解...

未的博客 477

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《Java 后端面试经》微服务篇

一致性(Consistency)所有的的节点在同一时间都能看到相同的数据,数据的更新是一致的,所有数据的变化都是同步的。可用性(Availability):即使集群中的部分节点出现故障,服务依然一直可用,能够保证在正常的响应时间内对客户端的读写请求进行响应。分区容错性(Partition tolerance):当分布式系统出现网络分区的时候,仍然能够对外提供服务。CAP 理论中分区容错性(Partition tolerance) 是一定要满足的。..............................

华仔仔的博客 3230

蓝牙模块HM-10手册

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

dubbo面试题收集

转自java面试题网http://www.wityx.com/javaee/ 1、Dubbo与DubboX区别 2、Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? 3、Dubbo中有哪些角色? 4、Dubbo在安全机制方面是如何解决的 5、Dubbo执行流程? 6、Dubbo支持的协议有哪些? 7、Dubbo支持的注册中心有哪些? 8、dubbo...

技术研究中心 309

dubbo应用学习

dubbo应用学习 一 dubbo介绍 1 什么是rpc 远程过程调用协议RPC(Remote Procedure Call Protocol) RPC可以指远程过程调用, 也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。 为什么要用RPC呢? 就是无法在一个进程内,甚至一...

我吃包菜 649

Dubbo:微服务实战

Dubbo:微服务实战

weixin_46619605的博客 1031

dubbo学习笔记

dubbo学习笔记(小白,有错请指出谢谢) dubbo(阿里巴巴出品,之前开源,阿里巴巴不提供维护,但后来由于使用广泛,阿里又重新开始维护)是一个用来跨网络访问另外一台服务器的技术(RPC),在我看来,其实是对httpClient的一种封装,是调用者可以更加快捷方便,常用于微服务,dubbo中有服务的提供者、服务的消费者,其中消费者是通过调用接口,来获得服务,更大程度的解藕,服务的提供者类似于ss...

weixin_42973941的博客 170

zookeeper 什么是微服务注册中心?

摘要:注册中心是服务治理的核心组件,基于生产者-消费者模型运作。服务提供者启动时向注册中心注册信息,消费者通过订阅获取服务地址。以Dubbo+Zookeeper为例,提供者将URL写入ZK目录,消费者订阅获取地址并注册自身信息。注册中心通过心跳机制监测服务可用性,超时未响应则删除节点并通知消费者。这种机制实现了服务的动态发现和故障处理,避免了手动修改配置的中断问题。Dubbo+ZK组合是常见的注册中心实现方案,通过目录订阅和心跳机制有效管理服务生命周期。

小楼一夜听春雨,深巷明朝卖杏花 3855
上一篇: Dubbo与Zookeeper核心解析
下一篇: 消息队列技术对比分析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值