Qual é a melhor maneira de transferir um único arquivo grande por um link WAN de alta velocidade e alta latência?

21

Parece relacionado a este , mas é um pouco diferente.

Há esse link WAN entre dois sites da empresa e precisamos transferir um único arquivo muito grande (despejo do Oracle, ~ 160 GB).

Temos largura de banda total de 100 Mbps (testada), mas parece que uma única conexão TCP não pode ser maximizada devido a como o TCP funciona (ACKs, etc.). Testamos o link com o iperf , e os resultados mudam drasticamente ao aumentar o tamanho da janela TCP: com as configurações básicas, obtemos uma taxa de transferência de ~ 5 Mbps, com um WS maior podemos obter até 45 Mbps, mas não mais do que isso. A latência da rede é de cerca de 10 ms.

Por curiosidade, rodamos o iperf usando mais de uma conexão única e descobrimos que, ao executar quatro delas, elas realmente alcançariam uma velocidade de ~ 25 Mbps cada, preenchendo toda a largura de banda disponível; portanto, a chave parece estar na execução de várias transferências simultâneas.

Com o FTP, as coisas pioram: mesmo com configurações TCP otimizadas (tamanho da janela alto, MTU máx. Etc.), não podemos obter mais de 20 Mbps em uma única transferência. Tentamos fazer o FTP de alguns arquivos grandes ao mesmo tempo e, de fato, as coisas ficaram muito melhores do que ao transferir um único; mas o culpado se tornou a E / S do disco, porque a leitura e gravação de quatro arquivos grandes dos mesmos gargalos do disco muito em breve; Além disso, parece que não conseguimos dividir esse único arquivo grande em arquivos menores e, em seguida, mesclá-lo novamente, pelo menos em horários aceitáveis ​​(obviamente, não podemos gastar splicing / mesclando o arquivo em um tempo comparável ao de transferência).

A solução ideal aqui seria uma ferramenta multithread que pudesse transferir vários pedaços do arquivo ao mesmo tempo; programas semelhantes ao eMule ou BitTorrent já fazem, mas de uma única fonte para um único destino. Idealmente, a ferramenta nos permitiria escolher quantas conexões paralelas usar e, é claro, otimizar a E / S do disco para não pular (muito) loucamente entre várias seções do arquivo.

Alguém conhece essa ferramenta?

Ou alguém pode sugerir uma solução melhor e / ou algo que já não tentamos?

PS: Já pensamos em fazer o backup em fita / disco e enviá-lo fisicamente ao destino; essa seria nossa medida extrema se a WAN simplesmente não resolver, mas, como AS Tanenbaum disse: "Nunca subestime a largura de banda de uma caminhonete cheia de fitas rolando pela estrada".

Massimo
fonte
1
Por curiosidade, o tempo que leva é realmente tão crítico? Além disso, a saturação do link durante a transferência de 160Gb não afetaria o resto da sua rede?
11119 Bryan
6
Lembro-me de entregar alguns carregadores automáticos DLT e algumas centenas de cartuchos a um cliente em 99. Calculamos a capacidade bruta do meu carro com cerca de 200 cartuchos DLT IV carregados (capacidade bruta de 35 GB cada) em cerca de 6,3 TB. Eu dirigi do nosso escritório para o local do Cliente em cerca de 55 minutos, dando ao mecanismo de transporte de backup "Evan em um Geo Metro dirigindo como um louco pela Interestadual" uma taxa de transferência efetiva de cerca de 118 GB / min. Bom rendimento, mas a latência foi um assassino ...> smile <
Evan Anderson
Bryan: sim, o tempo é crítico (leva cerca de vinte horas com FTP padrão e configurações de rede padrão) e não, não haverá problema em saturar o link, porque a transferência será agendada em horário fora do trabalho.
Massimo
Evan: isso é exatamente o que eu quis dizer ;-)
Massimo
Estou lidando com uma situação semelhante, com ~ 200 GB de SQL .bak, exceto que a única maneira de conseguir saturar o link da WAN é com o FTP. Acabei usando 7-zip com compactação zero para dividi-lo em pedaços de 512 MB. Os tempos de "compressão" e "descompressão" foram consideravelmente curtos; tudo muito melhor do que vasculhar a mídia física em todo o país. (Os sites estão em costas opostas dos EUA)
Adrien

Respostas:

15

A busca por "transferência de arquivos de alta latência" traz muitos hits interessantes. Claramente, esse é um problema que tanto a comunidade CompSci quanto a comunidade comercial colocaram.

Algumas ofertas comerciais que parecem se encaixar na conta:

  • O FileCatalyst possui produtos que podem transmitir dados por redes de alta latência usando UDP ou vários fluxos TCP. Eles também têm muitos outros recursos (compactação dinâmica, transferências delta etc.).

  • A "tecnologia" fasp de transferência de arquivos da Aspera também parece ser adequada para o que você procura.

No mundo do código aberto, o projeto uftp parece promissor. Você não precisa particularmente dos recursos de multicast, mas da idéia básica de enviar um arquivo para os receptores, receber NAKs por blocos perdidos no final da transferência e depois explodir os blocos NAK (ensaboar, enxaguar, repetir) Parece que faria o que você precisa, pois não há ACK'ing (ou NAK'ing) do receptor até que a transferência do arquivo seja concluída uma vez. Supondo que a rede seja apenas latente e sem perdas, isso também pode fazer o que você precisa.

Evan Anderson
fonte
uftp parece realmente promissor, consegui atingir 30 Mbps entre dois computadores desktop (que definitivamente não são tão bons em desempenho de disco); Vou testá-lo nos servidores "reais" em breve. Não consegui obter uma licença de demonstração do FileCatalyst devido a algum bug no formulário de registro (continua dizendo que o número da solicitação já foi usado) e o fasp simplesmente não os oferece.
Massimo
60 Mbps entre dois computadores com discos adequados e um grande buffer de recebimento. Ótimo!
Massimo
Eu amo software livre / de código aberto! > smile <Definitivamente vou tentar o uftp com algumas coisas que estou fazendo. Estou imaginando como seria uma solução de imagem em disco multicast baseada em Linux que eu montei há alguns anos usando o "udpcast".
Evan Anderson
Há algum tempo, perguntei a serverfault.com/questions/173358/multicast-file-transfers Eventualmente, cheguei à conclusão de que o uftp e o mrsync eram as ferramentas de escolha. Por favor, poste nos comentários por lá se você fizer algo útil com o uftp, pois usarei um ou outro novamente este ano (preparação para uma conferência).
precisa
2
Quando eu estava trabalhando com UFTP, UDT e Tsunami UDP, a UFTP teve o pior desempenho dos três. Claro, é provavelmente o protocolo mais maduro. A UDT fornece apenas um protocolo de transferência simples e foi projetada para funcionar como uma biblioteca para desenvolver software personalizado e o autor do Tsunami realmente nos apontou para a UDT, pois o Tsunami não foi desenvolvido ativamente recentemente devido à falta de tempo.
Thomas Owens
9

Sugestão realmente estranha: configure um servidor Web simples para hospedar o arquivo na sua rede (sugiro o nginx, aliás), depois configure um PC com o Firefox na outra extremidade e instale a extensão DownThemAll .

É um acelerador de download que suporta chunking e remontagem.
Você pode dividir cada download em 10 blocos para remontagem, e isso realmente torna as coisas mais rápidas!

(ressalva: eu nunca tentei em algo tão grande quanto 160 GB, mas funciona bem com arquivos iso de 20 GB)

Tom O'Connor
fonte
40 Mbps entre os mesmos computadores. Parece muito bom também.
Massimo
1
substitua o firefox por axel.alioth.debian.org e não é uma sugestão tão ruim assim.
Justin
7

O transporte UDT é provavelmente o transporte mais popular para comunicações de alta latência. Isso leva ao outro software chamado Setor / Esfera, um "Sistema de Arquivos Distribuídos de Alto Desempenho e um Mecanismo de Processamento de Dados Paralelo", que vale a pena dar uma olhada.

Steve-o
fonte
1
Eu trabalhei com a UDT para transferências através de redes com alta latência e alta perda de pacotes. O UDT é muito mais resiliente à latência e à perda de pacotes do que os protocolos baseados em TCP, especialmente quando você muda o algoritmo de controle de congestionamento para se adequar à sua topografia de rede.
Thomas Owens
Existe ainda uma versão do rsync com o UDT incorporado, chamado "UDR". github.com/LabAdvComp/UDR
Max
5

Minha resposta está um pouco atrasada, mas acabei de encontrar esta pergunta, enquanto procurava por fasp. Durante essa pesquisa, também encontrei o seguinte: http://tsunami-udp.sourceforge.net/ , o "Tsunami UDP Protocol".

No site deles:

Um protocolo rápido de transferência de arquivos no espaço do usuário que usa dados de controle TCP e UDP para transferência em redes de longa distância muito alta velocidade (≥ 1 Gbps e até 10 GE), projetado para fornecer mais taxa de transferência possível com o TCP nas mesmas redes. redes.

Quanto à velocidade, a página menciona esse resultado (usando um link entre Helsinque, Finlândia e Bonn, Alemanha, através de um link de 1 GBit:

Figura 1 - transferência internacional pela Internet, com média de 800 Mbit / segundo

Se você deseja usar um acelerador de download, dê uma olhada no lftp, este é o único acelerador de download que pode fazer um espelho recursivo, tanto quanto eu sei.

Jan van Haarst
fonte
1
No projeto que comentei anteriormente na resposta de Steve-o, comparamos a UDT, o Tsunami UDP e a UFTP. Descobrimos que a latência teve um enorme impacto no desempenho, enquanto a perda de pacotes não teve (ao contrário da documentação do Tsunami). A adição de 100ms de latência à rede de teste reduziu o desempenho do Tsunami de cerca de 250Mbits / segundo para cerca de 50Mbits / segundo (acredito que tenho meus números e unidades corretos - já faz um tempo, mas foi uma queda enorme). A adição de 10% de perda de pacotes, sem uma rede de latência mínima, por outro lado, reduziu apenas o desempenho de 250 Mbits / segundo para cerca de 90 Mbits / segundo.
Thomas Owens
4

O utilitário bbcp da página muito relevante 'Como transferir grandes quantidades de dados via rede' parece ser a solução mais simples.

Robert Polson
fonte
Eu não acho que o bbcp seja otimizado para alta latência. Estou recebendo ~ 20 MB / s em um link transatlântico no momento com as configurações padrão.
Max