1870 |
severe problems with load balancing in a highly heterogeneous environment \cite{rao03loadbalancing}. The problem is caused by peers |
severe problems with load balancing in a highly heterogeneous environment \cite{rao03loadbalancing}. The problem is caused by peers |
1871 |
which may not be able to store relatively large blocks, assigned randomly by the mapping function of the overlay. |
which may not be able to store relatively large blocks, assigned randomly by the mapping function of the overlay. |
1872 |
|
|
1873 |
In our method, each peer maintains the following data structures for local operations: a data structure for listing all |
In our method, each peer maintains the following local data structures for local operations: a data structure for listing all |
1874 |
key-value pairs which peer maintains; a data structure for listing all key-value pairs in the |
key-value pairs which are assigned by the overlay; a data structure for listing all key-value pairs which are assigned by the overlay |
1875 |
chronological order (the most recent block is topmost) which peer maintains. We use Storm blocks' identifiers |
in the chronological order (the most recent block is topmost). We use Storm blocks' identifiers and pointers |
1876 |
as \emph{keys} of the overlay. Every key-value pair consists of either a hash of pointer random string |
as \emph{keys} of the overlay. |
|
(pointer blocks), or a hash of block's content (scroll blocks) as a key. The value is always a reference to a hosting |
|
|
peer (e.g., IP address). Finally, we assume that all local operations can be done in a constant time. |
|
1877 |
|
|
1878 |
We assume that we have resolved the construction of the ''virtual file'' before locating any Storm blocks, i.e., |
We assume that we have resolved the construction of the ''virtual file'' before locating any Storm blocks, i.e., |
1879 |
when assembling the ''virtual file'' we know all the Storm blocks, which are required to complete the ''virtual file''. |
when assembling the ''virtual file'' we know all the Storm blocks, which are required to complete the ''virtual file''. |
1887 |
\item Data lookup with a given identifier of Storm scroll block. |
\item Data lookup with a given identifier of Storm scroll block. |
1888 |
\begin{enumerate} |
\begin{enumerate} |
1889 |
\item Submit the data lookup using scroll block's identifier. |
\item Submit the data lookup using scroll block's identifier. |
1890 |
\item Repeat until the pointer peer is found: each peer forwards the data lookup to a closer peer which hosts the given scroll block identifier. |
\item Each peer forwards the data lookup to a closer peer which hosts the given scroll block identifier in the overlay. |
1891 |
\item The pointer peer returns value (e.g., the IP address of provider peer) to the query originator. |
\item The pointer peer returns value (e.g., the IP address of provider peer) to the query originator. |
1892 |
\item The query originator requests the provider peer to return the scroll block. |
\item The query originator requests the provider peer to return the scroll block. |
1893 |
\end{enumerate} |
\end{enumerate} |
1894 |
\end{itemize} |
\end{itemize} |
1895 |
|
|
|
Figure \ref{fig:storm_query_blockid} illustrates how Storm scroll block is located |
|
|
in a tightly structured overlay using the DOLR abstraction, where the identifier of Storm scroll |
|
|
block is given. |
|
|
|
|
1896 |
|
|
1897 |
\begin{itemize} |
\begin{itemize} |
1898 |
\item Data lookup with a given pointer random string returning most recent scroll block. |
\item Data lookup with a given pointer returning most recent scroll block. |
1899 |
\begin{enumerate} |
\begin{enumerate} |
1900 |
\item The query originator locally computes a hash over given pointer random string. |
\item The query originator locally computes a hash over given pointer. |
1901 |
\item Repeat until the pointer peer is found: each peer forwards the data lookup to a closer peer which hosts the given hash of pointer random string. |
\item Each peer forwards the data lookup to a closer peer which hosts the given hash of pointer in the overlay. |
1902 |
\item The pointer peer returns most recent pointer block's key-value pair (e.g., the IP address of provider peer) to the query originator, using pointer block's own indexing schemes. |
\item The pointer peer returns most recent pointer block's key-value pair (e.g., the IP address of provider peer) to the query originator, using pointer block's own indexing schemes. |
1903 |
\item The query originator requests the provider peer to return the scroll block. |
\item The query originator requests the provider peer to return the scroll block. |
1904 |
\end{enumerate} |
\end{enumerate} |
1905 |
\end{itemize} |
\end{itemize} |
1906 |
|
|
1907 |
\begin{itemize} |
\begin{itemize} |
1908 |
\item Data lookup with a given pointer random string returning scroll block(s) for a given date or time range. |
\item Data lookup with a given pointer returning scroll block(s) for a given date or time range. |
1909 |
\begin{enumerate} |
\begin{enumerate} |
1910 |
\item The query originator locally computes a hash over given pointer random string. |
\item The query originator locally computes a hash over given pointer. |
1911 |
\item Repeat until the pointer peer is found: each peer forwards the data lookup to a closer peer which hosts the given hash of pointer random string. |
\item Each peer forwards the data lookup to a closer peer which hosts the given hash of pointer in the overlay. |
1912 |
\item Pointer peer returns pointer block's key-value pair(s) (e.g., the IP address of provider peer) to the query originator, using pointer block's own indexing schemes. |
\item Pointer peer returns pointer block's key-value pair(s) (e.g., the IP address of provider peer) to the query originator, using pointer block's own indexing schemes. |
1913 |
\item The query originator requests the provider peer to return the scroll block. |
\item The query originator requests the provider peer to return the scroll block. |
1914 |
\end{enumerate} |
\end{enumerate} |
1915 |
\end{itemize} |
\end{itemize} |
1916 |
|
|
|
Figure \ref{fig:storm_query_urn5} illustrates how Storm scroll block is located |
|
|
in a tightly structured overlay using the DOLR abstraction, where the pointer random string is given. |
|
1917 |
|
|
1918 |
Each of these algorithms can locate Fenfire blocks in $O(\log{n})$ time at application level overlay: |
Each of these algorithms can locate Fenfire blocks in $O(\log{n})$ time at application level overlay: |
1919 |
$O(\log{n})$ time for query routing to pointer peer (Kademlia \cite{maymounkov02kademlia}) and constant time for |
$O(\log{n})$ time for query routing to pointer peer (Kademlia \cite{maymounkov02kademlia}) and constant time for |
1920 |
locating hosting peer with a given reference link. |
locating hosting peer with a given reference link. |
1921 |
|
|
|
|
|
|
\begin{figure} |
|
|
\centering |
|
|
\includegraphics[width=10cm, height=7cm]{storm_query_blockid.eps} |
|
|
\caption{Locating Storm block in Peer-to-Peer environment with a given block identifier.} |
|
|
\label{fig:storm_query_blockid} |
|
|
\end{figure} |
|
|
|
|
|
\begin{figure} |
|
|
\centering |
|
|
\includegraphics[width=10cm, height=7cm]{storm_query_urn5.eps} |
|
|
\caption{Locating Storm block in Peer-to-Peer environment with a given pointer random string.} |
|
|
\label{fig:storm_query_urn5} |
|
|
\end{figure} |
|
|
|
|
|
|
|
1922 |
\subsection{Problems} |
\subsection{Problems} |
1923 |
|
|
1924 |
Perhaps the most biggest issue in Peer-to-Peer systems is the non-maturity of |
Perhaps the most biggest issue in Peer-to-Peer systems is the non-maturity of |
1925 |
security technologies. For instance, online entities cannot be identified |
security technologies. For instance, online entities cannot be identified |
1926 |
safely (e.g., the Sybil attack \cite{douceur02sybil}). For the Fenfire system, one |
safely (e.g., the Sybil attack \cite{douceur02sybil}). For the Fenfire system, one |
1927 |
security related problem occurs when a user wants to perform a global data lookup with a given |
security related problem occurs when a user wants to perform a global data lookup with a given |
1928 |
pointer random string; how the user is able to verify the correctness |
pointer; how the user is able to verify the correctness |
1929 |
of the search results, i.e., how she or he knows which one is the |
of the search results, i.e., how she or he knows which one is the |
1930 |
correct Storm scroll block ? The Spam attack \cite{naor03simpledht} is a variation of previously |
correct Storm scroll block ? The Spam attack \cite{naor03simpledht} is a variation of previously |
1931 |
mentioned problem; data lookup is performed by a user, but there is no reply |
mentioned problem; data lookup is performed by a user, but there is no reply |