Como é que os sistemas de backup remotos podem ser tão rápidos?
Há uns anos, quando começaram a aparecer os primeiros sistemas de backup online, ou seja, sistemas que mantêm uma cópia de parte do nosso disco rígido num servidor algures na Internet, eu fiquei um pouco céptico sobre a viabilidade deste modelo. Isto era numa altura em que a banda larga ainda não estava generalizada, em que era normal esperar-se uns largos segundos que os sites aparecessem no browser, em que as imagens eram uma dor de cabeça para descarregar. Eu só pensava quanto tempo não demoraria para fazer upload do meu arquivo de Outlook que tem cerca de 1 Gb (e não nos esqueçamos que a taxa de upload – taxa com que a informação é enviada a partir do nosso computador – costuma ser bastante inferior à taxa de download – informação recebida – na nossas ligações caseiras). Nessa altura, confesso que nem experimentei.
Com a massificação da banda larga, a coisa parecia mais promissora e cheguei a utilizar uns quantos serviços para backups online gratuitos, incluindo o famoso Mozy, mas a verdade é que, para quantidades de informação acima dos 100 Mb, o sistema era lento. Lento, no sentido em que tinha que correr durante a noite ou (com sorte) durante a hora de almoço. Acho que nos habituámos um bocado a isso, parecia uma coisa inevitável – se estamos a enviar informação para um servidor algures no mundo através da Internet, que ainda por cima é de borla, não podemos pedir mais.
Avançando um bocadinho mais no tempo, os discos externos passaram a ser tão estupidamente baratos e tão estupidamente mais rápidos que os Mozy’s e afins, que deixou de fazer sentido deixar o portátil ligado todas as noites só para fazer o seu “backupzinho”. Um gajo liga o disco externo no fim do dia, sincroniza os ficheiros com um desses softwares de sincronização que há para aí (normalmente estes discos externos trazem um) e em poucos minutos está feito.
Recentemente, e dado o burburinho à volta do assunto, resolvi experimentar o dropbox. O dropbox não é simplesmente um sistema de backup (é um sistema de partilha de ficheiros entre vários computadores) mas, para efeitos deste artigo, é assim que eu o vejo. Um sistema de backup muito rápido. Muito mais rápido do que eu imaginei que fosse possível, mesmo tendo ligação de banda larga. A grande vantagem que tem sido apontada ao dropbox é sua facilidade de utilização – aquilo instala uma pasta especial no computador chamada “my dropbox” e a gente só tem que arrastar para lá os ficheiros que queremos fazer backup. Mal a gente larga lá o ficheiro, ele começa logo a enviá-lo para o servidor da dropbox. Tão ou mais interessante que a facilidade de utilização é que esse envio pode, dependendo do ficheiro, ser estupidamente rápido. Tipo, já larguei lá pdfs com 10 Mb que são “consumido” em poucos segundos.
Como gosto de perceber como é que estas coisas funcionam, tenho lido alguns artigos sobre este problema e percebi que, de facto, não só é possível que estes sistemas sejam rápidos a fazer upload dos ficheiros como é perfeitamente possível que brevemente estes sistemas venham a ser mais rápidos do que backups para discos externos USB.
Sem entrar em detalhes demasiado técnicos, eis as técnicas que se têm vindo a adoptar para este tipo de sistemas:
1. O envio de deltas em vez do ficheiro completo – Esta técnica consiste em enviar o ficheiro inteiro da primeira vez, mas posteriores alterações ao ficheiro não enviam novamente o ficheiro inteiro, enviam apenas o que mudou (o chamado delta). Por exemplo, imaginem um ficheiro word com 3 Mb ao qual acrescentámos apenas um parágrafo, aumentando o seu tamanho em 100 Kb. Um bom sistema de backup apenas envia esses 100 kb.
2. Comprimir os ficheiros ou deltas antes de enviar – Esta é mais ou menos óbvia. Para certos tipos de ficheiros podem-se obter ganhos assinaláveis, mas para ficheiros já por si comprimidos (por exemplo os mp3) as taxas de compressão não são grande coisa.
Estass duas técnicas são aquelas que, “oficialmente”, o dropbox assume utilizar:
Dropbox tries to be as smart as possible about uploading for the best possible performance. Before transferring a file, we compare the new file to the previous version and only send the piece of the file that changed. This is called a “binary diff” and works on any file type. Dropbox compresses files before transferring them as well. You also never have to worry about Dropbox reuploading a file – it’s smart about this, too. (from http://www.getdropbox.com/help/8)
No entanto, existem técnicas um pouco mais avançadas. Por exemplo, um artigo de 2001 intitulado “Low Bandwidth File System” diz o seguinte:
LBFS is a network file system which conserves communication bandwidth between clients and servers. It takes advantage of cross-file similarities. When transferring a file between the client and server, LBFS identifies chunks of data that the recipient already has in other files and avoids transmitting the redundant data over the network.
Para os meus leitores com um background mais técnico, posso adiantar que este sistema usa funções de hash (SHA-1) que aplica a blocos entre 2Kb e 8Kb no qual divide os ficheiros a enviar. Estas divisões são feitas cuidadosamente de forma a garantir que alterações pequenas nos ficheiros apenas afectam um destes blocos. Basicamente, na altura do upload, o ficheiro é dividido nestes blocos e é calculado o hash de cada um deles (o hash, também conhecido por resumo, é uma string bastanter pequena produzida por uma função matemática quando aplicada um conjunto arbitrário de dados – teoricamente é altamente improvável dois conjuntos diferentes de informação produzirem o mesmo resumo). Aquilo que é enviado ao servidor são apenas os hash’s dos ficheiros. O servidor guarda os tais blocos e os respectivos hashes. Se os hashes que o cliente envia já estiverem no servidor, quer dizer que ele já lá tem o bloco correspondente e por isso não é necessário enviar. Se não estiverem, então o cliente envia apenas essas blocos.
O mais interessante neste sistema é que dois ficheiros diferentes podem, por coincidência (ou não), ter alguns destes blocos em comum. Se pensarmos na quantidade de documentos que produzimos com base no copy&paste de outros documentos, é normal que assim aconteça. Foram feitos alguns estudos que comprovam esta teoria: os ficheiros do nosso disco têm muito mais em comum entre eles do que nós imaginamos. Isso quer dizer, utilizando esta técnica, quantos mais ficheiros tivermos em backup, mais rápido vai ser fazer upload de novos ficheiros. Mas podemos levar isto mais longe – até que ponto os meus ficheiros não são similares (senão mesmo iguais) a ficheiros de outros utilizadores? Certamente alguns pdf’s que fiz download da Internet ou mp3’s são exactamente os mesmos que os de outros utilizadores. Nesse caso, o tal esquema de hashing irá funcionar na perfeição. E isso explica porque é que o tal pdf de 10Mb que larguei no “my dropbox” foi consumido em poucos segundos. Se calhar, a única coisa que passou na rede foram hashes, porque outro utilizador algures no mundo já fez upload do mesmo ficheiro ou de um muito semelhante.
E isto explica a minha arrojada convicção – se muita gente utilizar o dropbox (ou outro sistema de backup online), pode-se chegar a um ponto em que a probabilidade de haver, algures naquele espaço imenso, um ficheiro muito parecido ou igual àquele que estou a fazer upload é enorme. E mesmo que a largura de banda de um disco externo seja 100x superior à da minha ligação à Net, num dos casos estou a transmitir o ficheiro todo e noutro estou só a transmitir os hashes (~ 20 bytes, mais os envelopes dos pacotes de rede, vá 200 bytes). Se fizerem as contas verão porque, para ficheiros com alguns Mb, começa a ser mais rápido fazermos o backup para estes sistemas e não para o nosso disco externo.
Não queria terminar este artigo sem referir duas coisas. Isto são técnicas ao nível do protocolo, mas existem técnicas ao nível da infraestrutura do servidor também muito interessantes (como transmitir os blocos em paralelo para servidores diferentes com base no hash, etc.). Por último, existe um grande senão neste esquema de hashing (tinha que ser, não é?). É que se o sistema de ficheiros no servidor estiver encriptado, os mecanismos de similaridade entre blocos deixam de funcionar. Ou seja, dois ficheiros parecidos tornam-se totalmente diferentes um do outro quando os encriptamos – faz sentido que assim seja. No entanto, o dropbox encripta os seus ficheiros, o que me leva a pensar que não utilizarão esta técnica…ou terão encontrado uma solução para este problema?
Comments(3)