EBay架构案例分析

Ebay API item_get - 获得EBAY商品详情 ebay API item_get - 获得EBAY商品详情 Result Object: { “item”: { “detail_url”: “https://www.ebay.com/itm/0-/113798681757”, “condition”: “Seller refurbished”, “watching”: “”, “why2buy”: [ “100% 买家满意”, “... 阅读详情

EBAY可伸缩性策略

  • 1、 Partition Everything 切分万物,能划分尽量划分 从领域数据到功能

  • 2、 Asynchrony Everywhere 处处异步 EDA和消息广播

  • 3、 Automate Everything 全部自动 保证专注自动配置 自动回复  机器学习

  • 4、 Remember Everything Fails 记录失败

  • 5、 Embrace Inconsistency与狼共舞,与不一致回旋。在CAP原则下权衡。亲不同是谓大同

  • 6、 Expect  (R)evolution 预言演变

  • 7、 Dependencies  Matter 重视依赖

  • 8、 Be  Authoritative 独断专行

  • 9、 Never Enough  Data

  • 10、Custom  Infrastructure 自定义基础设施


eBay 切分分层

  • scaling 数据层     数据存储分离 松耦合

  • scaling应用层

  •    应用显示 控制 领域之间实现分层


scaling 数据层

  • 按功能分段划分不同主机。再在段内再水平分割:
            读写分离 write master/read slave

       尽可能以主键Key读取
       将数据映射到本地

  • 让数据库负担尽可能小

  • 首先考虑无事务情况

  • 创建数据库结构可替代技术

ebay  


让数据库负担尽可能小

  • 不要将业务逻辑放入数据库。没有存储过程,只有简单的一些触发器。

  • 尽量不要让数据库进行复杂耗时查询及其计算。将这些工作移植到应用层,如排序,JOIN等。

最小化数据库事务

  • 使用Auto-commit事务

  • 无分布式事务,无客户端事务

  • 有事务就有锁,避免事务就是避免锁。

  • 避免耦合

  • 可以实现并行更新


伸缩扩展应用层

ebay


 

  • 根据不同业务领域分别部署。将不需要事务的业务从需要事务的业务中分离出来,使用异步EDA和同步SOA架构


 

正确对待不一致性

  • 不要担心害怕不一致性,也不要苛求语言工具能够提供高可靠性 和高一致性。

  • 使用事务是为了保证一致性,CAP原理适当降低一致性要求:切分缩小需要高一致性的需求。

一致性

2012年海外电子商务企业案例研究报告——eBay 1.eBay企业简介 1.1. eBay总体介绍 1.2. eBay核心人物介绍 1.3. eBay的发展历程 1.4. eBay的业务架构 1.5. eBay架构之一:集市(Marketplaces) 1.6. eBay架构之二:支付(Payments) 1.7. eBay架构之三:电商代运营(GSI) 1.8. eBay架构之四:开发网络(Developer Networks) 2.eBay发展情况介绍 2.1. eBay整体发展情况 2.2. eBay用户规模 2.3. eBay营收规模 2.4. eBay营收结构 2.5. eBay毛利及净利润 2.6. eBay各项费用占比 3.eBay商业模式及发展战略 3.1. eBay商业模式:交易佣金+广告 3.2. eBay发展策略一:由拍卖向固定价格转型 3.3. eBay发展策略二:由PC端向移动端转型 3.4. eBay发展策略三:由线上向线下渗透 3.5. eBay的主要竞争对手 4.eBay案例启示 4.1. eBay成功因素分析 4.2. eBay发展瓶颈和可能挑战 4.3. eBay中国简要历程 4.4. eBay中国评析 立即下载

相关推荐

ebay架构原则,架构演变历史及ebay的自动化

ebay架构原则,架构演变历史及ebay的自动化

一天十亿次的访问-eBay网站服务器架构

一天十亿次的访问-eBay架构(一) 本文来自于2003JavaOne(http://java.sun.com/javaone/)上的一篇文章。我把它翻译成中文,有些不重要的部分我已略去。虽然是2003年的文章,但其中的J2EE设计方案还是值得我们去学习的,而且这个架构本身就是面向未来的。 eBay作为全球最大的网络交易市场赢得了市场的尊重,作为技术人员我们对其后台架构如何能够支撑起这个庞然大物...

jinghuainfo 339

eBay架构

eBay架构

ebay的架构特点

去年的时候,就了解了 ebay 的架构了,只是很多事情没有亲身经历,很难深有体会。离去年的 Qcon 大会快一年了,今年的也快召开了,时光流逝,真是人事变迁,我回深圳也快一年了。今天有空也来班门弄斧一下。       ebay 是电子商务网站,一个电子事务网站一定要保证交易的完整性,这个和淘宝一样。 ebay 的架构特点: Partition Everything      当一

screensky的专栏 5189

用户界面设计 Ebay与淘宝对比

用户界面设计 Ebay与淘宝对比 还有一个自己设计的人机交互界面

eaby技术架构变迁

最近在infoq上面看到ebay介绍其系统架构变迁以及系统设计分享方面的讲座,其中陈述了ebay从1995年到2006年之间系统架构的变化过程。从这里,我们可以学习到许多宝贵的经验来设计一个大容量,高并发,分布式的系统。ebay的系统架构的变迁主要经历了4个阶段,下面一幅图展现了ebay系统架构变迁的时间表在ebay的V1版本,ebay采用的是FREEBSD+APACHE+PERL+DGBM,这是一个比较原始的模型,而且相对比较简单,操作系统,应用服务器,web服务器以及数据库服务器都是在同一台机器中,网络结构在物理上只有一层。整个网站有四个域名,每个域名对应不同的应用,每组应用对应一台服务器

浅析大型网站架构

本文以eBay为例来分析大型网站架构设计,个人觉得其网站架构设计方案还是值得我们去学习的,希望能对我们的项目设计和开发起到参考作用。   eBay 作为全球最大的网络交易市场赢得了市场的尊重,作为技术人员我们对其后台架构如何能够支撑起这个庞然大物都会感兴趣。每天十亿次访问量,超过1亿的注册会员,6.2亿个商品这些天文般的数字意味着它每天承受着巨大的并发访问量,而且eBay上大量页面都不是静态页面

quanquan_i的专栏 386

基于ESP32-WROOM的智能蓝牙电压电流监测与远程控制系统设计

本文介绍了基于ESP32-WROOM的智能蓝牙电压电流监测与远程控制系统设计。该系统集成了INA219传感器和OLED显示屏,通过蓝牙实现无线数据传输和远程控制,适用于智能家居能耗监控和工业设备管理,具有成本低、精度高、功耗优化等优点。

qsc901234的博客 203

myspace架构及大型网站架构经验

MySQL 在国外facebook,flickr等公司内的使用情况 基本上用MySQL 5.0, 操作系统则是Linux的天下,开发语言用php,python,java,c++,另外facebook还用erlang的 MySQL对DBA的需求较小,程序员就是dba facebook平均每个d

music_man的专栏 878

【卫星语音通信】神经网络语音编解码算法:AudioDec

最新研究表明,通过深度学习模型对语音信号进行智能压缩与重建,可在12 kbps码率下实现48 kHz采样率的高保真语音还原,其主观音质评分(MOS)可达3.9分(满分4.27分),远超传统参数编码技术。这意味着未来卫星电话的通话质量有望达到CD级水准,而蜂窝网络的语音业务带宽需求可降低60%以上,为蜂窝和卫星网络中的大规模物联网语音交互铺平道路。它的诞生为神经音频编解码技术带来了一次重要升级,有助于让未来实时语音交互更流畅、更清晰,也让我们进一步体验到人工智能与音频信号处理结合所带来的创新可能性。

u011376987的博客 1472

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6237

Go 开发者一定要会 Docker 与 k8s?

随着云原生时代的到来,各大厂纷纷上云,甚至有人说,未来的软件就是生在云上,长在云上的。在这种云原生时代大势下,衍生出来的Kubernetes 工程师、云原生工程师的薪资也水涨船高,大厂不...

slphahaha的博客 908

FISCO-BCOS配置及使用控制台

如果因为网络问题长时间无法下载,请尝试:curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh。为了可以更加方便快捷,所以HelloWorld合约已经被内置了,位于控制台下面的contracts/solidity/HelloWorld.sol。用于获取和设置name的值,合约代码如下。部署成功会返回合约地址。

qq_51562644的博客 831

大型网站的架构设计问题----大型高并发高负载网站的系统架构

随着中国大型IT企业信息化速度的加快,大部分应用的数据量和访问量都急剧增加,大型企业网站正面临性能和高数据访问量的压力,而且对存储、安全以及信息检索等等方面都提出了更高的要求……      本文中,我想通过几个国外大型IT企业及网站的成功案例,从Web技术人员角度探讨如何积极地应对国内大型网站即将面临的扩展(主要是技术方面,而较少涉及管理及营销等方面)矛盾。 一、 国外大型IT网站的成功之道 (一

xxx专栏 477

当爬虫遇到TikTok滑块:一份给开发者的verifyV2避坑指南与调试心得

本文详细解析了TikTok滑块验证码verifyV2的破解与优化策略,涵盖验证码触发机制、滑块图片获取、验证请求构造及高级调试技巧。通过实战案例和代码示例,帮助开发者有效应对复杂反爬机制,提升验证通过率。特别针对verifyV2系统的加密算法和轨迹模拟提供了专业解决方案。

weixin_30919429的博客 641

Android 13.0 展讯平台关机充电动画横屏显示修改

在13.0的系统rom定制化开发中,在关于展讯平台的产品中,系统默认的充电动画是竖屏显示的,但是在像平板的产品中竖屏动画肯定不符合规范, 所以需要在平板TV产品中,充电动画同时也是需要修改为横屏显示的,接下来就来分析下充电动画的相关绘制流程,然后实现功能

安卓兼职framework和app工程师的博客 409

分布式事物详解

分布式事物又一个很著名的理论就是CAP理论CAP理论C : consistency(一致性) A : availability(可用性) P :partition tolerance(分区容错性)一致性 强一致性 弱一致性 最终一致性 强一致性:更新之后所有从副本取到的都是最新值 弱一致性:更新之后其他副本不能立即取到最新值 最终一致性:有些副本刷新了,有些副本没有刷新,但是最后总是会刷新的,这其中

baixiaoshi的专栏 580

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

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

eBay的架构

<br />一开始就过于担心可增容性是错误的。因为分析和担心可能永远也不会发生的流量而陷入恐慌是不必要的。完全不考虑可增容性是不对的。事情永远不会做完,系统总是在进化和改变,需要建立一个有能力应付架构进化的组织。并且一开始就把这些期望和能力融入业务中去。 <br /> <br />       有谁不想知道eBay是如何开展业务的呢?成为世界上最大的高负荷量的网站之一,这个过程可不容易。创建这样一个庞然大物,需要真正的工程学:在网站的稳定性、运转速度、性能和成本之间达到一个平衡。<br />你可能无法模仿e

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1418

第六天 界面操作及美化(6.4 使用GUI 套件)

本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。

weixin_38637405的博客 407

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

一天十亿次的访问-eBay架构(一)

版权声明:如有转载请求,请注明出处:http://blog.youkuaiyun.com/yzhz本文来自于2003JavaOne(http://java.sun.com/javaone/)上的一篇文章。我把它翻译成中文,有些不重要的部分我已略去。虽然是2003年的文章,但其中的J2EE设计方案还是值得我们去学习的,而且这个架构本身就是面向未来的。eBay作为全球最大的网络交易市场赢得了市场的尊重,作

杨争的专栏 7252

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一天十亿次的访问-eBay架构(二)

版权声明:如有转载请求,请注明出处:http://blog.youkuaiyun.com/yzhz5、eBay架构的改造是基于下面这本书介绍的模式core J2EE Pattern 最佳实践和设计策略第二版,sun官方网站也提供core J2EE Pattern,见http://java.sun.com/blueprints/corej2eepatterns/Patterns/ 该书介绍了

杨争的专栏 4858

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ebay架构特点

ebay是电子商务网站,一个电子事务网站一定要保证交易的完整性,这个和淘宝一样。ebay的架构特点:Partition Everything   当一个网站刚开始时,可能一天只有几十个人访问,或者几百个,可能一台普通的服务器就足够了,db和应用统统都可以放在一起,可是随着用户的增加,业务的增加,一台服务器远远不够了,就自然想增加服务器,系统应该跟随改

blackchoc 3354

eBay技术发展

 本文转载自http://www.blogjava.net/BlueDavy/archive/2009/07/24/288055.html 几年以来,eBay在几个不同的大会上先后分享过几次关于eBay技术的PPT,在这篇blog中,就以这些PPT来以旁观者的角度分析下eBay的技术发展历程,不论eBay现在的业绩如何,不可否认,他们的技术还是挺强的,因此还是值得学习,eBay的整个技术发展历

nick许赟钦的专栏 1936

一天十亿次的访问-ebay架构(一)

版权声明:如有转载请求,请注明出处:http://blog.youkuaiyun.com/yzhz本文来自于2003JavaOne(http://java.sun.com/javaone/)上的一篇文章。我把它翻译成中文,有些不重要的部分我已略去。虽然是2003年的文章,但其中的J2EE设计方案还是值得我们去学习的,而且这个架构本身就是面向未来的。eBay作为全球最大的网络交易市场赢得了市场的尊重,作

Crazy for Java!--narilee的专栏 1305
上一篇: 异步化
下一篇: UltraEdit下诡异的乱码
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值