\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage[hyphens]{url}
\usepackage{graphicx}
\usepackage{geometry}
\geometry{a4paper, margin=2.5cm}
\usepackage{hyperref}
\hypersetup{
    colorlinks,
    linkcolor={black!100!black},
    citecolor={blue!100!black},
    urlcolor={blue!100!black}
}

\title{{\huge{\bf Streaming decentralizzato di}}\\
\vspace{4mm}
{\huge{\bf contenuti audiovisivi}}\\}

\author{Mirko Milovanovic - 870671}
\date{21 marzo 2025}

\begin{document}

\maketitle

\section{Contesto iniziale}

Lo stage è stato svolto nell'ambito della ricerca sulle tecnologie per lo streaming decentralizzato di contenuti audiovisivi, con particolare attenzione alla piattaforma PeerTube. Il contesto di partenza vedeva la crescente problematica della centralizzazione dei servizi di streaming video, con poche grandi piattaforme (come YouTube e Twitch) che dominano il mercato, comportando problemi di scalabilità, costi elevati di infrastruttura, controllo centralizzato dei contenuti e potenziali limitazioni alla libertà di espressione.

PeerTube si propone come alternativa decentralizzata, utilizzando tecnologie peer-to-peer (P2P) per distribuire il carico di banda tra gli utenti. In particolare, il team di PeerTube aveva pubblicato uno studio che affermava una riduzione del carico sui server fino all'80\% grazie alla tecnologia P2P integrata, ma senza fornire dettagli sufficienti sulla metodologia utilizzata né strumenti specifici per riprodurre i test in modo indipendente.

\section{Obiettivi del lavoro}

Gli obiettivi principali dello stage erano:

\begin{itemize}
    \item Verificare empiricamente le affermazioni degli sviluppatori di PeerTube riguardo all'efficienza del loro approccio P2P nel contesto dello streaming video
    \item Creare un sistema di test automatizzato che potesse riprodurre in modo indipendente i test descritti nell'articolo originale di PeerTube
    \item Raccogliere metriche più dettagliate rispetto a quelle presentate nell'articolo originale
    \item Analizzare i dati raccolti per valutare le reali prestazioni del sistema P2P di PeerTube
    \item Contribuire alla comprensione delle tecnologie decentralizzate per lo streaming video
\end{itemize}

\section{Descrizione lavoro svolto}

Il lavoro è stato articolato nelle seguenti fasi:

\begin{enumerate}
    \item \textbf{Analisi del panorama tecnologico}: Studio approfondito delle tecnologie di streaming esistenti, sia centralizzate (Twitch, YouTube) che decentralizzate (IPFS, Tahoe-LAFS, PeerTube, Ace Stream), con particolare attenzione ai loro punti di forza e debolezza.
    
    \item \textbf{Approfondimento dell'architettura di PeerTube}: Analisi dettagliata dell'architettura di PeerTube, dei suoi componenti (Node.js, Angular, PostgreSQL) e delle tecnologie P2P utilizzate (Novage P2P Media Loader, WebRTC).
    
    \item \textbf{Progettazione del sistema di test}: Creazione di un'architettura di test che potesse simulare utenti reali distribuiti geograficamente, raccogliendo metriche dettagliate sulle prestazioni della rete e del sistema P2P.
    
    \item \textbf{Implementazione del sistema}: Sviluppo di un sistema basato su Docker, Selenium, Python e WebRTC Internals Exporter per simulare client reali che guardano video su PeerTube e raccolgono dati sulle connessioni P2P.
    
    \item \textbf{Modifica di WebRTC Internals Exporter}: Adattamento di uno strumento esistente per la raccolta di metriche WebRTC, con modifiche sostanziali per adattarlo alle esigenze specifiche del test.
    
    \item \textbf{Creazione di un sistema di raccolta dati}: Utilizzo di Telegraf e MongoDB per raccogliere, elaborare e archiviare le metriche raccolte dai test.
    
    \item \textbf{Automazione del deployment}: Utilizzo degli script CLI di Hetzner Cloud per distribuire automaticamente i test su macchine virtuali in diverse regioni geografiche.
    
    \item \textbf{Esecuzione dei test}: Riproduzione di due scenari di test principali: live streaming con Normal Latency e live streaming con High Latency.
    
    \item \textbf{Analisi dei risultati}: Elaborazione dei dati raccolti per verificare le affermazioni di PeerTube riguardo all'efficienza del loro approccio P2P.
\end{enumerate}

\section{Tecnologie coinvolte}

Durante lo stage sono state utilizzate e approfondite numerose tecnologie:

\begin{itemize}
    \item \textbf{Docker}: Per creare ambienti isolati e facilmente riproducibili
    \item \textbf{Python}: Come linguaggio principale per l'automazione e l'analisi dei dati
    \item \textbf{WebRTC}: Per comprendere il funzionamento delle connessioni peer-to-peer nei browser
    \item \textbf{Selenium}: Per simulare browser reali che guardano stream video
    \item \textbf{Telegraf}: Per la raccolta di metriche di sistema e di rete
    \item \textbf{MongoDB}: Per l'archiviazione strutturata dei dati raccolti
    \item \textbf{WebPack}: Per la compilazione e la gestione delle dipendenze del frontend
    \item \textbf{Hetzner Cloud}: Per il deployment distribuito dei test
    \item \textbf{Beautiful Soup 4}: Per l'estrazione di dati dalle pagine web di PeerTube
    \item \textbf{Novage P2P Media Loader}: Libreria JavaScript per la distribuzione P2P dei video
\end{itemize}

\section{Competenze e risultati raggiunti}

\textbf{Risultati rispetto agli obiettivi}:
\begin{itemize}
    \item È stato creato con successo un sistema di test automatizzato per verificare le prestazioni di PeerTube
    \item Sono state raccolte metriche dettagliate sulle connessioni P2P e sulle prestazioni del sistema
    \item I dati raccolti hanno confermato in gran parte le affermazioni degli sviluppatori di PeerTube, pur con alcune limitazioni dovute alla scala ridotta dei test (5 client anziché 1000)
    \item Il sistema sviluppato è disponibile come progetto open source, permettendo ad altri ricercatori di riprodurre e ampliare i test
\end{itemize}

\textbf{Insegnamenti tratti dall'esperienza}:
\begin{itemize}
    \item Importanza dell'automazione per test di sistema complessi
    \item Valore di un approccio modulare e flessibile nello sviluppo di strumenti di test
    \item Comprensione approfondita delle dinamiche delle reti P2P e delle sfide nella distribuzione di contenuti video
    \item Acquisizione di competenze avanzate nell'instrumentazione di browser web per la raccolta di metriche
\end{itemize}

\textbf{Problemi incontrati}:
\begin{itemize}
    \item \textbf{Accesso agli indirizzi IP forniti da WebRTC} (Risolto): Le recenti versioni di Chrome hanno implementato misure di sicurezza che offuscano gli indirizzi IP locali. Questo è stato risolto utilizzando una versione specifica di Chromium con opportuni flag di configurazione.
    
    \item \textbf{Limitazioni delle API di PeerTube} (Risolto): Mancanza di API specifiche per le metriche dei video. Risolto tramite web scraping con BeautifulSoup.
    
    \item \textbf{Gestione delle variabili d'ambiente nell'estensione Chrome} (Risolto): Difficoltà nella configurazione dinamica dell'estensione WebRTC. Risolto utilizzando WebPack per la sostituzione delle variabili in fase di compilazione.
    
    \item \textbf{Scala dei test} (Parzialmente risolto): Non è stato possibile replicare la scala dei test originali (1000 client) a causa di limitazioni di risorse. I test sono stati eseguiti con 5 client, che hanno comunque fornito dati significativi sulle dinamiche P2P.
    
    \item \textbf{Raccolta dei dati su macchine distribuite} (Risolto): Sfida nel raccogliere dati da macchine geograficamente distribuite. Risolto con un'architettura centralizzata di raccolta dati basata su Telegraf e MongoDB.
\end{itemize}

\section{Bibliografia}

\begin{itemize}
    \item RFC 2663: IP Network Address Translator (NAT) Terminology and Considerations
    \item RFC 8216: HTTP Live Streaming
    \item W3C WebRTC
    \item The Selenium Browser Automation Project
    \item PeerTube
\end{itemize}

\end{document}
