负载均衡的原理

Scale-up / Scale-out 与多Die互连与封装层面的关系 摘要:本文系统分析了Scale-up与Scale-out的本质差异及技术演进。Scale-up通过增强单节点性能(如NVLink/InfinityFabric),而Scale-out通过连接多个节点(如InfiniBand/Ethernet)实现扩展。现代芯片采用多Die互连技术(UCIe/NVLink-C2C),在封装层面实现微观Scale-out。NVIDIA、AMD、Broadcom分别采取不同技术路线:NVIDIA模糊Scale-up/out界限,AMD侧重开放Chiplet架构,Broadcom专 阅读详情

这是1998年一个普通的上午。

一上班,老板就把张大胖叫进了办公室,一边舒服地喝茶一边发难:“大胖啊,我们公司开发的这个网站,现在怎么越来越慢了? ”

还好张大胖也注意到了这个问题,他早有准备,一脸无奈地说: “唉,我昨天检查了一下系统,现在的访问量已经越来越大了,无论是CPU,还是硬盘、内存都不堪重负了,高峰期的响应速度越来越慢。”

顿了一下,他试探地问道:“老板,能不能买个好机器? 把现在的‘老破小’服务器给替换掉。我听说IBM的服务器挺好的,性能强劲,要不来一台?”

(码农翻身注:这叫垂直扩展 Scale Up)

“好你个头,你知道那机器得多贵吗?! 我们小公司,用不起啊!” 抠门的老板立刻否决。

“这......” 大胖表示黔驴技穷了。

“你去和CTO Bill 商量下, 明天给我弄个方案出来。”

老板不管过程,只要结果。

1隐藏真实服务器

大胖悻悻地去找Bill。

他将老板的指示声情并茂地做了传达。

Bill笑了:“我最近也在思考这件事,想和你商量一下,看看能不能买几台便宜的服务器,把系统多部署几份,横向扩展(Scale Out)一下。 ”

横向扩展? 张大胖心中寻思着,如果把系统部署到几个服务器上,用户的访问请求就可以分散到各个服务器,那单台服务器的压力就小得多了。

“可是,” 张大胖问道 ,“机器多了,每个机器一个IP, 用户可能就迷糊了,到底访问哪一个?”

640?wx_fmt=png

“肯定不能把这些服务器暴露出去,从客户角度看来,最好是只有一个服务器。” Bill 说道。

张大胖眼前一亮, 突然有了主意:“有了!我们有个中间层啊,对,就是DNS,我们可以设置一下,让我们网站的域名映射到多个服务器的IP,用户面对的是我们系统的域名,然后我们可以采用一种轮询的方式, 用户1的机器做域名解析的时候,DNS返回IP1, 用户2的机器做域名解析的时候,DNS返回IP2...... 这样不就可以实现各个机器的负载相对均衡了吗?”

640?wx_fmt=png

Bill 思考片刻,发现了漏洞:“这样做有个很要命的问题,由于DNS这个分层的系统中有缓存,用户端的机器也有缓存,如果某个机器出故障,域名解析仍然会返回那个出问题机器的IP,那所有访问该机器的用户都会出问题, 即使我们把这个机器的IP从DNS中删除也不行, 这就麻烦了。”

张大胖确实是没想到这个缓存带来的问题, 他挠挠头:“那就不好办了。”

2偷天换日

“要不我们自己开发一个软件实现负载均衡怎么样?” Bill另辟蹊径。

为了展示自己的想法, 他在白板上画了一张图, “看到中间那个蓝色服务器没有,我们可以把它称为Load Balancer (简称LB), 用户的请求都发给他,然后它再发给各个服务器。”

640?wx_fmt=png

张大胖仔细审视这个图。

Load Balancer 简称LB , 有两个IP,一个对外(115.39.19.22),一个对内(192.168.0.100)。用户看到的是那个对外的IP。 后面的真正提供服务的服务器有三个,称为RS1, RS2,RS3, 他们的网关都指向LB。

“但是怎么转发请求呢?嗯, 用户的请求到底是什么东西?”  张大胖迷糊了。

“你把计算机网络都忘了吧? 就是用户发过来的数据包嘛! 你看这个层层封装的数据包,用户发了一个HTTP的请求,想要访问我们网站的首页,这个HTTP请求被放到一个TCP报文中,再被放到一个IP数据报中, 最终的目的地就是我们的Load Balancer(115.39.19.22)。”

640?wx_fmt=png

(注: 客户发给LB的数据包, 没有画出数据链路层的帧)

“但是这个数据包一看就是发给Load Balancer的, 怎么发给后面的服务器?”

Bill 说: “可以偷天换日,比如Load Balancer想把这个数据包发给RS1(192.168.0.10), 就可以做点手脚,把这个数据包改成这样, 然后这个IP数据包就可以转发给RS1去处理了。”

640?wx_fmt=png

(LB动了手脚,把目的地IP和端口改为RS1的)

“RS1处理完了,要返回首页的HTML,还要把HTTP报文层层封装:” 张大胖明白怎么回事了:

640?wx_fmt=png

(RS1处理完了,要发送结果给客户端)

“由于LB是网关,它还会收到这个数据包,它就可以再次施展手段,把源地址和源端口都替换为自己的,然后发给客户就可以了。”

640?wx_fmt=png

(LB再次动手脚,把源地址和端口改成自己的, 让客户端毫无察觉)

张大胖总结了一下数据的流向:

客户端 --> Load Balancer --> RS --> Load Balancer --> 客户端

他兴奋地说:“这招瞒天过海真是妙啊,客户端根本就感受不到后面有好几台服务器在工作,它一直以为只有Load Balancer在干活。”

Bill此刻在思考Load Balancer 怎么样才能选取后面的各个真实的服务器, 可以有很多种策略,他在白板上写到:

轮询: 这个最简单,就是一个挨一个轮换。

加权轮询: 为了应对某些服务器性能好,可以让他们的权重高一点,被选中的几率大一点。

最少连接: 哪个服务器处理的连接少,就发给谁。

加权最少连接:在最少连接的基础上,也加上权重

......

还有些其他的算法和策略,以后慢慢想。

3四层还是七层?

张大胖却想到了另外一个问题: 对于用户的一个请求来说,可能会被分成多个数据包来发送, 如果这些数据包被我们的Load Balancer发到了不同的机器上,那就完全乱套了啊!  他把自己的想法告诉了Bill。

Bill说:“这个问题很好啊,我们的Load Balancer必须得维护一个表,这个表需要记录下客户端的数据包被我们转发到了哪个真实的服务器上, 这样当下一个数据包到来时,我们就可以把它转发到同一个服务器上去。”

“看来这个负载均衡软件需要是面向连接的,也就是OSI网络体系的第4层, 可以称为四层负载均衡”Bill做了一个总结。

“既然有四层负载均衡,那是不是也可以搞个七层的负载均衡啊?” 张大胖突发奇想。

“那是肯定的,如果我们的Load Balancer把HTTP层的报文数据取出来,根据其中的URL,浏览器,语言等信息,把请求分发到后面真实的服务器去,那就是七层的负载均衡了。不过我们现阶段先实现一个四层的吧,七层的以后再说。”

Bill 吩咐张大胖组织人力把这个负载均衡软件给开发出来。

张大胖不敢怠慢,由于涉及到协议的细节问题,张大胖还买了几本书:《TCP/IP详解》 卷一,卷二,卷三, 带着人快速复习了C语言, 然后开始疯狂开发。

4责任分离

三个月后,Load Balancer的第一版开发出来了,这是运行在Linux上的一个软件, 公司试用了一下,感觉还真是不错,仅仅用几台便宜的服务器就可以实现负载均衡了。

老板看到没花多少钱就解决了问题,非常满意,给张大胖所在的开发组发了1000块钱奖金,组织大家出去搓了一顿。

张大胖他们看到老板很抠门,虽略有不满,但是想到通过这个软件的开发,学到了很多底层的知识,尤其是TCP协议,也就忍了。

可是好景不长,张大胖发现这个Load Balancer存在这瓶颈:所有的流量都要通过它,它要修改客户发来的数据包, 还要修改发给客户的数据包。

网络访问还有个极大的特点,那就是请求报文较短而响应报文往往包含大量的数据。这是很容易理解的,一个HTTP GET请求短得可怜,可是返回的HTML却是极长 -- 这就进一步加剧了Load Balancer修改数据包的工作。

张大胖赶紧去找Bill ,Bill说:“这确实是个问题,我们把请求和响应分开处理吧,让Load Balancer只处理请求,让各个服务器把响应直接发给客户端,这样瓶颈不就消除了吗?”

“怎么分开处理?”

“首先让所有的服务器都有同一个IP, 我们把他称为VIP吧(如图中115.39.19.22)。”

640?wx_fmt=png

张大胖通过第一版Load Balancer的开发,积累了丰富的经验。

他问道:“你这是把每个实际服务器的loopback都绑定了那个VIP, 不过有问题啊,这么多服务器都有同样的IP , 当IP数据包来的时候,到底应该由哪个服务器来处理?”

“注意,IP数据包其实是通过数据链路层发过来的,你看看这个图。”

640?wx_fmt=png

张大胖看到了客户端的HTTP报文再次被封装储层TCP报文,端口号是80, 然后IP数据报中的目的地是115.39.19.22(VIP)。

图中的问号是目的地的MAC地址, 该怎么得到呢?

对, 是使用ARP协议,把一个IP地址(115.39.19.22)给广播出去,然后具有此IP机器就会回复自己的MAC地址。 但是现在有好几台机器都有同一个IP(115.39.19.22), 怎么办?

Bill 说道:“我们只让Load Balancer 响应这个VIP地址(115.39.19.22)的ARP请求,对于RS1,RS2,RS3, 抑制住对这个VIP地址的ARP响应,不就可以唯一地确定Load Balancer了? ”

原来如此!张大胖恍然大悟。

既然Load Balancer得到了这个IP数据包, 它就可以用某个策略从RS1, RS2,RS3中选取一个服务器,例如RS1(192.168.0.10),把IP数据报原封不动, 封装成数据链路层的包(目的地是RS1的MAC地址),直接转发就可以了。


640?wx_fmt=png

RS1(192.168.0.10)这个服务器收到了数据包,拆开一看,目的地IP是115.39.19.22,是自己的IP, 那就可以处理了。

处理完了以后,RS1可以直接响应发回给客户端,完全不用再通过Load Balancer。因为自己的地址就是115.39.19.22。

对于客户端来说,它看到的还是那个唯一的地址115.39.19.22, 并不知道后台发生了什么事情。

Bill补充到:“由于Load Balancer 根本不会修改IP数据报,其中的TCP的端口号自然也不会修改,这就要求RS1, RS2,RS3上的端口号必须得和Load Balancer一致才行。”

像之前一样,张大胖总结了一下数据的流向:

客户端 --> Load Balancer --> RS --> 客户端

Bill 说道:“怎么样? 这个办法还可以吧?”

张大胖又想了想,这种方式似乎没有漏洞,并且效率很高,Load Balancer只负责把用户请求发给特定的服务器就万事大吉了, 剩下的事由具体的服务器来处理,和它没有关系了。

他高兴地说:“不错,我着手带人去实现了。”

后记: 本文所描述的,其实就是著名开源软件LVS的原理,上面讲的两种负载均衡的方式,就是LVS的NAT和DR。

LVS是章文嵩博士在1998年5月成立的自由软件项目,现在已经是Linux内核的一部分。想想那时候我还在不亦乐乎地折腾个人网页,学会安装和使用Linux 没多久 , 服务器端开发也仅限于ASP,像LVS这种负载均衡的概念压根就没有听说过。 

编程语言可以学,差距也能弥补,但是这种境界和眼光的差距,简直就是巨大的鸿沟,难以跨越啊!

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华》


码农翻身

用故事讲述技术

640

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码) 本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。 阅读详情

相关推荐

【02】【VisionMaster V4.0.0 】安装教程—— 授权文件更新报错:应用程序与本地LM通讯出错(怀疑电脑加密 和 上网受限 造成的 )

本文详细介绍了海康VisionMaster 4.0试用版的安装流程及常见问题解决方案。主要内容包括:1)从官网下载基础安装包、试用补丁和授权文件;2)按顺序安装主程序、补丁和授权文件;3)针对授权失败问题提供两种解决方案(更换未加密电脑或使用加密狗);4)说明试用版的功能限制(30天试用期、2个流程限制等)。文章特别指出电脑加密可能导致授权失败,并提供了安装报错时的处理建议,为初次使用者提供了完整的安装指导。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 7153

什么是Scale Up(纵向扩展)和Scale Out(横向扩展)?

1 Scale Out 即Scale horizontally,横向扩展,向外扩展 。 称为集群系统。指由多个节点组成的SAP HANA系统,这种系统的扩展主要以水平扩展方式(指增加节点的方式)来进行。 比如:我们向原有的web、邮件系统添加一个新机器。 2 Scale Up 即Scale vertically)纵向扩展,向上扩展。 称为单节点系统,指系统中只包括一个有效节点(如果需要HA时,可以将两个单节点以System Replication形式构成单节点的HA架构)。这种架构的系统只具有垂直扩展能力,

JavaEdge全是干货的技术号 1万+

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 369

Scale up和Scale out

谈到系统的可伸缩性,Scale-up(纵向扩展)和Scale-out(横向扩展)是两个常见的术语,对于初学者来说,很容易搞迷糊这两个概念,这里总结了一些把概念解释的比较清楚的内容。   首先来段Wikipedia的,讲的很透彻了。       Scale vertically (scale up)   To scale vertically (or scale up) means t

Steven Lee 1253

1.用Python写了一个进销存管理的软件~需求分析&界面设计&数据库设计&技术路线选择~

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

pepper_lihui的专栏 4321

避开这5个坑!用MATLAB做核密度估计时90%人会犯的错误

本文详细解析了使用MATLAB进行核密度估计时常见的5个高频错误,包括三维数据可视化、带宽参数优化、大数据量处理、核函数选择及版本兼容性问题。特别针对核密度估计中的关键参数带宽(bandwidth)提供了数据驱动的优化策略,帮助用户提升分析精度与效率。

jenkins8butler的博客 277

scale out和scale up的区别

zy103118的博客 4974

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 380

智算网络中Scale-out和Scale-up网络的技术原理

智算网络中Scale-out网络和Scale-up网络的本质区别是什么?

4442

【LIN总线测试】——LIN主节点数据链路层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点数据链路层如何测试?

测试领域技术分享 2612

用 CDS View I_APARToleranceGroup 管理客户与供应商收付差异容差:配置语义、字段解读与 ABAP 落地实践

财务共享服务中心常面临小额差异处理的挑战,SAP通过"客户/供应商容差组"机制实现自动清账规则配置。CDS视图I_APARToleranceGroup将配置数据转化为可查询维度,包含宽限天数、固定现金折扣等关键业务参数。该视图支持按公司代码和容差组查询差异处理策略,可用于报表开发、主数据校验和接口合规检查,帮助财务团队高效管理海量小额交易差异,减少手工操作。

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

负载均衡原理

互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面呢?早期的方法是使用DNS做负载,通过给客户端解析不同的IP地址,让客户端的流量直接到达各个服务器。

m0_63436163的博客 1081

道威棱镜的设计参考

道威棱镜的设计参考

weixin_72050316的博客 379

负载均衡原理及算法

负载均衡技术在现代网络架构中扮演着重要的角色,通过合适的负载均衡算法和配置,可以实现系统资源的合理分配和高效利用。在实际应用中,需要根据业务需求和系统特点选择合适的负载均衡算法,并结合设备的配置命令进行部署和优化,以提升系统的性能和稳定性。

兔子的博客 992

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

负载均衡原理及算法详解

负载均衡原理及算法详解应用

qqrrjj2011的博客 1414

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Ribbon负载均衡原理,Feign是如何整合Ribbon的?

文章目录1. 什么是负载均衡?2. Ribbon的使用2. Ribbon的负载均衡原理①:收集带有@LoadBalanced注解的RestTemplate,并为其添加一个拦截器②:选择负载均衡器,执行负载均衡算法(默认轮询) 1. 什么是负载均衡?        负载均衡是从多个服务中根据某个策略选择一个进行访问,常见的负载均衡分为两种 客户端负载均衡:即在客户端就进行负载均衡算法分配。例如spring cloud中的ribbon,客户

qq_1149513559的博客 4789

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Ribbon负载均衡原理

文章目录Ribbon负载均衡1.负载均衡原理2.源码解析1)LoadBalancerIntercepor2)LoadBalancerClient3)负载均衡策略IRule4)总结 Ribbon负载均衡 1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 2.源码解析 为什么我们只输入了service名称就可以访问了呢?

Vae的黑粉 317

负载均衡的原理及其算法详解

负载均衡是一种在计算机网络中分配资源和请求的技术,旨在将网络负载均匀地分布到多个服务器上,以提高系统的性能、可靠性和可扩展性。

AOMGyz的博客 1306

Nginx负载均衡的原理

1、Nginx负载均衡的原理是什么? ​ 客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。 2、Nginx负载均衡的作用是什么? ​ 负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服...

zsw07的博客 4066

什么是负载均衡,负载均衡的原理解析是怎么样的

负载均衡对于很多大型企业来说,不管网游,商城,金融等业务,他的重要性无需多说,今天带来负载均衡的原理解析。开头先理解一下所谓的“均衡”。不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL

mojirener的博客 1751

Nacos-负载均衡的原理及算法

Nacos-负载均衡的原理,切换负载均衡算法

2301_78117253的博客 393

Ribbon-负载均衡原理

负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 源码跟踪 为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。 显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor,这个类会在对RestTemplate的请求进行拦

Leon_Jinhai_Sun的博客 1222

Ribbon&LoadBalancer负载均衡原理

本文介绍了负载均衡的基本概念和两种主要实现方式:客户端负载均衡(如Ribbon)和服务端负载均衡(如Nginx)。重点讲解了Spring Cloud生态中的负载均衡解决方案,包括旧版的Ribbon和新版的Spring Cloud LoadBalancer。文章详细阐述了LoadBalancer的工作原理,从配置类实现到请求拦截流程,并对比了轮询和随机两种负载均衡算法。最后总结了负载均衡在Spring Cloud中的整体实现机制,包括初始化、RestTemplate定制、请求拦截和实例选择等关键环节,

无论云泥意贯一 1319

吃透负载均衡原理和算法

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务或者网络请求)进行平衡,分摊到多个操作单元(服务器或者组件)上进行运行。目的是尽量将网络流量 平均 发送到多个服务器上,以保证整个业务系统的高可用。

my8688的专栏 846

Ribbon的负载均衡策略及原理

Ribbon的负载均衡策略及原理 2018年06月27日 15:21:15 吴帝永 阅读数:9709 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/wudiyong22/article/details/80829808 Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。像nginx可以使用...

f45056231p的博客 791
上一篇: 看书好还是看视频好?
下一篇: 你要选择哪条路?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值