一、参考文档
v1 | v2 | |
---|---|---|
dependency | <dependency> | <dependency> |
client | AmazonS3 && TransferManager | S3Client |
源码 | https://github.com/aws/aws-sdk-java | https://github.com/aws/aws-sdk-java-v2 |
文档 | https://docs.aws.amazon.com/zh_cn/sdk-for-java/v1/developer-guide/examples-s3.html | https://docs.aws.amazon.com/zh_cn/sdk-for-java/v2/developer-guide/s3-examples.html |
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/HLuploadFileJava.html | ||
demo | https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java | https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2 |
二、download测试
注:测试在testcfs的机器11.35.235.206 上进行,相关项目的jar及启动脚本在/opt/app下
版本 | 方式 | 关键代码 | jconsole-thread | 场景1 | 结果1(耗时单位:毫秒) | 分析1 | 场景2 | 结果2(耗时单位:毫秒) | 分析2 | 场景3 | 结果3(耗时单位:毫秒) | 分析3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
v1 | v1_ TransferManager方式 | v1_transferManager 展开源码 |
| 244m文件、办公网 | 124789 | 244m文件、生产网络 | 1261 | 2.7g文件、生产网络 | bucket:ltptest 07-28上午10点:14909 07-28下午4点:10412 07-29上午10点:6185 07-31上午9点:24980(见右图) 07-31上午9点:14236(见右图) 07-31上午10点:5250(见右图) 07-31上午10点:4927(见右图)
bucket:flowplayback 07-31上午12点23:13407 07-31上午12点24:13407:7760 07-31上午12点26:13407:6544
|
| ||
v1 | v1_ RandomAccessFile_8thread同时接收 | v1_randomaccessfile 展开源码 | 244m文件、办公网 | 555255 | 慢的原因:skip也是读过去的 | 244m文件、生产网络 | ||||||
v2 | v2_普通下载 | v2_单线程 展开源码 |
| 250m文件、办公网 | 123649 | 244m文件、生产网络 | 1156 | 2.7g文件、生产网络 | 07-28上午10点:36840 07-28下午4点:28097 07-29上午10点:10080 |
三、readline测试
注:测试在testcfs的机器11.35.235.206 上进行,相关项目的jar及启动脚本在/opt/app下
版本 | 方式 | 场景1 | 结果1 (单位毫秒) | 备注1 |
---|---|---|---|---|
v1 | 1、将文件以多线程方式下载到本地 2、预读本地文件 3、读取文件的每一行 | 2.7g文件、生产网络 | 7-29十点: 文件下载耗时:10412
7-30十五点: 文件下载耗时10732 | 问题1:多个进程同时将文件下载到同一个位置,对文件内容是否有影响? 答1:transfer的下载逻辑是这样的,一个transfer 的download默认会启动10个线程对一个文件进行下载,每个线程下载不同的part,写到独立的文件中,文件名是独立唯一的,类似这种:bcd7e61c-913a-3563-a14-09665ec109e42456113203890028212.part.1。所有的part下载完之后再进行合并。----->所以如果是多进程进行下载,相互之间不会有影响,只是最后一个完成的进程会把前面进程合并的文件覆盖掉。 answer by@宋德宏
问题2:cfs有缓存机制么?为啥我下载文件的时候总是第一次慢,之后就会快很多。测试如下: 答2:因为服务端(cfs)的缓存(pagecache)导致。也就是第一次下载之后,会有部分内容进入pageCache,导致第二次的下载会变快。 注:pagecache的大小与linux的物理内存有关。 answer by@郭卫龙 |
v1 | 1、直接加载文件的每行的起始位置 2、用withRange读取每一行 | 2.7g文件、生产网络 | 7-30十五点半: 文件加载耗时:21922 | 问题1:如果文件大的话,用withrange,慢的原因? 答1:每次操作都是个网络消耗(每次都要获取一个IInputSteam),打个比方:从10米远的地方来回搬一箱零食,方式一:每次拿一袋块 方式二:每次拿10袋快 |
四、cfs先关知识
1、生产环境只有一个集群,这个集群的region和endpoint都是一样的。申请bucket需要找运维,bucket中的块大小默认为128m,该参数可以调
2、valume名称就是bucket
3、上传时文件大小最大为5g
五、待解决问题