欢迎来到天天文库
浏览记录
ID:34416509
大小:41.29 KB
页数:10页
时间:2019-03-05
《fastdfs-javaapi连接池》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Fastdfs-javaapi-连接池1简绍大家都知道fastdfs分为trackerserver和storageserver,trackerserver是跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。storageserver是存储服务器,主要负责文件的存储。我们使用javaapi在分布式文件系统的文件去上传、修改、删除等操作时,有以下几步:1)申请与trackerserver的连接TrackerClienttrackerClient=newTrackerClient();TrackerSe
2、rvertrackerServer=trackerClient.getConnection();2)通过trackerServer得到与storageserver的连接的客户端StorageServerss=tc.getStoreStorage(ts);StorageClient1client1=newStorageClient1(trackerServer,ss);3)上传文件client1.upload_file1(fileBuff,fileExtName,null);4)关闭连接ss.close
3、();trackerServer.close();最终可以完成我们想要的操作,但是这两次创建的连接都是tcp/ip连接,如果每次创建完连接我们都再关闭连接。这个过程是很耗时的。通过api申请的连接并不支持高发发(即一个storage连接只能上传一个文件),我们必须保证同一时刻一个连接上传一个文件。由于我们用fastdfs做文件服务器,通过web的管理平台将文件上传至分布式文件系统中,每次申请完连接再关闭连接,对我们来说会延长上传文件的时间,而且上传文件高并发下,申请的连接可能突然增至几百个,这样我们的
4、服务器的性能损耗太大了。2javaapi源代码分析通过查看fastdfsjavaapi的源代码了解到。通过trackerServer和storageServer得到的newStorageClient1(trackerServer,storageServer);client对象,在操作文件时,会自动检查trackerServer和storageServer是否为空,如果为空,程序会自动为任一server创建连接,待操作完成后,将创建的连接关闭。如果storageServer为null,则程序自动创建tr
5、ackerServer,根据trackerServer得到storageServer,并返回storageServer,在返回storageServer之前会关闭trackerServer。通过storageServer上传完文件之后,关闭storageServer.如果都不空null,则api中不会关闭连接。3结合实际。由于我们搭建的文件系统架构是,一个tracker和三个storage.St1St1trackerSt1从这个图形可以看出,我们的tracker连接是没有必要改变的,申请一次就可以,(
6、直接点)故我们可以为tracker创建连接池。连接池代码如下ConnectionPool:importjava.io.IOException;importjava.net.InetSocketAddress;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.TimeUnit;importorg.csource.fast
7、dfs.ClientGlobal;importorg.csource.fastdfs.StorageClient1;importorg.csource.fastdfs.StorageServer;importorg.csource.fastdfs.TrackerClient;importorg.csource.fastdfs.TrackerGroup;importorg.csource.fastdfs.TrackerServer;publicclassConnectionPool{//thelimit
8、ofconnectioninstanceprivateintsize=5;//busyconnectioninstancesprivateConcurrentHashMapbusyConnectionPool=null;//idleconnectioninstancesprivateArrayBlockingQueueidleConnectionPool=null;privat
此文档下载收益归作者所有