$30 off During Our Annual Pro Sale. View Details »

A saga de recuperação de um Software de Webcidadania

A saga de recuperação de um Software de Webcidadania

Palestra apresentada no FLISOL 2013 sobre a recuperação do projeto http://cidadedemocratica.org.br

Jean Carlo Emer

May 30, 2013
Tweet

More Decks by Jean Carlo Emer

Other Decks in Programming

Transcript

  1. A saga de recuperação de um
    Software de Webcidadania

    View Slide

  2. View Slide

  3. ★ 14k usuários
    ★ 5k propostas e problemas
    ★ 12k comentários
    ★ 25k apoios
    dados de 21 de abril de 2013

    View Slide

  4. Tempo de resposta do
    servidor

    View Slide

  5. Quem sou
    Codeminer 42
    jcemer
    jcemer
    Jean Carlo Emer

    View Slide

  6. Cenário inicial
    ★ Ruby on Rails 2.3 (março de 2009)
    ★ Ruby 1.8
    ★ MySQL
    ★ Linode (uma única máquina)

    View Slide

  7. Ruby on Rails
    ★ Surgiu do Basecamp, produto da 37 Signals
    ★ Framework Open Source para aplicações web
    ★ Padrão Model-View-Controller

    View Slide

  8. Vamos recuperar!

    View Slide

  9. Metodologia
    ★ Projeto de escopo aberto
    ★ Fork privado do projeto no GitHub
    ★ Entregas constantes
    ★ Deploy automatizado

    View Slide

  10. View Slide

  11. Como monitorar?
    ★ New Relic
    ★ Análise de performance
    ★ Monitoramento dos servidores
    ★ Performance de SQL
    ★ Alerta de erros e perda de performance

    View Slide

  12. View Slide

  13. Banco de dados
    sobrecarregado
    ★ Pesquisas ao banco não incluíam os models
    dependentes
    ★ Novas queries eram necessárias para
    complementar os registros (N+1)
    ★ Cache das queries mais custosas
    ★ Queries mal escritas...

    View Slide

  14. Queries Problemáticas

    View Slide

  15. Servidor do banco de dados
    ★ Adoção de um servidor exclusivo para o banco
    de dados
    ★ Aplicação bastante baseada em pesquisa e
    combinação de resultados
    ★ Tuning do banco de dados

    View Slide

  16. View Slide

  17. Testes!
    ★ As aplicações vão crescendo e adquirindo
    complexidade
    ★ Inviável testar manualmente toda a aplicação
    a cada nova funcionalidade ou refatoração
    ★ O Cidade Democrática não tinha nenhum teste

    View Slide

  18. Por onde começar a testar?
    ★ Reescritas críticas de código sempre
    começavam pela criação dos testes
    ★ Novas funcionalidades com cobertura
    total de testes
    ★ Testes de funcionalidade com os
    principais casos de uso...

    View Slide

  19. View Slide

  20. Integração contínua
    ★ Con guração do Travis
    ★ A cada push no repositório, os testes são
    rodados no serviço
    ★ Garantia de código sempre passando nos testes
    ★ Apoio para validar correção de Pull Requests

    View Slide

  21. View Slide

  22. Servidor de staging
    ★ Servidor dedicado para testar e depurar novas
    versões da aplicação
    ★ Con guração de máquina e ambiente iguais às
    de produção
    ★ Todo o deploy é feito antes para o servidor de
    Staging

    View Slide

  23. Qualidade de código
    ★ Code Climate
    ★ Suíte de ferramentas de análise estática
    ★ Métricas de complexidade
    ★ Identi ca código duplicado ou fonte de
    ataque

    View Slide

  24. View Slide

  25. View Slide

  26. Mãos ao código!

    View Slide

  27. ★ Projeto original com Rails plugins
    ★ Rails 3.0 introduz o uso do
    ★ Dependências indicadas em um arquivo
    Gem le
    ★ As Gems sempre serão as certas sem
    precisar versionar seu código no projeto
    Dependências

    View Slide

  28. Entrega de e-mails
    ★ Cerca de 400 e-mails por dia
    ★ Fila de e-mails
    ★ Envio fora do uxo da aplicação

    View Slide

  29. Autenticação dos usuários
    ★ Sistema de autenticação defasado
    ★ Gem Devise para autenticação
    ★ Diferentes permissões para os usuários
    ★ Suporte a Omniauth (login via Facebook)

    View Slide

  30. Autenticação através do
    Facebook
    ★ Criar a app no Facebook
    ★ Con gurar uma rota de destino na aplicação
    ★ Adicionar chave secreta e identi cador da
    app

    View Slide

  31. Concursos no Cidade
    Democrática

    View Slide

  32. O que são os concursos?
    ★ Nova seção do Cidade Democrática
    ★ Etapas de inspiração, propostas, aplausos,
    união, anúncio
    ★ Na fase de união, duas propostas podem ser
    uni cadas formando uma terceira

    View Slide

  33. Entregas
    ★ Não teríamos tempo de entregar o concurso
    completo antes da data de início prevista
    ★ O concurso possui etapas que foram
    codi cadas progressivamente

    View Slide

  34. Desenvolvimento dos
    concursos
    ★ Desenvolvimento guiado a testes
    ★ Uso de Gems mais novas
    ★ Melhor organização do código

    View Slide

  35. Resultado

    View Slide

  36. Evolução da plataforma
    Inicial Atual
    Linguagem
    Framework
    Cache
    Monitor
    Integração
    Qualidade
    Ruby 1.8 Ruby 2.0
    Ruby on Rails 2.3 Ruby on Rails 3.2
    - Memcached
    - New Relic
    - Travis
    - Code Climate

    View Slide

  37. Qualidade de código
    ★ Em mais de 1.5k commits progredimos muito
    ★ Dá para melhorar mais, nossos outros projetos
    possuem GPA quase 4.0

    View Slide

  38. Tempo de resposta do
    servidor

    View Slide

  39. Tempo de resposta do
    servidor

    View Slide

  40. O trabalho continua!

    View Slide

  41. Obrigado
    Jean Carlo Emer
    @jcemer

    View Slide