PageRenderTime 57ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/docs/source/arquitetura/software.rst

https://github.com/victorpantoja/mobile-social-share-server
ReStructuredText | 88 lines | 57 code | 31 blank | 0 comment | 0 complexity | 364c386ea09dbddb02cca586cfc648d5 MD5 | raw file
  1. Arquitetura de Software
  2. =======================
  3. Componentes
  4. -----------
  5. Cada componente da arquitetura do Mobile Social Share foi escolhido tendo em vista alcançar excelentes resultados de performance.
  6. Nginx é um servidor HTTP de alta performance com código aberto e totalmente livre. Foi criado em 2002, pelo russo Igor Sysoev, e teve seu primeiro release liberado em 2004. O Nginx é usado em 6.55% (13.5M) dos domínios ativos no mundo, e esse número vem crescendo exponencialmente.
  7. O Nginx é conhecido por ser muito rápido, estável, com uma grande variedade de módulos, com uma configuração muito simples além de consumir poucos recursos computacionais, como CPU e memória. Ele vem sendo utilizado em diversas aplicações, desde de um simples blog pessoal rodando em um VPS com recursos limitados, até aplicações críticas de alta disponibilidade.
  8. Diferente do servidores tradicionais, nginx não utiliza threads para estabelecer conexões. Ao invés disso, ele utiliza uma arquitetura assíncrona, muito mais escalável, orientada a eventos. Isso permite que ele atenda a milhares de conexões simultâneas com pouco uso de memória e cpu. Essa arquitetura orientada a eventos é conhecida como Asynchronous non-blocking I/O e foi concebida em resposta ao The C10K problem (http://www.kegel.com/c10k.html).
  9. * Nginx
  10. * Baixo consumo de recursos
  11. * Simples configuração
  12. * Alta performance
  13. * Free e Open Source
  14. * Proxy Cache
  15. * Proxy com balanceamento de carga (round-robin ou iphash) com fail-over
  16. Abaixo, uma comparação do nginx com outros servidores HTTP
  17. .. image :: ../img/nginx_benchmark.png
  18. Curva de crescimento na utilização do nginx:
  19. .. image :: ../img/nginx_growing.png
  20. Outro componente importante é o Tornado, um framework bem enxuto com um poderoso web server non-blocking e muito simples de ser implementado. Suas principais características são:
  21. * Tornado
  22. * Simples
  23. * Alta performance
  24. * Leve
  25. * Open Source
  26. * Non-blocking I/O
  27. * Baixo consumo de recursos
  28. O gráfico abaixo apresenta um benchmark entre a utlização do nginx + tornado e as implementações mais comuns para aplicações web Python:
  29. .. image :: ../img/tornado_benchmark.png
  30. Outros componentes:
  31. * SQLAlchemy: camada de acesso ao banco de dados (ORM)
  32. * Mako: gerenciador de templates
  33. * Capistrano: ferramenta de deploy automatizado
  34. * memcached: cache de dados em memória
  35. * simple-db-migrate: essa ferramenta torna possível que o banco de dados seja facilmente alterado e que cada versão seja bem identificada.
  36. A figura abaixo resume a tecnologia utilizada no Mobile Social Share:
  37. .. image :: ../img/tecnologias.png
  38. Arquitetura Modular
  39. -------------------
  40. No Mobile Social Share, uma instância de nginx distribui a carga para múltiplas instâncias do Tornado. A quantidade de instâncias
  41. depende das configurações do servidor e é diretamente proporcional à quantidade de núcleos do processador. O conjunto nginx + tornados
  42. é definida por "box":
  43. .. image :: ../img/box.png
  44. Na figura acima, estão representadas múltiplas instâncias do memcached, que podem estar em qualquer servidor.
  45. Se dermos um "close" na arquitetura descrita acima e examinarmos apenas a aplicação python, ela será composta pelas seguintes partes:
  46. .. image :: ../img/aplicacao.png
  47. O Tornado recebe a requisição enviada pelo nginx e repassa para o controller específico. Esse controller pode acessar as classses de
  48. repositório ou renderizar diretamente um template.
  49. As classes de repositório buscam os dados no cache e, se não encontrarem, realizam um acesso ao banco de dados.
  50. Arquitetura "Real" do Mobile Social Share
  51. -----------------------------------------
  52. Até este momento, o Mobile Social Share foi descrito de forma isolada, ou seja, apenas um box. No entanto, conjuntos de boxes podem
  53. ser configurados em dezenas de máquinas, conforme a figura abaixo:
  54. .. image :: ../img/arquitetura_completa.png
  55. Essa arquitetura modular possui uma característica bastante importante: pode-se prever a quantidade de máquinas necessárias para
  56. aguentar a quantidade desejada de carga. Em outras palavras, se cada box aguentar, por exemplo, 250 requisições por segundo (req/s)
  57. e a carga desejada é de 2500 req/s serão necessárias 10 máquinas.