Translation(s): English - Italiano


Questa pagina è pensata per raccogliere informazioni, idee e commenti relativi all'aggiunta ad Apt della funzionalità BitTorrent per lo scaricamento dei file di pacchetto.

Altre pagine:

Motivazione

I benefici di questo progetto sono chiari, sia per il progetto Debian che per i suoi mirror, così come per ogni altro sviluppatore che voglia fare da host per un archivio popolare, ma che si preoccupi dei costi della banda. Una volta che il servizio sarà completato e adottato su larga scala, i costi di banda e hardware relativi al fornire un archivio Debian molto vasto a centinaia di migliaia di utenti saranno drammaticamente ridotti.

Questi costi vengono attualmente ridotti dal sistema dei mirror volontari che Debian usa per aiutarsi nella distribuzione dei pacchetti. Questo sistema ha però alcuni lati negativi, specialmente con l'aumentare della dimensione dell'archivio. Alcuni mirror stanno già soffrendo il peso della dimensione, e ciò ha portato alla creazione di mirror parziali. Questo crea anche molti punti centrali di errore per gli utenti, dato che la maggior parte dipende da un singolo mirror e non viene fatto un buon lavoro di distribuzione eguale del carico, dato che alcuni mirror possono essere scelti più frequentemente di altri. Da ultimo, i mirror non primari possono essere lenti nell'aggiornarsi alle nuove versioni dei pacchetti e i cambiamenti avvengono lentamente dato che gli elenchi delle fonti devono essere aggiornati manualmente dagli utenti.

Tuttavia, usando un sistema in stile BitTorrent, questi mirror volontari potrebbero semplicemente unirsi all'insieme dei peer per l'archivio, facendo da mirror solo per la quantità di dati che desiderano e contribuendo solo con la quantità di banda che preferiscono; in questo fornirebbero dati ridondanti multipli con un carico che verrebbe automaticamente bilanciato dal sistema e userebbero la banda risparmiata per aggiornare i loro pacchetti più spesso. Questo inoltre permettere un ulteriore crescita futura, sia in termini di dimensioni dell'archivio sia nella popolarità di Debian.

Storia e lavori correlati

Questo è stato originariamente proposto e accettato come un progetto Google Summer of Code nel 2006. Sfortunatamente il progetto non ha avuto successo a causa dei tempi ristretti e alla complessità del progetto, ma ne sono scaturite alcune buone idee.

Un progetto simile è stato accettato per il Google Summer of Code del 2007 e il codice risultante può essere trovato qui.

Un programma simile per l'idea di base a questo, apt-torrent, è stato creato da Arnaud Kyheng ed è disponibile online: http://sianka.free.fr/. apt-torrent è diverso per il fatto che non fa alcun cambiamento al protocollo BitTorrent, ma fornisce piuttosto un wrapper per il pacchetto BitTornado che viene quindi usato per scaricare i file di pacchetto.

Un altro protocollo derivato da BitTorrent è gittorrent. Certamente si è discusso dei modi di usare gittorrent per ottenere gli stessi risultati suggeriti da questa proposta, ma è probabilmente una buona idea che entrambi gli sforzi procedano in parallelo.

Problemi

Benché l'idea di implementare una soluzione in stile BitTorrent per la distribuzione dei pacchetti sembri buona, ci sono alcuni problemi con il modo attuale in cui BitTorrent distribuisce i file e che lo rendono inadatto per un archivio Debian. Queste limitazione degli attuali sistemi BitTorrent quasi certamente richiederanno modifiche per migliorare il client e il protocollo. Il progetto Google SoC 2006 aveva identificato alcune di queste preoccupazioni e da allora se ne sono aggiunte altre (se si conoscono altri problemi, aggiungerli qui di seguito).

Il protocollo

Dettagli dell'implementazione

La soluzione

Ecco alcuni dettagli su come i problemi elencati prima sono risolti nell'attuale implementazione del programma DebTorrent.

Soluzioni del protocollo

  • a lot of packages are too small:

    • pieces could be made a variable size, so that a piece could be for a single small package, even if the package size is very small.
  • there are too many packages to create individual torrents for each and the archive is too large to track efficiently as a single torrent:

    • create a torrent for each Packages file, or 2 if the Architecture:all packages are split out.

    • create a torrent representing subdirectories: map the concept of a hierarchical filesystem on top of torrents.
  • all downloaders of a package need to be aware of all other downloaders:

    • keep torrent boundaries consistent so that users in a torrent are only interested in users in the same torrent
  • the archive is frequently updated:

    • This issue is common to all update methods - ftp, http, rsync, debtorrent, and is being solved in a manner common to all update methods, by debian. Package update diffs are now generated on a daily basis. -- lkml
      • The frequently updated archive problem that debtorrent has is not the same. Since all files must be gathered together into a large torrent file, every time the archive is updated so will the torrent. This is not ideal. Updates to Packages.gz files with diffs are an unrelated issue. -- CameronDale

Implementation Solutions

Full Proposal

Here are the details of how the DebTorrent program solves the problems above.

Implementation Steps

The initial implementation steps proceeded in this order:

  1. Version 0.1.0: Implement a single variable size piece for each package and add parsing of current Packages files so they can be used unmodified as torrent files.
  2. Version 0.1.1: Use data from dpkg-status to determine which packages/pieces to download.
  3. Version 0.1.2: Implement proxy functionality to receive input from apt about which packages to download, break up large packages into multiple pieces, and download rare pieces using a backup HTTP downloader.
  4. Version 0.1.3: Automate the process to run as a daemon started from /etc/init.d, and package the program as a debian binary package.

Future steps could then be:

Pros

Cons