Distribuição centralizada / sincronização de conjuntos de arquivos grandes através da rede local

1

Mesmo sabendo que versões desta pergunta foram feitas a googol várias vezes, vou tentar não repeti-los.

Eu tenho muitos conjuntos de muitos arquivos (alguns arquivos são pequenos, mas alguns são grandes, como ~ 10 a 20GB). Eu tenho vários servidores, cada um pode hospedar um ou mais desses conjuntos de arquivos. É claro que um servidor pode hospedar 50% do número total de conjuntos e outros 50% podem hospedar outro número de conjuntos.

Você pode pensar em definir a partir da coleção de grandes arquivos de mídia, bibliotecas de imagens realmente grandes, aplicativos completos, o que realmente não importa, contanto que existam arquivos grandes no conjunto .

O servidor pode atualizar sua cópia do conjunto a qualquer momento (seja substituindo arquivos no conjunto por arquivos completamente novos ou aplicando patches em alguns arquivos, o que resultaria em ter quase os mesmos arquivos com pequenas diferenças) .

Por outro lado, eu tenho muitos clientes, que devem ser capazes de obter qualquer conjunto (ou vários conjuntos) de servidores, e manter suas cópias de conjuntos atualizados (sincronizados) com conjuntos no servidor, sempre Ninguém quer usar o conjunto.

As ferramentas que considero seguem:

  • rsync - É ótimo para sincronizar muitos arquivos de pequeno a médio porte, mas não é tão ideal ao sincronizar arquivos grandes, pois usa um algoritmo que lê arquivos inteiros em ambos os lados para determinar se o arquivo deve ser copiado ou não. Está tudo bem quando o arquivo deve ser copiado pela primeira vez, ou quando o arquivo é completamente alterado, mas não tão bem, quando, digamos, apenas 1% do arquivo de 10GB é alterado.
  • SVN - É ótimo quando se trata de encontrar diferenças e transferir apenas esses deltas, mas não tenho certeza de como é ótimo quando se trata de uso de disco (o conjunto inteiro será duas vezes maior em cliente e servidor, uma vez que uma vez definido é armazenado no repositório?).
  • Torrent - Este pode ser viável, em termos de distribuição. Por exemplo, crie um torrent para cada conjunto no servidor, comece a propagá-lo para lá e os clientes que receberem esses conjuntos também continuarão a propagar para outros clientes, distribuindo assim a carga em todos os computadores que contêm cópia do conjunto. No entanto, não tenho certeza se seria capaz de distribuir as diferenças de alguma forma, uma vez definido no servidor é alterado ... Seria necessário a criação de nova torrent para cada alteração? Além disso, eu não sei como o torrent se comportaria na rede local, em termos de velocidade (ele poderia transferir arquivos entre um servidor e um cliente no máximo, velocidade limitada pela rede ou adicionar alguma sobrecarga de protocolo séria? congestão de rede?)
  • Solução personalizada. Bem, não há muito a acrescentar aqui, mas é muito provável que ele esteja reinventando a roda e que algumas soluções existentes provavelmente atendem às minhas necessidades, se eu soubesse disso.

Então, a questão é: qual método de distribuição / sincronização (utilitários, abordagem) seria mais adequado para minha situação?

    
por mr.b 21.10.2010 / 23:34

1 resposta

1

Fora das soluções que você listou, o SVN parece ser o mais promissor. Você precisará armazenar pelo menos uma cópia do conjunto no repositório para usar até 2x o espaço (ou 3x, se você tiver 2 cópias de trabalho).

Hoje em dia, o espaço no disco rígido é (geralmente) barato, então não acho que os requisitos de espaço seriam um fardo muito grande, especialmente se comparado à tentativa de criar sua própria solução personalizada.

Você também pode querer examinar o MS Sync Framework , que é usado pelo SyncToy .

    
por 22.10.2010 / 01:07