Your SlideShare is downloading. ×
  • Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

CartolaFC - uma aplicação python rápida e escalável - pythonbrasil [6]

  • 5,001 views
Published

apresentação sobre performance e escalabilidade em python feita na pythonbrasil [6]

apresentação sobre performance e escalabilidade em python feita na pythonbrasil [6]

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,001
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
35
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • - CartolaFC é o fantasy game oficial do campeonato brasileiro.
    - Existe desde 2005
    - Falar como o jogo funciona
  • refazer uma aplicação consolidade no mercado, em 5 meses... com um time de 4 pessoas... possibilitar o crescimento de até 3vezes

  • antes de começar o projeto, defimos o que nós queríamos, quais nossas necessidades.. foram elas:
    leve - rápida - segura - deploy automatizado - escalável - baixo custo - 100% softwar livre - Desenvolvimento rápido e fácil - Fácil manuntenção
  • falar de cada ferramenta
  • hj em dia nosso desafio eh muito maior do que ha alguns anos... precisamos atender muitas requisições simultâneas.. e esse era nosso problema... pesquisando encontrei esse paper, bem famoso até. ele fala sobre os tipos de servidores, e como extrair o máximo de performance dos seus recursos
  • como performar aplicações web em pyton?
    existem duas formas...
    cgi: cada requisição inicia uma nova linha de execução própria
    app: o app server mantém o mesmo contexto
  • cgi script não performa bem, é lento e instável
    python application performa muito bem, estabilidade
  • fork: para cada requsição, um novo processo e criado para atende-lá
    pre-fork: os processos são iniciados antes antes da requisição chegar
    thread: uma thread para cada requisição
    single thread: uma única thread atende todas as requisições
  • abrir um processo para cada requisição, é morte certa
    muito lento
    consegue imaginar 10mil processos?
  • melhor que o fork, mais tem o mesmo problema, muitos processos abertos
  • melhor abrir uma thread do que abrir um processo, mas threads consomem muita memória, e com o aumento de requisições a degradação é muito grande
    resta o single thread. mas como uma única thread é capaz de atender milhares de requisições simultâneas?
  • tudo em linux é arquivo ... vc estabelece um socket, fazendo listen em uma determinada porta. registra esse socket no event polling do SO. Quando um evento acontece nesse socket, uma nova linha de execução e criada pelo SO, e vc consegue processar multiplas requisições simultâneamente, pode acreditar.
    por padrão o SO bloquea a execução de sua aplicação, quando operações de I/O são feitas. isso gera overhad, com non blocking, sua aplicação não é bloqueadas e continua sendo executada mesmo quando se está realizando alguma operação de I/O
  • 1 webserver rodando
    balanceamento de carga entre as 7 instâncias de aplicação
    capaz de processar 250 requisições por segundo









  • uma aplicação escalável, é um aplicação preparada para crescer
    unidade operacional, box. cada unidade é capaz de rodar de forma isolada e independente
    deploy automatizado
    escalabilidade horizontal, cada novo box representa aumento proporcional
  • cada box processa 250 requisiçoes por segundo


  • - CartolaFC é o fantasy game oficial do campeonato brasileiro.
    - Existe desde 2005
    - Falar como o jogo funciona

Transcript

  • 1. CartolaFC 2010 performance escalabilidade sqlalchemy python testes memcached varnish load-test arquitetura deploy mysql beanstalkd nginx qualidade tornado @marcelnicolay marcel.nicolay@gmail.com marcelnicolay.com
  • 2. O desafio!
  • 3. alguns números • 1.5 milhões de usuários cadastrados • 15 mil conexões simultâneas • 900 r/s, média de 100 r/s • 4 bancos mysql, 2 masters e 2 slaves • 12 GB de dados em cache • 63 instâncias de aplicação, 7 por máquina
  • 4. A solução
  • 5. ferramentas • python • sqlalchemy • nginx • mako • tornado • routes • mysql • varnish • capistrano • solr • memcached • centos
  • 6. performance C10k 10 mil usuários simultâneos www.kegel.com/c10k.html
  • 7. performance C10k python web application • cgi script • python application server
  • 8. performance C10k python web application • cgi script • python application server
  • 9. performance C10k tipos de servidor • fork • pre-fork • thread • single thread
  • 10. performance C10k tipos de servidor • fork • pre-fork • thread • single thread
  • 11. performance C10k tipos de servidor • fork • pre-fork • thread • single thread
  • 12. performance C10k tipos de servidor • fork • pre-fork • thread • single thread
  • 13. performance C10k single thread • socket listen • non blocking I/O • event polling (start(), read(), write(), close()) • multiplexação por divisão de tempo
  • 14. arquitetura nginx tornado tornado tornado tornado tornado
  • 15. nginx • baixo consumo de recursos • fácil configuração • alta performance • open source • non blocking I/O • load balancer, proxy cache, ssi dinâmico ...
  • 16. nginx - mercado server % 2010 apache 54% microsoft 25% ` nginx 6% google 6% lighthttpd 1% http://news.netcraft.com/archives/2010/05/14/may_2010_web_server_survey.html
  • 17. nginx vs apache concurrency x req/sec http://blog.webfaction.com/a-little-holiday-present
  • 18. nginx vs apache concurrency x memory http://blog.webfaction.com/a-little-holiday-present
  • 19. tornado • leve • simples • alta performance • open source • non blocking I/O • baixo consumo de recursos
  • 20. tornado from tornado import httpserver, ioloop, web class MainHandler(web.RequestHandler): def get(self): self.write(“Python Brasil 2010”) application = web.Application([ (r”/”, MainHandler), ]) if __name__ == “__main__”: http_server = httpserver.HTTPServer(application) http_server.listen(8888) http_server.ioloop.IOLoop.instance().start()
  • 21. tornado - benchmark
  • 22. aplicação tornado • routes controle • sqlalchemy • mako template repositório template • memcache cache banco • mysql
  • 23. performance no cliente • minify de css e javascript • css sprites • tempo de expiração dos arquivos • versionamente de arquivos • compactação de arquivos - gzip • estático separado da aplicação
  • 24. Escalabilidade
  • 25. curiosidades • 55mil times escalados em 5minutos • redis vs memcached • persistir dados no cliente com jStore • limpeza de cache em fila com beanstalkd
  • 26. CartolaFC 2010 perguntas? @marcelnicolay marcel.nicolay@gmail.com marcelnicolay.com