1. 程式人生 > >fastdfs分散式檔案系統之TrackerServer連線池實現

fastdfs分散式檔案系統之TrackerServer連線池實現

非常感謝  http://blog.csdn.net/Mr_Smile2014/article/details/52441824

公司使用fastdfs檔案系統來儲存檔案和圖片,為了避免每個系統都直接通過客戶端直接訪問fastdfs檔案系統,所以我們做了一個

dubbo服務。要實現圖片上傳、下載的服務或工程直接呼叫dubbo介面就可以了。為了提高效能對fastdfs檔案系統TrackerServer寫了個

連線池,同時寫了空閒連線是否可用的監測類。

下面對連線池的具體實現作介紹。

連線池類

實現配置檔案的讀取、初始化各項引數、建立預設的TrackerServer數、空閒連接獲取、釋放繁忙連線及刪除不可用的連線;

  1. package com.xxxx.fastdfs.pool;  
  2. import java.io.IOException;  
  3. import java.util.UUID;  
  4. import java.util.concurrent.LinkedBlockingQueue;  
  5. import java.util.concurrent.TimeUnit;  
  6. import org.csource.fastdfs.ClientGlobal;  
  7. import org.csource.fastdfs.TrackerClient;  
  8. import org.csource.fastdfs.TrackerServer;  
  9. import org.slf4j.Logger;  
  10. import org.slf4j.LoggerFactory;  
  11. import com.xxxx.common.AppException;  
  12. import com.xxxx.fastdfs.exception.ERRORS;  
  13. /** 
  14.  *  
  15.  * @ClassName: ConnectionPool 
  16.  * @Description: fastdfs連線池 
  17.  * @author mr_smile2014 [email protected] 
  18.  * @date 2015年10月26日 下午3:36:02 
  19.  * 
     
  20.  */
  21. publicclass ConnectionPool {  
  22.     privatestaticfinal Logger LOGGER = LoggerFactory  
  23.             .getLogger(ConnectionPool.class);  
  24.     /** 空閒的連線池 */
  25.     private LinkedBlockingQueue<TrackerServer> idleConnectionPool = null;  
  26.     /** 連線池預設最小連線數 */
  27.     privatelong minPoolSize = 10;  
  28.     /** 連線池預設最大連線數 */
  29.     privatelong maxPoolSize = 30;  
  30.     /** 當前建立的連線數 */
  31.     privatevolatilelong nowPoolSize = 0;  
  32.     /** 預設等待時間(單位:秒) */
  33.     privatelong waitTimes = 200;  
  34.     /** fastdfs客戶端建立連線預設1次 */
  35.     privatestaticfinalint COUNT = 1;  
  36.     /** 
  37.      * 預設構造方法 
  38.      */
  39.     public ConnectionPool(long minPoolSize, long maxPoolSize, long waitTimes) {  
  40.         String logId = UUID.randomUUID().toString();  
  41.         LOGGER.info("[執行緒池構造方法(ConnectionPool)][" + logId  
  42.                 + "][預設引數:minPoolSize=" + minPoolSize + ",maxPoolSize="
  43.                 + maxPoolSize + ",waitTimes=" + waitTimes + "]");  
  44.         this.minPoolSize = minPoolSize;  
  45.         this.maxPoolSize = maxPoolSize;  
  46.         this.waitTimes = waitTimes;  
  47.         /** 初始化連線池 */
  48.         poolInit(logId);  
  49.         /** 註冊心跳 */
  50.         HeartBeat beat = new HeartBeat(this);  
  51.         beat.beat();  
  52.     }  
  53.     /** 
  54.      *  
  55.      * @Description: 連線池初始化 (在載入當前ConnectionPool時執行) 1).載入配置檔案 2).空閒連線池初始化; 
  56.      *               3).建立最小連線數的連線,並放入到空閒連線池; 
  57.      *  
  58.      */
  59.     privatevoid poolInit(String logId) {  
  60.         try {  
  61.             /** 載入配置檔案 */
  62.             initClientGlobal();  
  63.             /** 初始化空閒連線池 */
  64.             idleConnectionPool = new LinkedBlockingQueue<TrackerServer>();  
  65.             /** 往執行緒池中新增預設大小的執行緒 */
  66.             for (int i = 0; i < minPoolSize; i++) {  
  67.                 createTrackerServer(logId, COUNT);  
  68.             }  
  69.         } catch (Exception e) {  
  70.             LOGGER.error("[FASTDFS初始化(init)--異常][" + logId + "][異常:{}]", e);  
  71.         }  
  72.     }  
  73.     /** 
  74.      *  
  75.      * @Description: 建立TrackerServer,並放入空閒連線池 
  76.      *  
  77.      */
  78.     publicvoid createTrackerServer(String logId, int flag) {  
  79.         LOGGER.info("[建立TrackerServer(createTrackerServer)][" + logId + "]");  
  80.         TrackerServer trackerServer = null;  
  81.         try {  
  82.             TrackerClient trackerClient = new TrackerClient();  
  83.             trackerServer = trackerClient.getConnection();  
  84.             while (trackerServer == null && flag < 5) {  
  85.                 LOGGER.info("[建立TrackerServer(createTrackerServer)][" + logId  
  86.                         + "][第" + flag + "次重建]");  
  87.                 flag++;  
  88.                 initClientGlobal();  
  89.                 trackerServer = trackerClient.getConnection();  
  90.             }  
  91.             org.csource.fastdfs.ProtoCommon.activeTest(trackerServer  
  92.                     .getSocket());  
  93.             idleConnectionPool.add(trackerServer);  
  94.             /** 同一時間只允許一個執行緒對nowPoolSize操作 **/
  95.             synchronized (this) {  
  96.                 nowPoolSize++;  
  97.             }  
  98. 相關推薦

    fastdfs分散式檔案系統TrackerServer連線實現

    非常感謝  http://blog.csdn.net/Mr_Smile2014/article/details/52441824 公司使用fastdfs檔案系統來儲存檔案和圖片,為了避免每個系統都直接通過客戶端直接訪問fastdfs檔案系統,所以我們做了一個

    FastDFS分散式檔案系統二】:FastDFS檔案上傳效能測試及Python客戶端上傳操作

      由於要對比swift上傳小檔案以及fdfs上傳小檔案的效能,故做效能測試。 1.1 測試環境: FastDFS叢集的搭建方法:【FastDFS分散式檔案系統之一】:搭建、部署、配置 tracker server1:node2 tracker server2:node3

    Fastdfs分散式檔案系統檔案同步機制

    原連結 http://blog.csdn.net/mr_smile2014/article/details/52118541 FastDFS同步相關檔案: a)10.100.66.82_23000.mark 內容如下: binlog_index=0 binlog

    FastdfsFastdfs分散式檔案系統的安裝部署使用,以及fastdfs連線connectionpool編寫使用

    環境:centos 7.X 預編譯安裝元件 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel libevent-dev git -y 以上安裝完,後續的各

    FastdfsFastdfs分散式檔案系統的安裝部署使用,結合nginx訪問圖片,fastdfs連線connectionpool編寫使用,文末有github連結

    環境:centos 7.X 預編譯安裝元件 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel libevent-dev git -y   以上安裝

    分散式檔案系統-FastDFS

    FastDFS分佈檔案系統介紹: 1.FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合以檔案為載體的線上服務,如相簿網

    分散式檔案系統FastDFS安裝部署

      前面我們瞭解了分散式檔案系統mogilefs的框架以及安裝部署和簡單使用,回顧請參考https://www.cnblogs.com/qiuhom-1874/tag/MogileFS/;今天我們來了解下FastDFS叢集的安裝部署;   FastDFS是由國人研發的一個輕量級分散式檔案系統,主要由track

    分散式檔案系統 FastDFS

    ### [FastDFS 百度百科](https://baike.baidu.com/item/fastdfs/5609710?fr=aladdin) > `FastDFS` 是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容

    FastDFS分散式檔案系統配置與部署

    一文搞定FastDFS分散式檔案系統配置與部署 閱讀目錄 1 分散式檔案系統介紹 2 系統架構介紹 3 FastDFS效能方案 4 Linux基本命令操作 5 安裝VirtualBox虛擬機器並配置Ubuntu

    FastDFS分散式檔案系統 -- 工作原理

    FastDFS介紹 FastDFS分散式檔案管理系統,是用 c 語言編寫的一款開源的分散式檔案系統。FastDFS 為網際網路量身定製, 充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用 FastDFS 很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、

    上傳圖片至fastdfs分散式檔案系統並回顯

    事件,當我們瀏覽完圖片選中一張時,觸發onchange事件將圖片上傳到伺服器並回顯、 1 <img width="100" height="100" id="allUrl" src="${brand.imgUrl }"/> 2 <input type="hidden" name

    第五十二章:FastDFS分散式檔案系統

    資料下載 大綱     FastDFS架構包括Tracker server 和 Storage server 。客戶端請求Tracker server 進行檔案上傳、下載,通過Ttacker server 排程,最總

    分散式檔案系統GPFS

        GPFS是IBM公司通過完善和發展其Tiger Shark檔案系統發展而來。GPFS通過共享磁碟結構來實現其強大的擴充套件性。一個GPFS系統由許多叢集節點組成,GPFS檔案系統和應用程式在上面執行。這些節點通過互動網路架構(Switch Fabric)網路連線磁碟

    Dubbo+Zookeeper架構—高階篇20-fastdfs分散式檔案系統的安裝

    目錄 FastDFS簡介 系統架構 系統架構-下載檔案流程圖 相關術語 同步機制 •同一組內的storage server之間是對等的,檔案上傳、刪除等操作可以在任意一臺storage server上進行; 安裝 環境資訊 一、所有跟蹤伺服器和儲存伺服器均執行如下

    找到一個適合的分散式檔案系統各種分散式檔案系統優缺點對比

    一、各種分散式檔案系統對比 1.1 表格對比 技術 優點 缺點 總結 1、   HDFS 1、大資料批量讀寫,吞吐量高; 2、一次寫入,多次讀取

    【 專欄 】- 實戰FastDFS分散式檔案系統

    實戰FastDFS分散式檔案系統 大型網際網路應用高速增長,導致傳統的檔案系統無法滿足效能要求,隨之應運而生的是分散式檔案系統。FastDFS是一款輕量級、高可靠性、具有資料備份功能、適用於小型檔案應用場景的分散式檔案系統。

    一文搞定FastDFS分散式檔案系統配置與部署

    相關文章 1 分散式檔案系統介紹 分散式檔案系統:Distributed file system, DFS,又叫做網路檔案系統:Network File System。一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。 特點:在一個分享的磁碟檔案系統中

    FastDFS分散式檔案系統在Linux上的部署和安裝

    最近空閒之餘,對分散式檔案系統感興趣就研究研究。 首先要知道FastDFS的定義:FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭

    FastDFS分散式檔案系統安裝與使用(單節點)

    FastDFS是由淘寶的餘慶先生所開發,是一個輕量級、高效能的開源分散式檔案系統,用純C語言開發,包括檔案儲存、檔案同步、檔案訪問(上傳、下載)、存取負載均衡、線上擴容、相同內容只儲存一份等功能,適合有大容量儲存需求的應用或系統。做分散式系統開發時,其中要解

    Java利用fastdfs-client-java開發工具包操作FastDFS分散式檔案系統

    org.csource.common.MyException: getStoreStorage fail, errno code: 2 at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1