202 lines
5.9 KiB
TeX
202 lines
5.9 KiB
TeX
% Created 2025-01-19 Sun 00:17
|
|
% Intended LaTeX compiler: pdflatex
|
|
\documentclass[11pt]{article}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{graphicx}
|
|
\usepackage{longtable}
|
|
\usepackage{wrapfig}
|
|
\usepackage{rotating}
|
|
\usepackage[normalem]{ulem}
|
|
\usepackage{amsmath}
|
|
\usepackage{amssymb}
|
|
\usepackage{capt-of}
|
|
\usepackage{hyperref}
|
|
\author{Akilan}
|
|
\date{\today}
|
|
\title{}
|
|
\hypersetup{
|
|
pdfauthor={Akilan},
|
|
pdftitle={},
|
|
pdfkeywords={},
|
|
pdfsubject={},
|
|
pdfcreator={Emacs 29.1 (Org mode 9.6.6)},
|
|
pdflang={English}}
|
|
\begin{document}
|
|
|
|
\tableofcontents
|
|
|
|
\begin{center}
|
|
\includegraphics[width=.9\linewidth]{/Users/akilan/.cache/org-persist/3a/9e0d0c-d34d-4242-92ac-49f332af6af0-8b003edff282ad2da5830ec63041260a.png}
|
|
\end{center}]]
|
|
|
|
The main aim of this project was to create a custom peer to peer
|
|
network. The user acting as the client has total flexibility on how to
|
|
batch the tasks and the user acting as the server has complete
|
|
flexibility on tracking the container's usages and killing the
|
|
containers at any point of time.
|
|
|
|
\subsection{Latest tutorial}
|
|
\label{sec:org9129ee1}
|
|
\href{https://www.youtube.com/watch?v=OMwCpedu5cs\%22}{\includegraphics[width=.9\linewidth]{/Users/akilan/.cache/org-persist/17/01b895-4c8f-4c97-8b7a-76bde31f87cd-8dfdb3583a175929dac0d44b86acf5b3.jpg}}
|
|
|
|
\section{Table of contents in the Docs folder}
|
|
\label{sec:org881a67e}
|
|
\begin{enumerate}
|
|
\item \href{Docs/Introduction.org}{Introduction}
|
|
\item \href{Docs/Installation.org}{Installation}
|
|
\item \href{Docs/Abstractions.org}{Abstractions}
|
|
\item \href{Docs/Implementation.org}{Implementation}
|
|
\begin{enumerate}
|
|
\item \href{Docs/ClientImplementation.org}{Client Module}
|
|
\item \href{Docs/P2PImplementation.org}{P2P Module}
|
|
\item \href{Docs/ServerImplementation.org}{Server Module}
|
|
\item \href{Docs/ConfigImplementation.org}{Config Module}
|
|
\item \href{Docs/CliImplementation.org}{Cli Module}
|
|
\item \href{Docs/PluginImplementation.org}{Plugin Module}
|
|
\end{enumerate}
|
|
\item Language bindings
|
|
\begin{enumerate}
|
|
\item \href{Docs/haskell/}{Haskell}
|
|
\end{enumerate}
|
|
\end{enumerate}
|
|
|
|
\subsection{Introduction}
|
|
\label{sec:org00598fd}
|
|
This project aims to create a peer to peer (p2p) network, where a user
|
|
can use the p2p network to act as a client (i.e sending tasks) or the
|
|
server (i.e executing the tasks). A prototype application will be
|
|
developed, which comes bundled with a p2p module and possible to execute
|
|
docker containers or virtual environments across selected nodes.
|
|
|
|
\subsubsection{Objectives}
|
|
\label{sec:org385b937}
|
|
\begin{itemize}
|
|
\item Background review on peer to peer network, virtual environments,
|
|
decentralized rendering tools and tools to batch any sort of tasks.
|
|
\item Creating p2p network
|
|
\item Server to create a containerised environment
|
|
\item The client node to run tasks on Server containerised node
|
|
\end{itemize}
|
|
|
|
\href{Docs/Introduction.md}{Read more on the introduction}
|
|
|
|
\subsection{Extend your application with P2PRC}
|
|
\label{sec:orgcab50f2}
|
|
\begin{verbatim}
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/Akilan1999/p2p-rendering-computation/abstractions"
|
|
)
|
|
|
|
func main() {
|
|
_, err := abstractions.Init(nil)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
// start p2prc
|
|
_, err = abstractions.Start()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
// Run server till termination
|
|
for {
|
|
|
|
}
|
|
}
|
|
\end{verbatim}
|
|
|
|
\subsubsection{Export once this is added export P2PRC as environment paths}
|
|
\label{sec:orgd4e7f7c}
|
|
\begin{verbatim}
|
|
export P2PRC=<PROJECT PATH>
|
|
export PATH=<PROJECT PATH>:${PATH}
|
|
\end{verbatim}
|
|
|
|
\href{Docs/Abstractions.md}{Read more} \ldots{}
|
|
|
|
\subsection{Installation from source}
|
|
\label{sec:org6f12be0}
|
|
\begin{enumerate}
|
|
\item Ensure the Go compiler is installed
|
|
|
|
\begin{verbatim}
|
|
go version
|
|
\end{verbatim}
|
|
|
|
\item Ensure docker is installed (Should run without sudo)
|
|
|
|
\begin{verbatim}
|
|
docker ps
|
|
\end{verbatim}
|
|
|
|
\item Clone this repository
|
|
|
|
\begin{verbatim}
|
|
git clone https://github.com/Akilan1999/p2p-rendering-computation
|
|
\end{verbatim}
|
|
|
|
\item Install and build the project
|
|
|
|
\begin{verbatim}
|
|
make install
|
|
\end{verbatim}
|
|
|
|
\item If you look closely you will get outputs such as:
|
|
\texttt{// Add them to your .bashrc file export P2PRC=/<path>/p2p-rendering-computation export PATH=/<path>/p2p-rendering-computation:\$\{PATH\}}
|
|
|
|
\setcounter{enumi}{4}
|
|
\item Test if it works
|
|
|
|
\begin{verbatim}
|
|
p2prc -h
|
|
\end{verbatim}
|
|
|
|
or
|
|
|
|
\begin{verbatim}
|
|
./p2prc -h
|
|
\end{verbatim}
|
|
|
|
\href{Docs/Installation.md}{Read more on the installation and
|
|
usage}
|
|
\end{enumerate}
|
|
|
|
\subsection{Design Architecture}
|
|
\label{sec:org2e297a7}
|
|
The design architecture was inspired and based on the linux kernel
|
|
design. The project is segmented into various modules. Each module is
|
|
responsible for certain tasks in the project. The modules are highly
|
|
dependent on each other hence the entire codebase can be considered as a
|
|
huge monolithic chuck which acts as its own library
|
|
|
|
\href{Docs/DesignArchtectureIntro.md}{Read more on the Design
|
|
Architecture}
|
|
|
|
\subsection{Implementation}
|
|
\label{sec:orgd4b0943}
|
|
The programming language used for this project was Golang. The reason Go
|
|
lang was chosen was because it is a compiled language. The entire
|
|
codebase is just a single binary file. When distributing to other linux
|
|
distributing the only requirement would be the binary file to run the
|
|
code. It is easy to write independant modules and be monolithic at the
|
|
sametime using Go. Using Go.mod makes it very easy to handle external
|
|
libraries and modularise code. The go.mod name for the project is
|
|
git.sr.ht/\textasciitilde{}akilan1999/p2p-rendering-computation.
|
|
|
|
\href{Docs/Implementation.md}{Read more on the Implementation}
|
|
|
|
\subsection{Find out more}
|
|
\label{sec:orge8fec0a}
|
|
As we are working on the open source project p2prc (i.e p2p network
|
|
designed for computation).If you are interested in participating as a
|
|
contributor or just providing feedback on new features to build or even
|
|
just curious about new features added to the project. We have decided to
|
|
create a discord group.
|
|
\end{document} |