Por que o Dropbox pode ser super rápido comparado ao FTP?

36

Gostaria de saber por que tecnicamente o Dropbox é muito mais rápido que o FTP? Que tipo de tecnologia ele usa?

Não estou falando de arquivos diff, estou falando de transferir novos arquivos nos dois casos, o Dropbox é muito mais rápido.

Quero dizer, muito mais rápido, talvez 10 vezes mais rápido que o FTP para os arquivos que eu enviei. Vou experimentar novamente para arquivos maiores mais tarde.

Peter Mortensen
fonte
2
Que tamanho, tipo e número de arquivos você carregou? Quanto tempo cada um deles levou para carregar? Para onde você estava carregando os arquivos via FTP? O Dropbox não é mágico, a explicação mais simples é que o servidor FTP que você estava carregando também tem muito menos largura de banda do que a Amazon.
user23307
2
se eles já o tiverem, ele não será reenviado; p
Journeyman Geek
4
Você diz “novos arquivos”, mas, a menos que esses arquivos sejam dados novos e aleatórios, provavelmente está vendo o benefício da sincronização em nível de bloco (como no rsync e em outras ferramentas).
precisa
11
Esta é mais uma comparação de hospedagem, sei que os servidores FTP são mais rápidos que o Dropbox e também uso várias conexões com o Filezilla para que as instruções listadas nestas respostas não sejam válidas.
Tamara Wijsman
O Dropbox usa a desduplicação para economizar espaço de armazenamento de arquivos comuns, portanto, não é necessário carregá-los se já os tiver.
Paradroid

Respostas:

31

Pode haver várias razões para isso.
O protocolo FTP está longe de ser eficiente.

  1. Uma transferência FTP precisa de pelo menos duas conexões (uma para controle e outra para dados) em que o DropBox pode estar usando apenas uma única conexão HTTP. Além disso, a conexão de dados para uma sessão FTP pode ser aberta do servidor para o seu cliente e, se você for NAT, isso poderá falhar, portanto seu cliente FTP poderá estar tentando se conectar dessa maneira, falhando e tentando o contrário.

  2. Há muitas coisas a se fazer em uma conexão FTP. Para enviar um arquivo, o cliente precisa enviar no mínimo dois comandos (um para abrir a conexão de dados e outro para iniciar o envio) e cada vez que precisar aguardar a resposta do servidor, adicionando latência extra. Além dessas duas viagens de ida e volta por arquivo, há várias viagens de resposta de comando para a conexão inicial - uma para enviar o nome de usuário, uma para a senha e pelo menos uma para definir os parâmetros de transferência (para garantir que o servidor seja esperando dados binários, não ASCII). O cliente também pode emitir alguns comandos extras para obter informações do servidor sobre si mesmo. É provável que o Dropbox esteja usando apenas uma solicitação HTTP ou no máximo duas (uma para autenticar e outra para enviar os dados).

  3. Além disso, dependendo do cliente que você está usando para transferências de FTP (que você não especifica, seria uma boa ideia editar sua pergunta para incluir essas informações), pode estar deixando a conexão cair após cada operação de envio e reconectando a próxima Tempo. Não é improvável que o DropBox mantenha uma conexão aberta por um tempo para fins de pesquisa prolongada, para reagir o mais rápido possível aos novos dados disponíveis para download do cliente; portanto, será necessário apresentar um novo Conexão HTTP para enviar um arquivo que não precisará autenticar novamente.

  4. Não é improvável que o cliente DropBox esteja compactando dados antes de enviá-los (para melhorar a velocidade e economizar largura de banda) para onde seu cliente FTP não estará. Portanto, mesmo para arquivos maiores (a menos que estejam pré-compactados ou criptografados), o DropBox e utilitários como esse podem ser mais rápidos do que uma transferência FTP básica por alguma margem.

Para arquivos grandes, os três primeiros pontos acima ficarão insignificantes em comparação com o tempo necessário para transferir os dados, mas o ponto 4 ainda pode ser bastante importante. Para arquivos pequenos, todo o tempo extra de configuração adicionado pelo protocolo FTP pode ser potencialmente duas vezes maior que o tempo necessário para o envio dos dados.

David Spillett
fonte
+1 para a resposta detalhada. Eu também me perguntava como o Dropbox era tão rápido.
Grant Palin
11
Li em algum lugar que os dados da caixa de depósito são criptografados antes da transferência - portanto, faria sentido que eles também (pelo menos um pouco) sejam compactados.
Dean Rather
Um arquivo criptografado não deve ser compressível - Eu não soltar arquivos caixa criptografa durante a transferência de qualquer maneira
Martin Beckett
@mgb: você está certo de que as técnicas de compactação de arquivos não devem encontrar redundância suficiente nos dados criptografados para serem úteis, portanto, o envio inicial de um arquivo resultará em nenhuma ajuda da compactação. Mas se o dropbox já tiver o arquivo e você o tiver atualizado (e a chave ainda for a mesma), é provável que não seja necessário transferir o arquivo inteiro para atualizar a cópia remota. Embora os dados não possam ser compactados, a quantidade que você precisa enviar para mantê-los atualizados ainda pode ser reduzida (consideravelmente para arquivos grandes que veem pequenas atualizações).
David Spillett
11
Tenho certeza de que eles usam HTTPS para transferência (HTTP sobre SSL) em vez de enviar dados em forma simples. Não sei qual criptografia (se houver) é usada para o armazenamento real, mas se seus dados forem confidenciais, você deverá criptografá-lo ao seu lado, para que apenas você tenha uma cópia das chaves relevantes.
David Spillett
15

Como outros já mencionaram, o Dropbox pode pular partes de arquivos que não foram alterados . Mas também, o Dropbox pulará o upload de arquivos se ele já tiver uma cópia no servidor (uma que você ou qualquer outra pessoa já tenha carregado).

Portanto, se você estiver tentando fazer upload de um arquivo idêntico a um arquivo que o Dropbox já possui, o upload será ignorado (e as outras máquinas vinculadas poderão iniciar o download nos servidores do Dropbox). Se você estiver carregando um arquivo quase idêntico a outro arquivo já carregado (não está claro se o arquivo já carregado deve ser 'seu' ou pode ter sido de qualquer usuário), ele enviará apenas partes suficientes do arquivo para recriá-lo no servidor quando combinado com o arquivo que já foi carregado.

O FTP não pode fazer nada disso (é um protocolo simples enviar e receber fluxos de dados sem referência a outros dados disponíveis no lado remoto). Ferramentas como rsync e Unison podem 'pular pedaços que o outro lado já possui', mas geralmente se limitam a comparar pedaços dentro de arquivos em um caminho idêntico na hierarquia sincronizada. O Dropbox parece estender essa idéia a coleções de arquivos (portanto, se você 'enviar' dois arquivos quase idênticos, presumivelmente, ele poderá enviar apenas um mais um 'diff' suficiente para recriar o outro).

Chris Johnsen
fonte
11

Suponho que você queira dizer mais rápido em termos de transferência de arquivos. Quando você salva um arquivo na pasta Dropbox, o Dropbox envia apenas o delta (ou diff) dos dados para o servidor de armazenamento remoto. O FTP (provavelmente) envia o arquivo byte a byte (em vez de apenas enviar as alterações), o que potencialmente leva muito mais tempo para ser transferido pela rede. Da mesma forma, ao sincronizar a partir do servidor remoto, os clientes locais farão o download apenas das alterações.

O recurso de sincronização da LAN também pode potencialmente acelerar as sincronizações e reduzir o tráfego de rede necessário.

sblair
fonte
Na verdade, estou falando de novos arquivos para os dois casos.
0

O Dropbox pode ser mais rápido quando você envia uma quantidade maior de arquivos. O FTP é o mais rápido possível quando falamos de velocidade, mas é preciso muito "diálogo" entre o servidor e o computador cliente para cada arquivo; portanto, o ftp parece mais lento. Se você estiver carregando algum aplicativo de código aberto com milhares de arquivos, é mais conveniente compactar todos os arquivos, carregá-lo via FTP e descompactá-lo no servidor.

Greenleader
fonte
0

Eu acho que eles usam técnicas simples de hash semelhantes ao md5 / sha

Sempre que você solta um arquivo dentro da "caixa de depósito" local, o cliente da caixa de depósito calcula o hash desse arquivo e deve enviar alguns dados extras, como tamanho do arquivo, nome do arquivo para o servidor da caixa de depósito.

Se o servidor da caixa de depósito encontrar arquivos semelhantes (eles devem manter o índice de hashes e dados do arquivo no servidor), ele simplesmente informará ao cliente que o arquivo foi "carregado" com êxito. ;-)

Dessa forma, você acaba "carregando" o arquivo apenas logicamente. Como não há transferência real de conteúdo de arquivo, isso deve ser mais rápido do que qualquer outra coisa.

Não tenho certeza de qual dropbox do algoritmo de hash usa, mas tenho 100% de certeza de que o princípio de funcionamento é semelhante ao descrito acima.

rahul286
fonte
0

Embora o Dropbox esteja usando outros serviços, eles historicamente usam o Amazon AWS (Amazon Web Services). Parece que sua transferência da origem para o destino tem um tubo de transferência muito grande. Na minha experiência, o Dropbox está usando um destino que pode aceitar grandes quantidades de dados de uma só vez. O Dropbox também distribui o upload para diferentes endereços IP. O site para o qual você está enviando o FTP provavelmente possui um canal de transferência muito menor e não tem a capacidade de distribuir envios com a mesma eficiência.

Se você executar o Monitor de Recursos (resmon) e for para a guia Rede, notará os diferentes processos usando a largura de banda da rede.

  • Em Processos com atividade de rede, selecione a coluna para Total (B/sec)
  • Em Conexões TCP, selecione a coluna para Total (B/sec)

Para mim, quando carrego um arquivo no Dropbox, ele usa 4 conexões para enviar 4 endereços IP diferentes.

insira a descrição da imagem aqui

Dom
fonte