diff --git a/.gitignore b/.gitignore index 98096ea..ae3f73f 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,7 @@ Tesi.pdf ## Bibliography auxiliary files (bibtex/biblatex/biber): *.bbl* -*.bcf +*.bcf* *.blg *-blx.aux *-blx.bib diff --git a/Tesi.tex b/Tesi.tex index 10fd1d0..69621f5 100644 --- a/Tesi.tex +++ b/Tesi.tex @@ -179,60 +179,108 @@ \end{flushright} \vfill \begin{center} - {\large{\bf Anno Accademico 2021-2022}} + {\large{\bf Anno Accademico 2024-2025}} \end{center} \end{titlepage} \tableofcontents \thispagestyle{empty} -%\chapter o \sections (dipende dal documentclass e cosa vogliamo fare) -%\makeatletter -%\patchcmd{\@makechapterhead}{50\p@}{0pt}{}{} -%\patchcmd{\@makeschapterhead}{50\p@}{0pt}{}{} -%\makeatother - \chapter{Introduzione} \pagenumbering{arabic} \setcounter{page}{1} -Fin dai\todo{atrent: attenzione all'italiano, ho corretto} suoi albori Internet, nato da ARPAnet, svolge un ruolo importantissimo nella vita di tutti noi, che sia condividere informazioni militari, utilizzare servizi erogati via Web, o più recentemente guardare contenuti audiovisivi ``on-the-go'', ovvero quello di connettere le persone intorno al globo nei più svariati modi possibili attraverso l'utilizzo di calcolatori come computer e/o dispositivi mobili ``connessi''. + +Fin dai suoi albori Internet, nato da ARPAnet, svolge un ruolo importantissimo nella vita di tutti noi, che sia condividere informazioni militari, utilizzare servizi erogati via Web, o più recentemente guardare contenuti audiovisivi ``on-the-go'', ovvero quello di connettere le persone intorno al globo nei più svariati modi possibili attraverso l'utilizzo di calcolatori come computer e/o dispositivi mobili ``connessi''. + Negli anni e per come è stato concepito Internet stesso architetturalmente, si sono venuti a formare veri metodi di comunicazione tra gli utilizzatori e gli erogatori di servizi Internet, più o meno sicuri, efficaci o resilienti rispetto a tematiche come la privacy dei dati, la centralizzazione e costi di operazione. -Quello più diffuso oramai è certamente il modello Client/Server, reso famoso dall'imponente World Wide Web il me più diffuso e oseremo azzardare a dire più intuitivo di utilizzare Internet ma certamente non l'unico.\cite[]{w3c} +Il modello Client/Server è certamente il più diffuso, reso famoso dall'imponente World Wide Web, il modo più intuitivo di utilizzare Internet ma certamente non l'unico.\cite[]{w3c} Questa architettura, specialmente nell'ambito della trasmissione di contenuti audiovisivi in streaming, presenta notevoli sfide tecniche ed economiche. L'infrastruttura centralizzata richiede server potenti e costosi che devono gestire simultaneamente migliaia di connessioni, con un consumo di banda che cresce linearmente con il numero di spettatori. -Questa necessità di avere grandi computer con elevata potenza di calcolo in un unico posto ha creato negli anni una situazione di forte centralizzazione da parte di poche "Big Tech", dovuto principalmente al grande costo necessario per allestire il software e tenere in funzione server indipendenti rispetto soluzioni di tipo \textit{Infrastructure as a Service (IaaS)} o \textit{Platform as a service (PaaS)}. +Negli ultimi anni, diverse piattaforme hanno cercato di risolvere questo problema attraverso l'adozione di tecnologie peer-to-peer (P2P) per la distribuzione dei contenuti. Tra queste, PeerTube si distingue come una delle soluzioni più promettenti, combinando una struttura federata con tecnologie di streaming P2P che promettono di ridurre significativamente il carico sui server centrali. -Questo metodo di \textit{deployment} dei servizi ha creato una situazione in cui pochi gestori hanno un grosso controllo e potere rispetto a un enorme userbase creando una situazione ``di troppo potere nelle mani di pochi''\cite[]{ai4businessDataTroppo} che sfocia in un elevato controllo di tutte le comunicazioni effettuate attraverso queste piattaforme con tutti i vari problemi morali e legali annessi come la raccolta eccessiva di metadati sugli utenti, licenze di utilizzo super restrittive, controllo dei contenuti in base a pregiudizi Individuali, crittografia illusoria e rottura della reciproca fiducia, meccanismo alla base di Internet stessa.\cite{trentini2020cittadinanza} -\todo{mirko: sarebbe da rivedere questa parte per rendere ben chiara la situazione attuale della rete coi suoi problemi di forte centralizzazione - atrent: concordo, prendi pure anche da altri testi, scartabella la biblio del nostro} +Questa tesi si propone di analizzare criticamente le affermazioni fatte dagli sviluppatori di PeerTube riguardo l'efficienza e l'efficacia del loro approccio P2P nel contesto dello streaming video. Partiremo da un'analisi del panorama attuale dello streaming centralizzato, ne evidenzieremo i limiti, per poi esplorare le alternative decentralizzate e concentrarci su PeerTube, ricreando e ampliando i test condotti dai suoi sviluppatori per verificarne empiricamente le prestazioni. -Lo scopo di questo elaborato è quello di analizzare lo stato attuale della rete e del software riguardo la fruizione e trasmissione di contenuti audiovisivi online in modo decentralizzato. Nello specifico ci interessa testare sul campo e valutare quali siano le soluzioni esistenti disponibili oggi, quali quelle più utilizzate, quale letteratura sia disponibile a riguardo, eventuale definizione e realizzazione di una piattaforma ideale soggettiva se nessuna di quelle trovate ci soddisfi e infine concludere con la presentazione dei del lavoro svolto. +\section{Il problema dello streaming centralizzato} -\todo{atrent: così com'è l'intro non spiega bene il problema che ti vuoi porre} +Un sistema Client/Server tradizionale per lo streaming video presenta diverse problematiche critiche: +\begin{itemize} + \item \textbf{Scalabilità limitata}: I server centrali devono gestire tutto il traffico in uscita, con costi di banda che crescono linearmente con il numero di spettatori. + \item \textbf{Single Point of Failure}: Se il server centrale subisce un'interruzione, tutti i client perdono l'accesso al servizio. + \item \textbf{Costi infrastrutturali elevati}: Mantenere server capaci di gestire picchi di traffico richiede investimenti significativi. + \item \textbf{Centralizzazione del controllo}: Poche entità controllano le piattaforme più popolari, con potenziali implicazioni per la libertà di espressione e la privacy. +\end{itemize} -\todo{atrent: magari prima di continuare a scrivere testo dettaglia meglio l'outline inserendo sezioni e sottosezioni} +\section{Le alternative decentralizzate e P2P} -\section{TCP/IP, Internet e World Wide Web} -\todo{mirko: il capitolo 2 non so come farlo così come impostato ora dato che questa parte viene già menzionata nella introduzione quando si menziona client/server - atrent: potrebbe diventare una sezione del precedente} -\begin{center} - \includegraphics[scale=0.3]{images/client-server.png} -\end{center} +Le tecnologie peer-to-peer offrono un approccio alternativo che potrebbe risolvere molti di questi problemi: + +\begin{itemize} + \item \textbf{Distribuzione del carico}: Ogni client può anche fungere da distributore per altri client, riducendo il carico sul server originale. + \item \textbf{Maggiore resilienza}: L'assenza di un punto centrale di fallimento rende il sistema più robusto. + \item \textbf{Riduzione dei costi}: I costi di banda vengono distribuiti tra i partecipanti anziché essere sostenuti da un unico fornitore. + \item \textbf{Decentralizzazione del controllo}: Nessuna entità singola può controllare completamente il flusso di informazioni. +\end{itemize} + +Tra le varie piattaforme che utilizzano questo approccio, PeerTube ha attirato la nostra attenzione per la sua architettura ibrida che combina federazione e P2P, e per le affermazioni dei suoi sviluppatori riguardo l'efficienza di questo approccio. In particolare, un articolo pubblicato dal team di PeerTube sostiene che la loro implementazione P2P può ridurre il carico sul server di origine fino all'80%, una cifra che merita un'analisi approfondita e una verifica indipendente. + +\chapter{Stato dell'arte} +\epigraph{In questo capitolo analizzeremo il panorama attuale delle tecnologie di streaming, confrontando approcci centralizzati e decentralizzati per comprendere i loro punti di forza e debolezza.}{} + +\section{Modelli di comunicazione in rete} + +\subsection{Client/Server e il Web 2.0} Un sistema Client/Server è un tipo di computazione distribuita in cui i clienti effettuano delle richieste verso un server che a sua volta risponde con i dati/servizi richiesti restando in attesa. I client possono essere di vario tipo e trovarsi ovunque nel globo e in generale integrano una parte hardware (smartphone, PCs, \dots) ad una software (applicazioni GUI, web browser, \dots). I server, invece, sono delle macchine specializzate spesso raggruppate assieme in grandi data center, interconnesse tra di loro per fornire uno o più servizi a molteplici client contemporaneamente. -\newpage -\section{Il difetto del Web} -\subsection{Web 2.0} -\subsection{Controllo delle comunicazioni tra individui} -\subsection{Riappropriazione dei dati} -\subsection{Forte dipendenza da software proprietario e perdita di privacy} -\subsection{Single point of failure} -\section{Live streaming e interaction} +\begin{figure}[H] + \centering + \includegraphics[scale=0.3]{images/client-server.png} + \caption{Modello Client/Server tradizionale} +\end{figure} + +Questo modello ha dominato l'era del Web 2.0, caratterizzata da: + +\begin{itemize} + \item Piattaforme centralizzate con contenuti generati dagli utenti + \item Elevata interattività e social networking + \item Controllo dei dati da parte delle grandi aziende tecnologiche + \item Monetizzazione tramite pubblicità e raccolta dati +\end{itemize} + +Nonostante i vantaggi in termini di semplicità d'uso e accessibilità, questo modello ha portato a: + +\begin{itemize} + \item Forte centralizzazione del potere da parte di poche "Big Tech" + \item Elevati costi di infrastruttura + \item Problemi di privacy e controllo dei dati personali + \item Vulnerabilità a censura e manipolazione dei contenuti +\end{itemize} + +\subsection{Peer-to-Peer e Web 3.0} + +Il modello peer-to-peer rappresenta un approccio alternativo in cui ogni nodo della rete può fungere sia da client che da server, eliminando la necessità di un'infrastruttura centralizzata. Questo modello è alla base di molte tecnologie del cosiddetto Web 3.0, caratterizzato da: + +\begin{itemize} + \item Decentralizzazione del controllo e distribuzione del carico + \item Maggiore privacy e sovranità sui dati personali + \item Resilienza a censura e fallimenti di singoli nodi + \item Riduzione dei costi infrastrutturali +\end{itemize} + +Tuttavia, le soluzioni P2P presentano anche alcune sfide: + +\begin{itemize} + \item Maggiore complessità tecnica + \item Possibili problemi di latenza e qualità del servizio + \item Difficoltà nel garantire contenuti legali e moderazione + \item Sfide tecniche come il NAT traversal e la connettività tra peer +\end{itemize} + +\break + +\section{Casi d'uso per lo streaming decentralizzato} -\newpage -\subsection{Use cases} Vediamo degli esempi di come questa interazione potrebbe essere svolta: \usecase{Esempio d'interazione ``one to many''}{Un utente davanti al proprio computer vorrebbe condividere quello che vede sullo schermo con i propri amici o followers}{Utente principale, viewers, computer, connessione internet}{Condivisione in live streaming di un contenuto a schermo via internet con TCP/IP}{} @@ -283,49 +331,11 @@ In sintesi, l'analisi dei casi d'uso evidenzia la necessità di una soluzione di \item Comunicazioni video in situazioni di emergenza. \end{itemize} -\chapter{Stato attuale del software} -\epigraph{In questo capitolo andremo ad esplorare ed analizzare tutte le situazioni e le tecnologie attualmente esistenti che possono essere applicate}{} -\section{Nomenclatura} -Prima di iniziare con il ``dive-in'' vorremmo spendere qualche riga per fare un inquadratura generale di tutti i termini, non strettamente di uso comune, che andremo ad utilizzare nei capitoli successivi per cercare di essere il più possibile comprensibili anche ai meno avvezzi del settore +\section{Panoramica delle piattaforme di streaming esistenti} -\begin{itemize} - \item Livelli di decentralizzazione - \begin{description} - \item Descrtizione livelli di decentralizzazione - \end{description} - \item Licenza - \begin{description} - \item Per licenza si intende un tipo di contratto con il quale il titolare dei diritti di sfruttamento economico sul software (programma informatico) definisce il regime giuridico di circolazione e le limitazioni nell'utilizzo e nella cessione dell'opera (che sia un'opera creativa, o un software, inteso come programma) \cite{wikipediaLicenzainformatica} che l'utente di un servizio deve accettare per utilizzare il suddetto. - \end{description} - \item Network Address Translation (NAT) - \begin{description} - \item Il `Network Address Translation' o anche detto NAT è un meccanismo usato tipicamente nelle reti locali che permette di a molteplici host/client di condividere uno solo indirizzo IP pubblico accessibile dall'esterno. Un dispositivo sulla rete si occupa di modificare e instradare i pacchetti IP da una rete all'altra facendo un `mapping' delle porte pubbliche a quelle private e di instrdare i pacchetti IP sia in entrata che in uscita attraerso queste porte temporanee. \cite{pjsipIntroductionNetwork} - \end{description} - \item NAT Traversal - \begin{description} - \item Il problema del NAT Traversal sorge quando vari peer dietro NAT diversi cercano di comunicare. Siccome gli indirizzi IP reali vengono mascherati quando una applicazione, che non è stata pensata per il NAT traversal, prova a chiamare dei servizi esterni potrebbe inviare erroneamente il proprio indirizzo IP privato come indirizzo di risposta, cosa che impedirebbe il server esterno di rispondere e inviare dati verso il client. \\Un modo per risolvere questo problema è utilizzare il port forwarding. La tecnica più utilizzata per risolvere il problema del NAT traversal è il TCP hole punching. \cite{pjsipIntroductionNetwork} \cite{wikipediaTraversalWikipedia} \cite{rfc5128} - \end{description} - \item Content delivery Network (CDN) - \begin{description} - \item Una Content Delivery Network (CDN) è un sistema distribuito di server composto da un grande numero di nodi che consente agli utenti di richiedere oggetti da nodi vicini. Le CDN vengono usate di solito per ridurre la latenza e i tempi di caricamento end-to-end dal lato utente e sono tipicamente forniti da servizi esterni di terze parti. Vengono usate tipicamente per alleggerire il carico dai server dei provider di contenuti e fornire resistenza contro gli attacchi di `denial' of service distribuiti (DDoS). Tuttavia, però, memorizzando i dati dei provider e elaborando richieste degli utenti finali, i fornitori di CDN possono applicare tecniche di deuzione e tracking delle preferenze degli utenti che possono essere usate per scopi malevoli. Tale diulgazione di informazioni potrebbe comportare una perdita di privacy degli utenti e rivelare informazioni private specifiche del business o degli utenti a fornitori di CDN non affidabili o compromessi. \cite{Multi-CDN:TowardsPrivacyinContentDeliveryNetworks} - \end{description} - \item Distributed Hash Table (DHT) - \begin{description} - \item Una DHT \cite{ASurveyAndComparisonOfPeer-to-peerOverlayNetworkSchemes} - \end{description} -\end{itemize} +\subsection{Soluzioni centralizzate} -\newpage - -\section{Stato dell'arte} - -Per identificare i punti cardine di quello che vorremmo realizzare, abbiamo bisogno di studiare alcune soluzioni già esistenti sul mercato, con lo scopo di trarne vantaggi e difetti da cui partire per poter proporre una possibile soluzione alternativa a quelle già esistenti. - -Per semplicità, abbiamo deciso di prendere in considerazione al massimo tre soluzioni software, già esistenti per ogni macro-categoria. - -Questa lista include sia protocolli essenziali che software completi `full-stack' e servizi web, per comparare la fattibilità di realizzazione di un software partendo dalle basi o utilizzando qualcosa che c'è già e, sono stati generalmente scelti, in base alla loro popolarità loro diffusione, licenza di utlizzo e utilità per il nostro caso d'uso. - -\subsection{Twitch} +\subsubsection{Twitch} Twitch è una piattaforma di live streaming di proprietà di Amazon lanciata nel 2011, originariamente specializzata nella trasmissione in diretta di videogiochi, eSports ed eventi riguardanti il mondo videoludico. @@ -347,10 +357,7 @@ Twitch offre molti servizi sotto un unico sito web accessibile con un semplice b {Stream video e testo per funzionalità di live chat} {Proprietaria con contratto di utilizzo `EULA'} -\pagebreak -\newpage - -\subsection{YouTube} +\subsubsection{YouTube} Youtube è una piattaforma di sharing online di video statici, di proprietà di Google, specializzata nella condivisione globale di video generici con funzionalità aggiuntive di social media, monetizzazione e live streaming. @@ -364,10 +371,9 @@ La compagnia è stata lanciata nel febbraio 2005 come indipendente ed è poi sta \serviceCharacteristics{Chiunque sul web}{Servizio accessibile via browser o applicazione mobile}{Centralizzata con utilizzo di CDN}{Video statici, live stream}{Proprietaria con contratto di utilizzo `EULA'} -\pagebreak -\newpage +\subsection{Soluzioni decentralizzate e P2P} -\subsection{Tahoe-LAFS} +\subsubsection{Tahoe-LAFS} Tahoe-LAFS è un sistema di file distribuito, open source, decentralizzato e sicuro che permette agli utenti di memorizzare e condividere file in un ambiente di rete distribuita chiamata `Grid'. Sviluppato da un gruppo di ricercatori dell'Università di Maryland, dal 2007 ed è stato rilasciato come software open source sotto licenza GPL. Tahoe-LAFS è stato progettato per essere un sistema di file distribuito sicuro, affidabile e scalabile, in modo da poter essere utilizzato in ambienti di rete distribuita, dato che promette di essere un sistema `provider-independent', ovvero che i fornitori dei server intermediari non hanno mai la possibilità di accedere o modificare i dati memorizzati dagli utenti finali perché che non sono loro a garantire la confidenzialità, l'integrità o l'assoluta disponibilità dei dati, ma sono i client finali a farlo. @@ -395,10 +401,7 @@ Come detto prima, sono i clienti a garantire l'integrità e la confidenzialità \serviceCharacteristics{Utenti e server di terze parti}{Software client lato utente}{Decentralizzata e `provider-indipendent'}{Qualsiasi tipo di file binario}{GPL} -\pagebreak -\newpage - -\subsection{IPFS} +\subsubsection{IPFS} IPFS o `InterPlanetary File System' è una suite di protocolli e librerie open source per la condivisione di file in un ambiente di rete distribuita utilizzando meccanismi di `content-addressing'. IPFS è stato sviluppato da Protocol Labs, un'azienda di ricerca e sviluppo nel 2014. IPFS punta a creare un file system condiviso da una rete di nodi decentralizzata che comunica attraverso P2P, dove i singoli file sono organizzati come blocchi indipendentemente individuabili ed immutabili (ovvero che non possono essere modificati ma solo aggiunti o eliminati) con degli identificatori chiamati `CID (Content identifiers)' memorizzati in un database distribuito chiamato `DHT (Distributed Hash Table)' che viene condiviso con ogni singolo nodo della rete al fine di facilitare il routing dei dati attraverso essa stessa. @@ -413,10 +416,7 @@ Uno dei problemi di IPFS è che per design stesso, ogni singolo file è visibile \serviceCharacteristics{Nodi della rete}{Protocolli e software lato client}{Decentralizzata simil Blockchain}{Qualsiasi tipo di file binario}{MIT} -\pagebreak -\newpage - -\subsection{PeerTube} +\subsubsection{PeerTube} PeerTube è un servizio di video sharing open source, federalizzato e decentralizzato (lato client), basato su protocolli peer-to-peer come `WebTorrent', `WebRTC' e altre tecnologie web standard. Fa parte del cosiddetto `Fediverse', un insieme di server interconnessi che comunicano tramite ActivityPub, un protocollo di comunicazione aperto per creare reti federate. Inizialmente creato come una piattaforma di video sharing per i creatori di contenuti indipendenti, è stato progettato per essere estensibile e adattabile a qualsiasi tipo di contenuto video che rispetti i termini delle singole istanze che vengono messe a disposizione pubblicamente. @@ -438,10 +438,7 @@ PeerTube è iniziato come progetto indipendente da un singolo sviluppatore che p \caption{Una istanza di PeerTube Italiana.} \end{figure} -\pagebreak -\newpage - -\subsection{Ace Stream} +\subsubsection{Ace Stream} Ace Stream è un software proprietario di video streaming basato su P2P, sviluppato da un gruppo di sviluppatori russi, che permette agli utenti di trasmettere in diretta video e audio, riprodurre file multimediali, e ricevere e condividere contenuti in tempo reale. Il software è stato rilasciato per la prima volta nel 2013 e da allora è stato scaricato più di 100 milioni di volte. Ace Stream offre una vasta gamma di funzionalità che lo rendono popolare tra gli utenti che desiderano guardare contenuti in streaming. Utilizzando la tecnologia P2P, il software consente agli utenti di trasmettere video e audio in tempo reale, senza dover attendere il completamento del download. Questo significa che gli utenti possono godere di una riproduzione fluida e senza interruzioni, anche con connessioni internet più lente. \begin{figure}[htb] @@ -460,15 +457,178 @@ In conclusione, Ace Stream è un software potente e versatile per lo streaming d \serviceCharacteristics{Utenti registrati e non delle singole istanze}{Browser web e server indipendenti}{Federalizzata e decentralizzata P2P}{Video statici e livestream}{AGPLv3+} -\pagebreak -\newpage +\chapter{PeerTube: architettura e tecnologie} -\chapter{PeerTube} +\section{Storia e evoluzione del progetto} -\chapter{Analisi e confronto} +PeerTube è nato nel 2017 come progetto dell'organizzazione non profit francese Framasoft, con l'obiettivo di creare un'alternativa libera e decentralizzata a piattaforme come YouTube. Da allora, ha visto una crescita costante sia in termini di funzionalità che di adozione, con oltre 1000 istanze attive in tutto il mondo nel 2023. + +Le principali tappe evolutive del progetto includono: +\begin{itemize} + \item 2017: Prima versione beta con supporto per video statici + \item 2018: Rilascio della versione 1.0 con supporto per la federazione via ActivityPub + \item 2019: Introduzione del supporto per lo streaming live + \item 2020-2021: Miglioramenti dell'interfaccia utente e del sistema di raccomandazione + \item 2022: Ottimizzazione del protocollo P2P e introduzione di OpenTelemetry per il monitoraggio + \item 2023: Rilascio della versione 6.0 con significative migliorie al sistema P2P +\end{itemize} + +\section{Stack tecnologico} + +\subsection{Architettura generale} + +PeerTube utilizza un'architettura ibrida che combina: +\begin{itemize} + \item Un backend basato su Node.js e TypeScript + \item Un frontend realizzato con Angular + \item Un sistema di storage per i video (locale o distribuito) + \item Un database PostgreSQL per la persistenza dei dati + \item Un sistema di federazione basato su ActivityPub + \item Tecnologie P2P per la distribuzione dei contenuti +\end{itemize} + +\subsection{Streaming video con HLS} + +Per lo streaming video, PeerTube utilizza il protocollo HTTP Live Streaming (HLS), sviluppato da Apple. Questo protocollo: +\begin{itemize} + \item Divide il video in piccoli segmenti (tipicamente di 2-10 secondi) + \item Crea un file manifest (.m3u8) che elenca i segmenti disponibili + \item Permette la selezione automatica della qualità in base alla connessione + \item È compatibile con la maggior parte dei browser e dispositivi moderni +\end{itemize} + +\subsection{P2P Media Loader e WebRTC} + +Il cuore del sistema P2P di PeerTube è costituito da: + +\begin{itemize} + \item \textbf{P2P Media Loader}: Una libreria JavaScript che integra il P2P nel player video + \item \textbf{WebRTC}: Una tecnologia standard per la comunicazione peer-to-peer diretta tra browser + \item \textbf{WebTorrent Tracker}: Utilizzato come sistema di signaling per connettere i peer +\end{itemize} + +\section{Signaling e NAT Traversal} + +Un aspetto critico del sistema P2P è il processo di signaling, che permette ai peer di scoprirsi e connettersi tra loro. PeerTube utilizza: + +\begin{itemize} + \item \textbf{WebTorrent Tracker}: Per la scoperta dei peer che stanno guardando lo stesso contenuto + \item \textbf{Server STUN}: Per facilitare il NAT traversal, permettendo ai peer di stabilire connessioni anche quando si trovano dietro router NAT + \item \textbf{Server TURN} (opzionale): Come fallback quando la connessione diretta non è possibile +\end{itemize} + +\section{Algoritmo di selezione dei peer} + +L'efficienza del sistema P2P dipende in modo cruciale dall'algoritmo utilizzato per selezionare i peer da cui scaricare i dati. PeerTube utilizza un algoritmo simile a quello di BitTorrent, che considera: + +\begin{itemize} + \item \textbf{Disponibilità dei segmenti}: Priorità ai peer che hanno i segmenti richiesti + \item \textbf{Velocità di download}: Preferenza per i peer che offrono migliori prestazioni + \item \textbf{Rarità dei segmenti}: Priorità allo scaricamento dei segmenti meno diffusi nella rete + \item \textbf{Reciprocità}: Tendenza a favorire i peer che a loro volta condividono dati +\end{itemize} + +\section{Sistema di monitoraggio integrato con OpenTelemetry} + +PeerTube integra OpenTelemetry per il monitoraggio delle prestazioni del sistema P2P, raccogliendo metriche come: + +\begin{itemize} + \item \textbf{Percentuale di dati condivisi via P2P} + \item \textbf{Numero di peer connessi} + \item \textbf{Latenza delle connessioni} + \item \textbf{Utilizzo della banda del server} + \item \textbf{Errori e disconnessioni} +\end{itemize} + +Queste metriche possono essere visualizzate attraverso dashboard Grafana o altri sistemi di monitoraggio compatibili con OpenTelemetry. + +\chapter{Verifica empirica delle prestazioni P2P di PeerTube} + +Nel novembre 2023, il team di PeerTube ha pubblicato un articolo in cui sostiene che la loro implementazione P2P può ridurre il carico sul server fino all'80% in condizioni ottimali. L'articolo presenta i risultati di test condotti con diversi numeri di peer e configurazioni. + +Principali affermazioni dell'articolo: +\begin{itemize} + \item Con 10 peer, il carico sul server viene ridotto del 30-50% + \item Con 50 peer, la riduzione raggiunge il 60-70% + \item Con 100+ peer, si può arrivare all'80% di riduzione + \item L'impostazione "High Latency" migliora ulteriormente l'efficienza P2P +\end{itemize} + +Tuttavia, l'articolo non fornisce dettagli sufficienti sulla metodologia utilizzata né rilascia gli strumenti per riprodurre i test in modo indipendente. + +\section{Metodologia per la verifica empirica} + +Per verificare le affermazioni degli sviluppatori di PeerTube, abbiamo deciso di: + +\begin{itemize} + \item Creare un'automazione per riprodurre i test descritti nell'articolo + \item Raccogliere metriche più dettagliate rispetto a quelle presentate nell'articolo originale + \item Analizzare aspetti non considerati, come latenza, qualità dell'esperienza utente e comportamento in condizioni di rete non ideali +\end{itemize} + +\subsection{Stack tecnologico per i test} + +Per i nostri test abbiamo utilizzato: + +\begin{itemize} + \item \textbf{Docker}: Per creare ambienti isolati e facilmente riproducibili + \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{Python}: Come linguaggio principale per l'automazione + \item \textbf{Selenium}: Per simulare browser reali che guardano lo stream + \item \textbf{webrtc-internals-exporter}: Per raccogliere metriche dettagliate sulle connessioni WebRTC + \item \textbf{Hetzner Cloud}: Per distribuire i test su macchine virtuali in diverse regioni geografiche +\end{itemize} + +\subsection{Architettura del sistema di test} + +Il nostro sistema di test è composto da: + +\begin{itemize} + \item Un server centrale che esegue un'istanza di PeerTube e raccoglie le metriche + \item Multiple macchine virtuali distribuite geograficamente che simulano gli spettatori + \item Un sistema di orchestrazione che coordina l'esecuzione dei test + \item Un database centralizzato per la raccolta e l'analisi dei dati +\end{itemize} + +\section{Difficoltà incontrate e soluzioni} + +Durante lo sviluppo del sistema di test abbiamo affrontato diverse sfide: + +\begin{itemize} + \item \textbf{Accesso alle metriche WebRTC}: Risolto sviluppando un'estensione Chrome personalizzata + \item \textbf{Sincronizzazione dei test}: Implementato un sistema di coordinamento basato su messaggi + \item \textbf{Limitazioni delle API di WebRTC}: Superato utilizzando tecniche di scraping avanzate + \item \textbf{Gestione delle variabili d'ambiente nell'estensione Chrome}: Risolto attraverso webpack e sostituzione dinamica +\end{itemize} + +\section{Casi d'uso e scenari di test riprodotti} + +Abbiamo riprodotto i due principali scenari descritti nell'articolo di PeerTube: + +\begin{itemize} + \item \textbf{Live streaming con impostazione Normal Latency}: Il setup standard di PeerTube + \item \textbf{Live streaming con impostazione High Latency}: Una configurazione che privilegia l'efficienza P2P a scapito della latenza +\end{itemize} + +Per ciascuno scenario, abbiamo variato il numero di spettatori (10, 30, 50, 100) e misurato: + +\begin{itemize} + \item Percentuale di dati trasferiti via P2P vs. dal server + \item Latenza media e picchi + \item Utilizzo di CPU e memoria sui client + \item Qualità dell'esperienza utente (buffering, interruzioni) + \item Comportamento in condizioni di rete variabili +\end{itemize} + +\chapter{Analisi dei dati e risultati} + +[Questa sezione sarà completata la prossima settimana con i risultati dei test] \chapter{Conclusioni} +[Questa sezione sarà completata dopo l'analisi dei dati] + \nocite{*} \printbibliography \addcontentsline{toc}{chapter}{Bibliografia}