YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← PS 19-14 Dimensionando

Get Embed Code
4 Languages

Showing Revision 12 created 09/14/2013 by Alessandro Almeida.

  1. Tivemos esses servidores de aplicação
    rodando nos seus próprios caches,
  2. e então tivemos algumas bases de dados
    que eram réplicas umas das outras.
  3. Neste momento acrescentamos um balanceador
    de carga que provavelmente rodou.
  4. Provavelmente era um programa rodando
    em um desses aplicativos,
  5. e esses caras mantinham seus caches em sincronia
    ao interagir com as bases de dados diretamente.
  6. Tivemos que limitar os servidores de aplicação
    pois tivemos complicação no caching.
  7. Depois acrescentamos este sistema memcached.
  8. Em vez de serviços de aplicação conterem
    seu cache de memória final,
  9. eles se comunicariam via memcached.
  10. Em vez de sincronizar o cache, tivemos um
    compartilhado com todos os servidores.
  11. Levou muito tempo para descobrir isso porque
    memcached existia ao iniciar o Reddit,
  12. e deveríamos tê-lo usado desde o começo.
  13. Isto foi o que nos permitiu chegar a todo esse cache,
    dos aplicativos, para o memcached
  14. e nos permitiu acrescentar aplicativos
    arbitrariamente.
  15. Uma vez isso funcionando, permitiu-nos
    dimensionar nossos aplicativos
  16. ficaram em sincronia, e agregamos um aplicativo
    solto. Não tínhamos que nos preocupar.
  17. Depois lidamos com o carregamento
    da base de dados.
  18. Já replicamos por razões de durabilidade e
    performance, para espalhamos
  19. as leituras pelas várias máquinas
    que começamos a segmentar em tipo.
  20. Teríamos uma base de dados apenas para os links
    e uma separada para comentários.
  21. Isso ainda seria reproduzido para cada um,
    mas somente se submeter um link,
  22. você deve apenas tocar nesta base de dados,
    se quiser apenas ler um comentário,
  23. por exemplo, você toca nesta base de dados.
  24. Essa é a estrutura geral do Reddit em termos de
    dimensionamento da base de dados.
  25. Lamento não termos escrito sharding no início.
  26. Quando escrevi a segunda versão
    do ThingDB, eu tinha em mente,
  27. que deveria acrescentar o sharding,
    porque iríamos precisar uma hora.
  28. E eu queria que aquilo fosse
    produzido logo, então parei.
  29. A grande lição que aprendi é quando estiver
    escrevendo um sistema grande como esse,
  30. se não fizer as partes difíceis no início,
    talvez você nunca tenha uma outra chance,
  31. porque agora a base de dados é tão grande,
    que anexar o sharding seria uma enorme projeto.
  32. É mais fácil agora acrescentar máquinas
    maiores e mais caching.
  33. Não vai funcionar para sempre e
    alguém vai ter que sentar e fazer.
  34. E teria sido muito mais fácil ter
    feito isso naquela época.
  35. Desde todas as nossas consultas, paramos de
    usar juntas e trocamos para ThingDB,
  36. Na verdade o sharding é bem simples
    se você faz logo no início.
  37. Com o tempo, os softwares nesses servidores de
    aplicação mudaram, mas sempre usamos Python.
  38. Não me recordo qual servidor de
    aplicativo usamos originalmente.
  39. Mudamos inicialmente para web.py, que é a
    estrutura para escrever no Reddit.
  40. Aaron foi o autor principal e ainda está pela internet
    em algum lugar.
  41. E foi a primeira vez que eu vi uma
    arquitetura que dá a noção
  42. de uma classe de manipuladores e
    funções para postar,
  43. e fiquei meio viciado em pensar sobre
    aplicativos desta maneira.
  44. Na verdade o Google App Engine,
    a arquitetura webapp2,
  45. herdou muito do design do web.py, que é muito bom.
  46. Bom para mim é que não há novidades
    de design há tempo
  47. então imagino que isto significa
    que este era bom.
  48. O Python usa um enquadramento chamado Pylons,
    mas uma versão antiga dele.
  49. Quando mudamos para Pylons, Aaron parou
    com a manutenção do web.py.
  50. Eu não quis mantê-lo. Mudamos para
    outra coisa mantida por alguém.
  51. Então retalhamos a maior parte e o fizemos
    funcionar como um web.py.
  52. Talvez tivesse sido melhor escrever o nosso
    próprio, porque foi o que fizemos,
  53. mas fizemos em cima do Pylons.
  54. Se quiser ver a versão Reddit do Pylons,
    é um código fonte aberto. Está online.
  55. Porém não se assemelha a nada da
    arquitetura do Pylons original.
  56. E que eu saiba, ainda usam assim hoje,
    esta versão rackeada do Pylons.