How to submit a content
1. Find physical volumes
1.c Create a hash value
1.d find a write logic volume id, and return [logic volume id, {physical volume ids}]
2. submit to physical volumes
2.c
  generate the cookie
  generate a unique id as key
  choose the right altKey
  send bytes to physical volumes
2.s each
  save bytes
  store map[key uint64, altKey uint32]<offset, size>
    for updated entry, set old entry's offset to zero
3.c
  wait for all physical volumes to finish
  store the /<logic volume id>/<key>_<cookie>_<altKey>.<ext>

How to retrieve a content
1.c
  send logic volume id
1.d
  find least busy volume's id
2.c
  send URI /<physical volume id>/<key>_<cookie>_<altKey>.<ext>


How to submit a content
1. send bytes to SeaweedFS, got <volume id, key uint64, cookie code>
   store <key uint64, volume id uint32, cookie code uint32, ext>, and other information

To read a content
2. use logic volume id to lookup a <machine id>
   render url as /<machine id>/<volume id>/<key>/<cookie>.ext

The directory server
0.init
  load and collect <logic volume id, machine ids> mapping
1.on submit content
  find a free logic volume id, start sending content to 3 machines
  if all of them finishes, return <logic volume id, key, cookie code>
2.on read content
  based on logic volume id, pick a machine with less load,
    return <machine id>


