gfs.tex 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. \documentclass{sig-alternate}
  2. \begin{document}
  3. \conferenceinfo{WOODSTOCK}{'97 El Paso, Texas USA}
  4. \title{Gallactic File System}
  5. \subtitle{}
  6. \numberofauthors{1}
  7. \author{
  8. % You can go ahead and credit any number of authors here,
  9. % e.g. one 'row of three' or two rows (consisting of one row of three
  10. % and a second row of one, two or three).
  11. %
  12. % The command \alignauthor (no curly braces needed) should
  13. % precede each author name, affiliation/snail-mail address and
  14. % e-mail address. Additionally, tag each line of
  15. % affiliation/address with \affaddr, and tag the
  16. % e-mail address with \email.
  17. %
  18. % 1st. author
  19. \alignauthor
  20. Juan Benet\\
  21. \affaddr{athena.ai}\\
  22. \affaddr{498 Walsh Rd}\\
  23. \affaddr{Atherton, CA, USA}\\
  24. \email{juan@benet.ai}
  25. }
  26. \maketitle
  27. \begin{abstract}
  28. The Gallactic File System is a peer-to-peer distributed file system capable of
  29. sharing the same files with millions of nodes. GFS combines a distributed
  30. hashtable, cryptographic techniques, merkle trees, content-addressable
  31. storage, bittorrent, and tag-based filesystems to build a single massive
  32. file system shared between peers. GFS has no single point of failure, and
  33. nodes do not need to trust each other.
  34. \end{abstract}
  35. \section{Introduction}
  36. \section{GFS Overview}
  37. GFS is a distributed file system where all nodes are the same. Together, the
  38. nodes store the GFS files in local storage, and send the files to each other.
  39. GFS implements its features by combining three well-known systems:
  40. \begin{enumerate}
  41. \item A Git-like \textbf{Object Model} to represent the filesystem.
  42. \item A Kademlia-based \textbf{Distributed Hash Table} to coordinate the retrieval of files.
  43. \item A Bittorrent-like peer-to-peer data \textbf{Chunk Exchange}.
  44. \end{enumerate}
  45. \subsection{Object Model}
  46. Files are represented as a collection of inter-related objects, like in the
  47. version control system Git. Each object is addressed by the cryptographic hash of its contents (unless otherwise specified, \textit{checksum} will henceforth refer to this cryptographic file content hash). The file objects are:
  48. \begin{enumerate}
  49. \item \texttt{chunk}: a variable-size block of data.
  50. \item \texttt{list}: a collection of chunks or other lists.
  51. \item \texttt{tree}: a collection of chunks, lists, or other trees.
  52. \end{enumerate}
  53. \subsubsection{Block Object}
  54. The \texttt{Block} object contains an addressable unit of data, and
  55. represents a file.
  56. GFS Blocks are like Git blobs or filesystem data blocks. They store the
  57. users' data. (The name \textit{block} is preferred over \textit{blob}, as the
  58. Git-inspired view of a \textit{blob} as a \textit{file} breaks down in GFS.
  59. GFS files can be represented by both \texttt{lists} and \texttt{blocks}.)
  60. Format:
  61. \begin{verbatim}
  62. block <size>
  63. <block data bytes>
  64. ...
  65. \end{verbatim}
  66. \subsubsection{List Object}
  67. The \texttt{List} object represents a (large) file made up of several
  68. GFS \texttt{Blocks} concatenated together. \texttt{Lists} contain
  69. an ordered sequence of \texttt{block} or \texttt{list} objects.
  70. In a sense, the GFS \texttt{List} functions like a filesystem file with
  71. indirect blocks. Since \texttt{lists} can contain other \texttt{lists}, topologies including linked lists and balanced trees are possible. Directed graphs where the same node appears in multiple places allow in-file deduplication. Cycles are not possible (enforced by hash addessing).
  72. Format:
  73. \begin{verbatim}
  74. blob <num objects> <size>
  75. <list or block> <checksum> <size>
  76. <list or block> <checksum> <size>
  77. ...
  78. \end{verbatim}
  79. \subsubsection{Tree Object}
  80. The \texttt{tree} object in GFS is similar to Git trees: it represents a
  81. directory, a list of checksums and names. The checksums reference \texttt{blob}
  82. or other \texttt{tree} objects. Note that traditional path naming
  83. is implemented entirely by the \texttt{tree} objects. \texttt{Blocks} and
  84. \texttt{lists} are only addressed by their \texttt{checksums}.
  85. % Unlike in Git, GFS trees include file-system metadata such as file
  86. %permissions.
  87. Format:
  88. \begin{verbatim}
  89. tree <num objects> <size>
  90. <tree or list or block> <checksum> <size> <name>
  91. <tree or list or block> <checksum> <size> <name>
  92. ...
  93. \end{verbatim}
  94. \subsubsection{Commit Object}
  95. The \texttt{commit} object in GFS is similar to Git's. It represents a
  96. snapshot in the version history of a \texttt{tree}.
  97. \begin{verbatim}
  98. commit <size>
  99. parent <commit checksum>
  100. tree <tree checksum>
  101. author Full Name <email@address.com> <ISO UTC date>
  102. committer Full Name <email@address.com> <ISO UTC date>
  103. <commit message>
  104. \end{verbatim}
  105. \subsubsection{Version control}
  106. \subsubsection{Signed Objects}
  107. All objects can be signed. Add signature to bottom of object.
  108. (yes, this changes the hash, as it should)
  109. \subsubsection{Merkle Trees}
  110. The object model in GFS forms a \textit{Merkle Tree}, where every object
  111. contains hashes of its children. This provides GFS with the useful properties
  112. of merkle trees:
  113. \begin{enumerate}
  114. \item Tamper resistance
  115. \end{enumerate}
  116. \subsubsection{Published Branches}
  117. Users can publish branches (filesystems) with:
  118. publickey -> signed tree of branches
  119. \subsection{Distributed Hash Table}
  120. \subsection{Chunk Exchange}
  121. \subsection{Object Distribution}
  122. \subsubsection{Spreading Objects}
  123. DHash spread along the DHT nodes?
  124. Mainline DHT peer registry?
  125. \subsubsection{Pinning Objects}
  126. \section{Conclusions}
  127. %\section{Acknowledgments}
  128. %\bibliographystyle{abbrv}
  129. %\bibliography{gfs}
  130. %\balancecolumns
  131. %\subsection{References}
  132. \end{document}