Il passaggio da un CVCS a un DVCS comporta un notevole risparmio di larghezza di banda?

5

Quindi, sono in una grande azienda geograficamente distribuita, usiamo perforce e sto iniziando a creare il caso di un DVCS con un whitepaper che mi è stato richiesto di scrivere.

Stavo pensando che uno degli argomenti che potrei usare è la larghezza di banda salvata usando un DVCS, e tecnicamente se c'erano dei binari da scaricare (ci sono, ma non sono sincronizzati ogni giorno) e abbastanza sviluppatori che li scaricano si potrebbe vedere una differenza sostanziale. Sfortunatamente questo è un caso limite e tutto ciò a cui posso pensare (a parte i singoli sviluppatori che sono in grado di lavorare più velocemente quando diff, impegnano localmente e tutti gli altri vantaggi del DVCS).

Quindi ci sarebbe un notevole risparmio di larghezza di banda notevole ?, in quali altri casi? . Cookie gratuito per chiunque abbia una prova empirica effettiva (conferma o confutazione).

Modifica: è solo uno degli argomenti che sto cercando di supportare e non è affatto il principale, ne ho presi almeno altri 10 ... questo è uno dei "lati" -benefits "ma voglio scoprire quanto sia reale. Inoltre, voglio conquistare i ragazzi IT =)

    
posta dukeofgaming 11.03.2012 - 06:32
fonte

2 risposte

11

Questa è una domanda interessante. Prima dell'analisi, dirò che il risparmio di larghezza di banda non dovrebbe essere il motivo per cui si passa a un DVCS. Tuttavia, un punto correlato è il carico sul server e questo naturalmente andrà giù con un DVCS: le persone semplicemente non usano il server come spesso. Quando lo usano, lo usano per cose "semplici" come push / pull. Operazioni pesanti come annotate e grep vengono eseguite sul client.

Possiamo esaminare l'utilizzo della larghezza di banda guardando un esempio in cui un DVCS funziona in modo particolarmente scadente: un esempio con un file immagine. Il setup è così:

  • aggiungi un'immagine da 10 MB al tuo progetto. Poiché si tratta di un formato di file compresso, non è possibile comprimerlo ulteriormente e la versione iniziale occupa 10 MB nel repository.

  • Apporta 9 modifiche all'immagine. La compressione delta è spesso inutile per i formati compressi, quindi ogni nuova revisione occupa altri 10 MB nel repository.

  • La dimensione del repository è ora di 100 MB.

Ora possiamo confrontare la larghezza di banda utilizzata con un sistema centralizzato e un sistema decentralizzato. Sono uno sviluppatore Mercurial quindi userò Mercurial come esempio di DVCS (ma Git funziona allo stesso modo). Userò Subversion come sistema di controllo della versione centralizzato (CVCS):

  • Invio di una nuova revisione al server: hg commit; hg push rispetto a svn commit .

    La larghezza di banda è la stessa poiché è necessario inviare un delta da 10 MB al server in entrambi i casi.

  • Nuova versione dal server: hg pull --update rispetto a svn update .

    Un CVCS ti consente di scaricare i 10 MB necessari mentre un DVCS ti chiederà di scaricare le revisioni intermedie che ti mancano. Quindi il fabbisogno di larghezza di banda dipende dalla frequenza di aggiornamento:

    • Se si esegue una collaborazione stretta e quindi si aggiornano spesso, si finisce con il requisito stessa larghezza di banda .

    • Se aggiorni meno spesso, un DVCS utilizzerà più larghezza di banda .

  • Pagamento fresco : hg clone rispetto a svn checkout .t

    Simile al caso precedente, ma con aggiornamenti molto rari. Quindi un DVCS scarica più dati di un sistema centralizzato.

  • Aggiornamento alla versione precedente: hg update vs svn update

    Un DVCS richiede nessuna larghezza di banda qui, ma uno strumento centralizzato scaricherà 10 MB . A seconda del tuo flusso di lavoro, potresti farlo parecchio durante la ricerca di bug e quindi puoi avere notevoli risparmi qui.

Penso che i requisiti possano essere riassunti come segue: paghi un costo iniziale più ampio con un DVCS poiché scarichi tutto. Quando viene pagato quel costo, gli aggiornamenti alle vecchie revisioni sono gratuiti . Gli aggiornamenti alle nuove revisioni costano all'incirca come con uno strumento centralizzato, supponendo che si aggiorni frequentemente in entrambi i casi. L'invio di commit al server è uguale nei due sistemi.

Questo esempio mostra che esiste un sovraccarico associato a un DVCS. Tuttavia, in pratica il overhead è gestibile . Per il codice sorgente, la compressione delta si attiva e fa miracoli a mantenere basse le dimensioni del tuo repository.

Un esempio di Mercurial:

  • Il nostro file sorgente più grande ( mercurial/commands.py ) è un file Python da 200 KB. Dal momento che è un testo semplice, la versione iniziale può essere compressa a circa 50 KB all'interno del repository.

  • Abbiamo modificato il file circa 2200 volte nei prossimi cinque anni. La compressione delta indica che ogni modifica occupa circa 630 byte nel repository.

  • La dimensione totale nel repository è 1,4 MB.

Poiché per quel file (probabilmente il nostro file più usato) ha senso semplicemente scaricare tutte le revisioni 2200 in anticipo - è solo un altro 1,4 MB da scaricare! Quindi il sovraccarico è estremamente basso per i file di testo e questo è fondamentalmente il motivo per cui DVCS può anche essere considerato in primo luogo.

Ho anche guardato a OpenOffice. La copia di lavoro per un checkout di tip è 2.0 GB. Hanno 276.000 changeset nel loro repository e l'intera storia occupa 2.3 GB. Questo è un overhead 15% grazie all'eccellente compressione delta. L'overhead per un checkout iniziale sarà maggiore poiché un CVCS potrebbe comprimere i 2.0 GB fino a circa 500 MB. Ma risparmiano la larghezza di banda ogni volta che qualcuno deve eseguire il checkout di una vecchia revisione per correggere un bug - con un DVCS hai già i dati esattamente dove ne hai bisogno.

Infine, vorrei menzionare che Mercurial ha una estensione largefiles per la gestione di file che occupano troppo spazio nel repository . Funziona esternalizzandoli in modo che vengano scaricati solo quando necessario. Ciò trasforma efficacemente Mercurial in un CVCS rispetto a quei file.

    
risposta data 11.03.2012 - 11:29
fonte
4

Sto scrivendo il mio white paper sulla mia esperienza con la conversione da SVN a Git come ho menzionato nei commenti.

Ecco come ho conquistato i nostri ragazzi IT. Non ho i numeri esatti a portata di mano, ma la VM contenente il repository SVN per il nostro progetto era di circa 12-14 GB di utilizzo. Quando si è arrivati a un checkout effettivo, era vicino a 4,06GB scendendo. Quando l'ho sperimentato il mio primo giorno, ho deciso di essere il primo a spostarmi da SVN il più rapidamente possibile.

La prima popolazione del nostro repository è risultata di circa 1,3 gb - una volta ottimizzato il file .gitignore , abbiamo ridotto ulteriormente le dimensioni del repository. Ero deciso a rendere il repository il più snello possibile, quindi con alcune analisi, siamo finiti a 346mb.

Ho ricevuto una nuova workstation ieri e, proprio come il mio primo giorno, ho dovuto clonare il repository. Il download del repo è stato estremamente veloce con la compressione attivata e ha impiegato circa 9 minuti.

Ho esitato nel postare inizialmente questa risposta come risposta, in quanto il tuo chilometraggio potrebbe variare in modo significativo - i miei predecessori potrebbero avere impostato SVN in modo insufficiente per tutto ciò che so. Penso che potresti (e dovresti) configurare un ambiente di prova e provare la conversione per vedere che tipo di metriche realizzerai e pubblicarle nel tuo foglio.

Su base più giornaliera, ho un sacco di configurazioni di hook per automatizzare il pull tra alcuni server diversi, ma sicuramente non abbastanza attività remote per monitorare l'utilizzo della larghezza di banda su base giornaliera. È molto difficile dire senza ulteriori dettagli se ti renderai conto di un vantaggio.

    
risposta data 11.03.2012 - 07:14
fonte

Leggi altre domande sui tag