<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      分布式文件存儲--FastDFS

      分布式文件存儲--FastDFS

       

       

       

       

      FastDFS 下載: https://sourceforge.net/projects/fastdfs/

       

      簡介:

           FastDFS是一款開源的輕量級分布式文件系統純C實現,支持Linux、FreeBSD等UNIX系統類google FS,不是通用的文件系統,只能通過專有API訪問,目前提供了C、Java和PHP API為互聯網應用量身定做,解決大容量文件存儲問題,追求高性能和高擴展性FastDFS可以看做是基于文件的key value pair存儲系統,稱作分布式文件存儲服務更為合適。

      FastDFS由 跟 蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)構成。

      Tracker server 追蹤服務器

      • 跟蹤服務器, 主要做調度工作, 起負載均衡的作用。 在內存中記錄集群中所有存儲組和存儲服務器的狀態信息, 是客戶端和數據服務器交互的樞紐。追蹤服務器負責接收客戶端的請求,選擇合適的組合storage server ,tracker server 與 storage server之間也會用心跳機制來檢測對方是否活著。
      • Tracker需要管理的信息也都放在內存中,并且里面所有的Tracker都是對等的(每個節點地位相等),很容易擴展
      • 客戶端訪問集群的時候會隨機分配一個Tracker來和客戶端交互。

      Storage server 儲存服務器

      存儲服務器( 又稱:存儲節點或數據服務器) , 文件和文件屬性( metadata) 都保存到存儲服務器上。 Storage server直接利用OS的文件系統調用管理文件。實際存儲數據,分成若干個組(group),實際traker就是管理的storage中的組,而組內機器中則存儲數據,group可以隔離不同應用的數據,不同的應用的數據放在不同group里面,

      group

             組, 也可稱為卷。 同組內服務器上的文件是完全相同的 ,同一組內的storage server之間是對等的(同一組內的文件服務器相互備份), 文件上傳、 刪除等操作可以在任意一臺storage server上進行 

      客戶端Client
      • 主要是上傳下載數據的服務器,也就是我們自己的項目所部署在的服務器。每個客戶端服務器都需要安裝Nginx

      上傳交互過程

      • 1. client詢問tracker上傳到的storage,不需要附加參數;
      • 2. tracker返回一臺可用的storage;
      • 3. client直接和storage通訊完成文件上傳。

      下載交互過程

      • 1. client詢問tracker下載文件的storage,參數為文件標識(卷名和文件名);
      • 2. tracker返回一臺可用的storage;
      • 3. client直接和storage通訊完成文件下載。
      • 需要說明的是,client為使用FastDFS服務的調用方,client也應該是一臺服務器,它對tracker和storage的調用均為服務器間的調用。

       

       

       java整合FastDFS

       <!--FastDFS java客戶端-->
              <dependency>
                  <groupId>net.oschina.zcx7878</groupId>
                  <artifactId>fastdfs-client-java</artifactId>
                  <version>1.27.0.0</version>
              </dependency>

       

      Utils
      /**
       * FastDFS 文件存取Utils
       */
      public class FastDFSClient {
      
          static {
              //從classpath下獲取文件對象獲取路徑
              String path = new ClassPathResource("fdfs_client.conf").getPath();
              try {
                  ClientGlobal.init(path);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          /**
           * 圖片上傳
           *
           * @param file
           * @return
           */
          public static String[] upload(FastDFSFile file) {
              try {
                  TrackerClient trackerClient = new TrackerClient();
                  TrackerServer trackerServer = trackerClient.getConnection();
                  StorageClient storageClient = new StorageClient(trackerServer, null);
                  //參數1 字節數組
                  //參數2 擴展名(不帶點)
                  //參數3 元數據( 文件的大小,文件的作者,文件的創建時間戳)
                  NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};
                  String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
                  // strings[0]==group1  strings[1]=M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg
                  return strings;
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return null;
          }
      
      
          /**
           * 圖片下載
           *
           * @param groupName
           * @param remoteFileName
           * @return
           */
          public static InputStream downFile(String groupName, String remoteFileName) {
              ByteArrayInputStream byteArrayInputStream = null;
              try {
                  //3.創建trackerclient對象
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
                  //5.創建stroageserver 對象
                  //6.創建storageclient 對象
                  StorageClient storageClient = new StorageClient(trackerServer, null);
                  //7.根據組名 和 文件名 下載圖片
      
                  //參數1:指定組名
                  //參數2 :指定遠程的文件名
                  byte[] bytes = storageClient.download_file(groupName, remoteFileName);
                  byteArrayInputStream = new ByteArrayInputStream(bytes);
                  return byteArrayInputStream;
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  try {
                      if (byteArrayInputStream != null) {
                          byteArrayInputStream.close();
                      }
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return null;
          }
      
      
          /**
           * 圖片刪除
           *
           * @param groupName
           * @param remoteFileName
           */
          public static void deleteFile(String groupName, String remoteFileName) {
              try {
                  //3.創建trackerclient對象
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
                  //5.創建stroageserver 對象
                  //6.創建storageclient 對象
                  StorageClient storageClient = new StorageClient(trackerServer, null);
                  int i = storageClient.delete_file(groupName, remoteFileName);
                  if (i == 0) {
                      System.out.println("刪除成功");
                  } else {
                      System.out.println("刪除失敗");
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          /**
           * 根據組名獲取組的信息
           *
           * @param groupName
           * @return
           */
          public static StorageServer getStorages(String groupName) {
              try {
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
      
                  //參數1 指定traqckerserver 對象
                  //參數2 指定組名
                  StorageServer group1 = trackerClient.getStoreStorage(trackerServer, groupName);
                  return group1;
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return null;
          }
      
          /**
           * 根據文件名和組名獲取文件的信息
           *
           * @param groupName
           * @param remoteFileName
           * @return
           */
          public static FileInfo getFile(String groupName, String remoteFileName) {
              try {
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
      
                  StorageClient storageClient = new StorageClient(trackerServer, null);
      
                  //參數1 指定組名
                  //參數2 指定文件的路徑
                  FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
                  return fileInfo;
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return null;
          }
      
      
          /**
           * 根據文件名和組名 獲取組信息的數組信息
           *
           * @param groupName
           * @param remoteFileName
           * @return
           */
          public static ServerInfo[] getServerInfo(String groupName, String remoteFileName) {
              try {
                  //3.創建trackerclient對象
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
      
                  ServerInfo[] group1s = trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
                  return group1s;
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return null;
      
          }
      
          /**
           * 獲取tracker 的ip和端口的信息,
           * http://192.168.211.132:8080
           *
           * @return
           */
          public static String getTrackerUrl() {
              try {
                  //3.創建trackerclient對象
                  TrackerClient trackerClient = new TrackerClient();
                  //4.創建trackerserver 對象
                  TrackerServer trackerServer = trackerClient.getConnection();
                  //tracker 的ip的信息
                  String hostString = trackerServer.getInetSocketAddress().getHostString();
      
                  //http://192.168.211.132:8080/group1/M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg img
                  int g_tracker_http_port = ClientGlobal.getG_tracker_http_port();
                  return "http://" + hostString + ":" + g_tracker_http_port;
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }

      FastDFSFile 

      /**
       * 文件存取Bean
       */
      public class FastDFSFile implements Serializable {
      
          //文件名字
          private String name;
          //文件內容
          private byte[] content;
          //文件擴展名
          private String ext;
          //文件MD5摘要值
          private String md5;
          //文件創建作者
          private String author;
      
          public FastDFSFile(String name, byte[] content, String ext, String md5, String author) {
              this.name = name;
              this.content = content;
              this.ext = ext;
              this.md5 = md5;
              this.author = author;
          }
      
          public FastDFSFile(String name, byte[] content, String ext) {
              this.name = name;
              this.content = content;
              this.ext = ext;
          }
      
          public FastDFSFile() {
          }
      }

       

      fdfs_client.conf

      #連接超時的世界 s
      connect_timeout=60
      #網絡超時時間
      network_timeout=60
      #字符編碼
      charset=UTF-8
      # tracker的http通信協議的端口
      http.tracker_http_port=8080
      # 22122 trackerserver的tcp 端口
      tracker_server=192.168.211.132:22122

       







       

      posted @ 2021-03-21 09:07  鄧維-java  閱讀(168)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 女人被狂躁c到高潮| 久久夜色精品久久噜噜亚| 一本之道高清乱码少妇| 中文字幕一区二区三区四区五区| 国内熟妇人妻色在线三级| 成人区人妻精品一区二蜜臀| 人妻放荡乱h文| 亚洲国产成人综合精品| 久久96热在精品国产高清| 国产睡熟迷奷系列网站| 久久99精品国产自在现线小黄鸭| 成人久久精品国产亚洲av| 久久夜色精品国产噜噜亚洲sv| 在线日韩日本国产亚洲| 99在线国内在线视频22| 高清无打码一区二区三区| 无码精品人妻一区二区三区老牛| 亚洲男人AV天堂午夜在| 特级毛片a片久久久久久| 好紧好滑好湿好爽免费视频 | 巨野县| 人妻精品中文字幕av| 亚洲中文精品一区二区| 88国产精品视频一区二区三区| 成人av一区二区亚洲精| 91中文字幕一区二区| 亚洲精品乱码久久久久久| 国产精品一区二区三区污| 亚洲国产午夜福利精品| 少妇愉情理伦片丰满丰满午夜| 国产情侣一区二区三区| 丁香五月亚洲综合在线国内自拍| 临夏县| 亚洲午夜亚洲精品国产成人| 国产AV无码专区亚洲AV漫画| 97成人碰碰久久人人超级碰oo| 日本三级理论久久人妻电影| 欧美综合婷婷欧美综合五月| 午夜国产理论大片高清| 亚洲aⅴ男人的天堂在线观看| 久热爱精品视频线路一|