Seções iMasters
Linguagens + Python

6 lições do Dropbox – um milhão de arquivos armazenados a cada 15 minutos

O Dropbox armazena um milhão de arquivos a cada 15 minutos, mais do que o número de mensagens enviadas no Twitter. Essa estatística absurda foi revelada por Rian Hunter, um engenheiro da Dropbox, na sua apresentação How Dropbox Did It and How Python Helped, no PyCon 2011.

A primeira parte da apresentação é sobre o Dropbox em si, história de origem e outros mitos de base. Sabemos que o Dropbox é uma startup localizada em San Francisco e que provavelmente tem uma das ferramentas mais populares para sincronização e compartilhamento de arquivos no mundo, entregando o Python no desktop, suportando milhões de usuários e crescendo todos os dias.

Cerca de meia hora depois, a conversa se torna técnica. Não com muitas informações sobre como o Dropbox lida com sua escala massiva, mas eles apresentaram algumas boas lições que valem a pena ser ponderadas:

1.    Use Python

  • 99.9 % do seu código é em Python. Usado no servidor; no cliente, controle lógico do website, API de backend, e estatísticas.
  • Não consegue usar Python no Android devido a limitações de memória.
  • Roda em uma única base de código usando Python. O Dropbox roda em Windows, Mac e Linux usando ferramentas como PyObjs, WxPython, types, py2exe, py2app, PyWin32.

-  Prós:

  • Desenvolvedores conversam uns com os outros e expressam ideias no Python.
  • Fácil de aprender, fácil de ler, fácil de escrever, fácil para novas pessoas pegarem o ritmo…

Contras:

  • Não seja bobo. 
  • OK, ele pode usar muita memória e ficar muito lento. Não é um grande problema no lado do servidor, apenas compre máquinas grandes. No lado do cliente, você não pode fazer um antigo usuário de Power PC atualizá-lo.
  • Codificar em um ambiente misto de Python e C cria problemas, porque é difícil esquadrinhar através das fronteiras de um linguagem, como você gostaria de fazer ao corrigir problemas de memória e processamento.
  • Problemas de fragmentação de memória são motivos pelos quais linguagens de script podem não ser uma boa ideia para processos de execução longos.


2.    Apenas funcione, baby

  • Não deve importar em qual sistema de arquivo você está, qual SO você está usando, quais aplicações você está usando. O produto deve sempre funcionar.
  • O Python os ajudou a iterar rapidamente através de todos os casos de erro que eles encontraram na vasta variedade de plataformas que eles suportam.


3.    Libere rapidamente

  • Codifique algo em um dia e lance. O Python faz com que seja assim tão fácil.


4.    Use C para loops internos – Otimizar a CPU é fácil

  • Uma maneira de lidar com o problema da lentidão.
  • Otimize loops internos para reduzir tempo da CPU.
  • O custo de looping em Python é 44% maior do que em C (2.88s vs 1.61).
  • O despachos de bytecode da Python VM são muito lentos.
  • Muitas ferramentas existentes para definição de perfil de CPU.
  • Otimizações de CPU geralmente são limitadas a pequenas seções de código


5.    Poll – Polling 30 Milhões de clientes ao redor do mundo não escala

  • Uma estrutura de notificação HTTP foi criada para evitar polling o servidor no lado do cliente


6.    Alocador de memória customizado – otimizar memória é difícil

  • Este foi o maior problema deles por um tempo. Poderiam usar imensas quantidades de memória, e ela nunca seria liberada. Para grandes sincronizações, eles teriam que usar mais de 1.5 GB, agora eles raramente usam mais que 100 MB.
  • Difícil porque: poucas ferramentas existem para profiling memory para Python e C;o inchaço de memória tem muitas causas: vazamentos no código Python e C; fragmentação de memória; uso ineficiente de memória.
  • Corrigir ineficiências óbvias de memória não ajudou. Eles pensaram que havia um vazamento de memória, mas não havia.
  • O problema acabou sendo fragmentação de memória. Fragmentação de memória é o que acontece quando blocos de memória de diferentes tamanhos são continuamente deletados e alocados. O que acontece é que blocos contíguos de memória não podem mais ser alocados. O CPython não tem um coletor de lixo, então toda essa memória simplesmente não foi capaz de ser alocada, e a pilha cresceu continuamente, para que os pedidos da memória pudessem ser satisfeitos.
  • A solução foi criar um alocador customizado. O objeto do arquivo de meta-dados cresce muito ao fazer transferências, então a solução óbvia era criar um alocador customizado no C usando mmap.

Direções futuras

  • Dropbox em torradeiras. Compartilhamento de arquivo em torradeiras será o máximo.
  • Eles veem pastas como uma metáfora unificadora para armazenamento, organização e acesso de dados no cloud e em qualquer dispositivo, a qualquer momento, em qualquer lugar.

?

Texto original em disponível em http://highscalability.com/blog/2011/3/14/6-lessons-from-dropbox-one-million-files-saved-every-15-minu.html

Comente também

10 Comentários

Juvenau

Jogar no tradutor e colar aqui não trás muito resultado não.. melhor teria sido colar o texto em inglês de uma vez.

    R3nato

    caracas, como tem nego q reclama atoa… putz. Ate parece q vc iria traduzir melhor, hein sabichao?

Aured Freitas

Que vergonha! Tradução grosseira. Falta de respeito com o leitor. Poderiam ao menos ter informado que o texto foi tratuzido de forma automática por uma ferramenta ou então demitir o incompetente que a traduziu.

    jarbas

    infelizmente amigao, nem td mundo fala ingles igual vc… ou melhor, a minoria fala. E ao invés de ficar criticando, vc poderia ajudar na traducao. Outra coisa, se vc ver o texto original, é basicamente isso q ele fala. Mas quer apostar quanto q vc nem se deu ao trabalho de ler o original?

    Clovis Garcia de Almeida Filho

    Olha, se a minoria fala inglês, então tem algo errado ai. O inglês é fundamental para alguém que queira construir uma carreira sólida em qualquer área do conhecimento humano. Essa desculpa de que têm pessoas que não sabem Inglês já é algo ultrapassado!

Thiago Sabaia

Não sabia que era tantos uploads assim….

Jacques

Quem quiser 250mb no dropbox o link está aqui: http://db.tt/BVwMBf4

Jean Matheus Souto

Parabens pelo artigo, criticar é facil, quero ver bota a cara e fazer, mas o assunto o dropbox uma maravilha, serviço muito bom, e eu não sabia que era feito em python,
mais motivos para usar essa poderosa linguagem.

MArc

Traducao horrivel… Sem contar que Python eh uma das linguagens mais lentas… Nao usa os Cores do processador…

http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php

Db Ref

ÓTIMA FERRAMENTA !!! Cada vez mais se torna necessário possuir espaço online (na nuvem) para armazenar seus arquivos. E o Drop Box é uma ferramenta extremamente confiável quanto a sua estabilidade e plataformas de instalação. Usando link de referência o Drop Box permite adicionar mais espaço à conta. Crie sua conta através do link: http://db.tt/mFZsU0K9

Qual a sua opinião?