Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Tempo de resposta do servidor

Slide 5

Slide 5 text

Quem sou Codeminer 42 jcemer jcemer Jean Carlo Emer

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Vamos recuperar!

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

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...

Slide 14

Slide 14 text

Queries Problemáticas

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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...

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Mãos ao código!

Slide 27

Slide 27 text

★ 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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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)

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Concursos no Cidade Democrática

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Resultado

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Tempo de resposta do servidor

Slide 39

Slide 39 text

Tempo de resposta do servidor

Slide 40

Slide 40 text

O trabalho continua!

Slide 41

Slide 41 text

Obrigado Jean Carlo Emer @jcemer