1,系统端对外暴露API层,使用SpringMVC来设计,协议是HTTP。
当大量文件需要上传时,考虑到互联网传输的这一段速度是比较慢的,例如同时有
A,B,C,D,E,F,G 这几个Client在传输,如果每个都耗时10S
那么显而易见,这些client的连接都在保持住10S时间。这个本身没有任何问题,问题出现在下面
2,在1的前提下,如果API层后面,将文件传输到DFS采用的是同步机制,如下链路:
A(client)------>API---------->DFS 同步
那么不只是A到API这边要保持10S的连接,从API到DFS也将要同样保持10S的连接。
那么问题来了,如果DFS还要同时提供大量的读操作,而且几个简单的写操作一直这么占用连接“长达”10S
系统性能损失太大。解决方案如下
3,从客户端到API层无需太多修改,而是修改API到DFS这一段,从同步变为异步,即等待A client发送过来的数据完全弄完以后再一次性写入到DFS里面
当然这里面也需要有个地方需要选择,A client上来的文件先写到 API的内存?还是硬盘?还是别的存储?
API到DFS 采用线程池,还是额外起动进程扫描,还是通知进程扫描。。。。
要考虑的问题不少,但是总体思路已经解决!
时间: 2024-11-09 02:16:10