zoukankan      html  css  js  c++  java
  • FastDFS HOWTO Protocol

    The communication protocol of FastDFS is TCP/IP, the package composes of header and body which may be empty.

    header format:
      @ TRACKER_PROTO_PKG_LEN_SIZE bytes package length
      @ 1 byte command
      @ 1 byte status

    note: 
       # TRACKER_PROTO_PKG_LEN_SIZE (8) bytes number buff is Big-Endian bytes


    body format:
    1. common command(普通命令)
    * FDFS_PROTO_CMD_QUIT(终止连接)
      # function: notify server connection will be closed
      # request body: none (no body part)
      # response: none (no header and no body)


    2. storage server to tracker server command(SS与TS 间的命令)

     * the reponse command is TRACKER_PROTO_CMD_STORAGE_RESP
     
     * TRACKER_PROTO_CMD_STORAGE_JOIN(SS加入TS)
      # function: storage join to tracker
      # request body:
          @ FDFS_GROUP_NAME_MAX_LEN + 1 bytes: group name
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: storage port
      # response body: n * (1 + FDFS_IPADDR_SIZE) bytes, n >= 0. One storage entry format:
          @ 1 byte: storage server status
          @ FDFS_IPADDR_SIZE bytes: storage server ip address
      # memo: return all storage servers in the group only when storage servers changed or return none
     
     
     * TRACKER_PROTO_CMD_STORAGE_BEAT(SS向TS发送heart beat)
      # function: heart beat
      # request body: none or storage stat info
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total upload count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success upload count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total set metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success set metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total delete count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success delete count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total download count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success download count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total get metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success get metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: last source update timestamp
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: last sync update timestamp
      # response body: same to command TRACKER_PROTO_CMD_STORAGE_JOIN
      # memo: storage server sync it's stat info to tracker server only when storage stat info changed


     * TRACKER_PROTO_CMD_STORAGE_REPORT(报告磁盘使用情况)
      # function: report disk usage
      # request body:
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total space in MB
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: free space in MB
      # response body: same to command TRACKER_PROTO_CMD_STORAGE_JOIN


     * TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG(复制新加入的SS)
      # function: replica new storage servers which maybe not exist in the tracker server
      # request body: n * (1 + FDFS_IPADDR_SIZE) bytes, n >= 1. One storage entry format:
          @ 1 byte: storage server status
          @ FDFS_IPADDR_SIZE bytes: storage server ip address
      # response body: none


     * TRACKER_PROTO_CMD_STORAGE_SYNC_SRC_REQ(当加入新的SS时,同步SS)
      # function: source storage require sync. when add a new storage server, the existed storage servers in the same group will ask the tracker server to tell the source storage server which will sync old data to it
      # request body:
          @ FDFS_IPADDR_SIZE bytes: dest storage server (new storage server) ip address
      # response body: none or
         @ FDFS_IPADDR_SIZE bytes: source storage server ip address
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: sync until timestamp
      # memo: if the dest storage server not do need sync from one of storage servers in the group, the response body is emtpy


     * TRACKER_PROTO_CMD_STORAGE_SYNC_DEST_REQ(新加入的SS请求同步)
      # function: dest storage server (new storage server) require sync
      # request body: none
      # response body: none or
         @ FDFS_IPADDR_SIZE bytes: source storage server ip address
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: sync until timestamp
      # memo: if the dest storage server not do need sync from one of storage servers in the group, the response body is emtpy


     * TRACKER_PROTO_CMD_STORAGE_SYNC_NOTIFY(新加入的SS同步通知)
      # function: new storage server sync notify
      # request body:
         @ FDFS_IPADDR_SIZE bytes: source storage server ip address
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: sync until timestamp
      # response body: same to command TRACKER_PROTO_CMD_STORAGE_JOIN


    3. client to tracker server command(Client与TS之间的命令)

     * the reponse command of following 2 commands is TRACKER_PROTO_CMD_SERVER_RESP
     
     * TRACKER_PROTO_CMD_SERVER_LIST_GROUP(列出所有的组)
      # function: list all groups
      # request body: none
      # response body: n group entries, n >= 0, the format of each entry:
         @ FDFS_GROUP_NAME_MAX_LEN+1 bytes: group name
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: free disk storage in MB
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: storage server count
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: storage server port
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: active server count
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: current write server index


     * TRACKER_PROTO_CMD_SERVER_LIST_STORAGE(列出一个组的SS信息)
      # function: list storage servers of a group
      # request body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: the group name to query
      # response body: n storage entries, n >= 0, the format of each entry:
           @ 1 byte: status
           @ FDFS_IPADDR_SIZE byte: ip address
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total space in MB
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: free space in MB
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total upload count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success upload count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total set metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success set metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total delete count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success delete count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total download count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success download count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: total get metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: success get metadata count
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: last source update timestamp
           @ TRACKER_PROTO_PKG_LEN_SIZE bytes: last sync update timestamp
     
     
     * the reponse command of following 2 commands is TRACKER_PROTO_CMD_SERVICE_RESP
     
     * TRACKER_PROTO_CMD_SERVICE_QUERY_STORE(询问让哪个SS存储文件)
      # function: query which storage server to store file
      # request body: none
      # response body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ FDFS_IPADDR_SIZE - 1 bytes: storage server ip address
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: storage server port 
     
     
     * TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH(询问从哪个SS下载文件)
      # function: query which storage server to download the file
      # request body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ filename bytes: filename
      # response body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ FDFS_IPADDR_SIZE - 1 bytes: storage server ip address
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: storage server port

    4. storage server to storage server command(SS之间的命令)
     * the reponse command is STORAGE_PROTO_CMD_RESP
     
     * STORAGE_PROTO_CMD_SYNC_CREATE_FILE(同步新创建的文件)
      # function: sync new created file
      # request body:
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: filename bytes
         @ TRACKER_PROTO_PKG_LEN_SIZE bytes: file size/bytes
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ filename bytes : filename
         @ file size bytes: file content
      # response body: none
     
     
     * STORAGE_PROTO_CMD_SYNC_DELETE_FILE(同步被删除的文件)
      # function: sync deleted file
      # request body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ filename bytes: filename
      # response body: none 


     * STORAGE_PROTO_CMD_SYNC_UPDATE_FILE(同步被更新的文件)
     # function: sync updated file
     # request body: same to command STORAGE_PROTO_CMD_SYNC_CREATE_FILE
     # respose body: none
     
     
    5. client to storage server command(Client与SS之间的命令)
     * the reponse command is STORAGE_PROTO_CMD_RESP

     * STORAGE_PROTO_CMD_UPLOAD_FILE(向SS上传文件)
      # function: upload file to storage server
      # request body:
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: meta data bytes
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: file size
          @ meta data bytes: each meta data seperated by \x01,
                             name and value seperated by \x02
          @ file size bytes: file content
      # response body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ filename bytes: filename


     * STORAGE_PROTO_CMD_DELETE_FILE(从SS删除文件)
      # function: delete file from storage server
      # request body:
         @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
         @ filename bytes: filename
      # response body: none


     * STORAGE_PROTO_CMD_SET_METADATA(从SS删除metadata)
      # function: delete file from storage server
      # request body:
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: filename length
          @ TRACKER_PROTO_PKG_LEN_SIZE bytes: meta data size
          @ 1 bytes: operation flag, 
               'O' for overwrite all old metadata
               'M' for merge, insert when the meta item not exist, otherwise update it
          @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
          @ filename bytes: filename
          @ meta data bytes: each meta data seperated by \x01,
                             name and value seperated by \x02
      # response body: none


     * STORAGE_PROTO_CMD_DOWNLOAD_FILE(从SS下载文件)
      # function: download/fetch file from storage server
      # request body:
          @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
          @ filename bytes: filename
      # response body:
          @ file content
     
     
     * STORAGE_PROTO_CMD_GET_METADATA(从SS获得metadata)
      # function: get metat data from storage server
      # request body:
          @ FDFS_GROUP_NAME_MAX_LEN bytes: group name
          @ filename bytes: filename
      # response body
          @ meta data buff, each meta data seperated by \x01, name and value seperated by \x02

  • 相关阅读:
    KVC该机制
    JS多语种方式
    面试经典(1)---翻转字的顺序在一个句子
    正确Linux新手很实用20命令
    代码添加背景音乐的日记
    什么是比特币(Bitcoin)?
    李开复:该算法的重要性
    javascript推断的浏览器类型
    libyuv编
    Linux下将UTF8编码批量转换成GB2312编码的方法
  • 原文地址:https://www.cnblogs.com/chinacloud/p/1939072.html
Copyright © 2011-2022 走看看