DIRETO DAS TRINCHEIRAS
BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM
         AMBIENTES CORPORATIVOS
BOAS
DANILO SATO
                         Lead Consultant
                            Líder Técnico
                                Arquiteto
                                 DevOps
                                   Coach
                               Treinador
                    SP, Londres, Chicago
@dtsato
CARLOS VILLELA
                         Lead Consultant
                            Líder Técnico
                             Velho Chato
                                Arquiteto
                                 DevOps
                       Inovação Contínua
                SP, Londres, Porto Alegre


@cv
ENTERPRISE
               IN-TER-PRÁI-ZI
Uma empresa que não é uma start-up, seguindo processos que não são
                             Lean.
          Mas você tem contas pra pagar e vai trabalhar lá.
AUTÓPSIAS
Atropelamento por bolas de lama
Montanhas de pepinos
Morte por # f e
             idf
Asfixia por DBAs
Estupro remoto de servidores
Alucinações e flashbacks do J2EE
DEPLOYMENT PIPELINE
EXPLOSÃO DE CÓDIGO
 “Por trás de toda má ideia tem sempre uma boa
                    intenção”
EXPLOSÃO DE CÓDIGO
Abuso de monkey-patching
Forks pessoais
Deixar upgrades para depois
Forçar o Rails além do seu limite
The Rails Way is the only way
EXPLOSÃO DE CÓDIGO
Teste seus monkey-patches
Extraia gems para facilitar a manutenção

             EXPLOSÃO DE CÓDIGO
Pense além do model/view/controller/helper
Limite o número de pontos de integração
Bom design OO: crie abstrações úteis
   Algo entre F o
               oe
   AsrcBsFoigeoFcoyenml
    btataeoSnltnatrBaIp
ESTRATÉGIAS DE TESTE
Cnro Uurofzlgncmscso
 eái: sái a oi o ues

Dd qeetun pgn d lgn
 ao u  so a áia e oi
Qad e penh ocmo"oed uuro cm"sr
 uno u reco   ap nm e sái" o ue"
Ee penh ocmo"eh"cm"3rt
  u reco   ap sna o sc3"
Ee cion bto"oi"
  u lc  o oã Lgn
Etoe vupr ahmpg cmuamnae d scso"oi eeud cms
 nã u o aa   oeae o m esgm e ues Lgn ftao o
ues"
 cso
ESTRATÉGIAS DE TESTE
Gerenciar teste funcionais por história
Abuso no uso de mocks
   Re-testar o framework
   Mockar o objeto sendo testado
Ter um time separado cuidando dos testes
Investir em automação de teste de UI
Testes só rodam em um determinado ambiente
ESTRATÉGIAS DE TESTE
Testes funcionais de user journeys e não por história
Muito mais testes unitários do que testes funcionais

         ESTRATÉGIAS DE TESTE
Todo mundo é dono dos testes
Código de teste também é código
Evite acoplar testes com um determinado ambiente
RUBY EM MÚLTIPLAS
  PLATAFORMAS
 “ Ruby is highly portable: it is developed mostly on
   GNU/Linux, but sort of works on many types of
UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP,
               DOS, BeOS, OS/2, etc. ”
RUBY EM MÚLTIPLAS PLATAFORMAS
 Desenvolver em ambiente/plataforma diferente
 Usar infra diferente (BD, jobs, in-memory)
 Falta de cuidado com gems nativas
 Múltiplos encodings
 Linebreak/whitespace wars
 RVM em produção
RUBY EM MÚLTIPLAS PLATAFORMAS
Bundler
Vendorize tudo

  RUBY EM MÚLTIPLAS PLATAFORMAS
JRuby
Crie ambientes parecidos com produção
UTF-8 no stack inteiro
Você não quer rodar GCC em produção, IT Ops agradece
vgatris
 arn_al
Mingle , Go : JRuby e pacotes para diversos SOs
LIDANDO COM DADOS
LIDANDO COM DADOS
Forçar ActiveRecord num schema que você não controla
Usar vários BDs na mesma aplicação
SQLServer
Usar NoSQL como RDBMS
LIDANDO COM DADOS
Divida em aplicações/serviços menores
Defina quem tem posse dos dados

          LIDANDO COM DADOS
Representantes do negócio em decisões arquiteturais
Considere usar processos ETL
Teste!
CAPISTRANO
DSL para executar sequências de comandos em máquinas remotas de
                        acordo com roles.
  Amplamente utilizado para fazer deployment de aplicações Rails.
   #cppouto dpo mse
     a rdcin ely atr
CAPISTRANO
Multiplexação de conexões SSH
Referenciar servidores através de papéis (roles)

               CAPISTRANO
DSL Ruby, boa integração com Rake, etc.
Fácil de automatizar deployments e trocar receitas
CAPISTRANO
Encoraja deployments…
   …fora da integração contínua
   …direto do controle de versão
Branches para ajustes de produção
Ciclo de vida complicado (Maven, alguém?)
Processos difíceis de auditar
CAPISTRANO: ALTERNATIVAS
Não usar o ciclo de vida padrão
Empacotar aplicação usando RPM, DEB, etc
  Receitas fáceis de escrever
  Evoluem desde os anos 90
  IT Ops friendly :)
Use Cap para instalar os RPM/DEB/etc em ambientes
REST
Estilo arquitetural bem difundido em APIs web recentes.
   Aplicações feitas da web, e não apenas para a web.


          ENTITY EJB 1.X
                        Inferno.
REST
Sistemas pequenos, distribuídos
Escalabilidade horizontal

             REST
Manutenção e upgrades independentes
Composabilidade
Conway's Law
ENTITY EJB 1.X
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Muito difícil de usar bem
Literatura cheia de péssimos exemplos
REST, RUIM
Granularidade errada
Performance horrenda (e pilhas de hacks)
Deployments sofríveis, upgrades tensos
Literatura cheia de exemplos questionáveis (Rails API)
Caching fora do HTTP
REST
Documentos e representações (vs. 'DB em JSON')
Transições de estado (vs. RPC)

                  REST
Estados de erro bem definidos e testados
Fail-over bem definido e testado
Upgrades oferecem retro-compatibilidade
Caching e de-caching óbvios (HTTP)
Q&A?
         DIRETO DAS TRINCHEIRAS
BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES
                   CORPORATIVOS
BOAS             Danilo Sato @dtsato
                 Carlos Villela @cv
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos

Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes corporativos

  • 1.
    DIRETO DAS TRINCHEIRAS BOASE MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES CORPORATIVOS BOAS
  • 2.
    DANILO SATO Lead Consultant Líder Técnico Arquiteto DevOps Coach Treinador SP, Londres, Chicago @dtsato
  • 3.
    CARLOS VILLELA Lead Consultant Líder Técnico Velho Chato Arquiteto DevOps Inovação Contínua SP, Londres, Porto Alegre @cv
  • 5.
    ENTERPRISE IN-TER-PRÁI-ZI Uma empresa que não é uma start-up, seguindo processos que não são Lean. Mas você tem contas pra pagar e vai trabalhar lá.
  • 6.
    AUTÓPSIAS Atropelamento por bolasde lama Montanhas de pepinos Morte por # f e idf Asfixia por DBAs Estupro remoto de servidores Alucinações e flashbacks do J2EE
  • 7.
  • 8.
    EXPLOSÃO DE CÓDIGO “Por trás de toda má ideia tem sempre uma boa intenção”
  • 9.
    EXPLOSÃO DE CÓDIGO Abusode monkey-patching Forks pessoais Deixar upgrades para depois Forçar o Rails além do seu limite The Rails Way is the only way
  • 10.
    EXPLOSÃO DE CÓDIGO Testeseus monkey-patches Extraia gems para facilitar a manutenção EXPLOSÃO DE CÓDIGO Pense além do model/view/controller/helper Limite o número de pontos de integração Bom design OO: crie abstrações úteis Algo entre F o oe AsrcBsFoigeoFcoyenml btataeoSnltnatrBaIp
  • 11.
    ESTRATÉGIAS DE TESTE CnroUurofzlgncmscso eái: sái a oi o ues Dd qeetun pgn d lgn ao u so a áia e oi Qad e penh ocmo"oed uuro cm"sr uno u reco ap nm e sái" o ue" Ee penh ocmo"eh"cm"3rt u reco ap sna o sc3" Ee cion bto"oi" u lc o oã Lgn Etoe vupr ahmpg cmuamnae d scso"oi eeud cms nã u o aa oeae o m esgm e ues Lgn ftao o ues" cso
  • 12.
    ESTRATÉGIAS DE TESTE Gerenciarteste funcionais por história Abuso no uso de mocks Re-testar o framework Mockar o objeto sendo testado Ter um time separado cuidando dos testes Investir em automação de teste de UI Testes só rodam em um determinado ambiente
  • 13.
    ESTRATÉGIAS DE TESTE Testesfuncionais de user journeys e não por história Muito mais testes unitários do que testes funcionais ESTRATÉGIAS DE TESTE Todo mundo é dono dos testes Código de teste também é código Evite acoplar testes com um determinado ambiente
  • 14.
    RUBY EM MÚLTIPLAS PLATAFORMAS “ Ruby is highly portable: it is developed mostly on GNU/Linux, but sort of works on many types of UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc. ”
  • 15.
    RUBY EM MÚLTIPLASPLATAFORMAS Desenvolver em ambiente/plataforma diferente Usar infra diferente (BD, jobs, in-memory) Falta de cuidado com gems nativas Múltiplos encodings Linebreak/whitespace wars RVM em produção
  • 16.
    RUBY EM MÚLTIPLASPLATAFORMAS Bundler Vendorize tudo RUBY EM MÚLTIPLAS PLATAFORMAS JRuby Crie ambientes parecidos com produção UTF-8 no stack inteiro Você não quer rodar GCC em produção, IT Ops agradece vgatris arn_al Mingle , Go : JRuby e pacotes para diversos SOs
  • 17.
  • 18.
    LIDANDO COM DADOS ForçarActiveRecord num schema que você não controla Usar vários BDs na mesma aplicação SQLServer Usar NoSQL como RDBMS
  • 19.
    LIDANDO COM DADOS Dividaem aplicações/serviços menores Defina quem tem posse dos dados LIDANDO COM DADOS Representantes do negócio em decisões arquiteturais Considere usar processos ETL Teste!
  • 20.
    CAPISTRANO DSL para executarsequências de comandos em máquinas remotas de acordo com roles. Amplamente utilizado para fazer deployment de aplicações Rails. #cppouto dpo mse a rdcin ely atr
  • 21.
    CAPISTRANO Multiplexação de conexõesSSH Referenciar servidores através de papéis (roles) CAPISTRANO DSL Ruby, boa integração com Rake, etc. Fácil de automatizar deployments e trocar receitas
  • 22.
    CAPISTRANO Encoraja deployments… …fora da integração contínua …direto do controle de versão Branches para ajustes de produção Ciclo de vida complicado (Maven, alguém?) Processos difíceis de auditar
  • 23.
    CAPISTRANO: ALTERNATIVAS Não usaro ciclo de vida padrão Empacotar aplicação usando RPM, DEB, etc Receitas fáceis de escrever Evoluem desde os anos 90 IT Ops friendly :) Use Cap para instalar os RPM/DEB/etc em ambientes
  • 24.
    REST Estilo arquitetural bemdifundido em APIs web recentes. Aplicações feitas da web, e não apenas para a web. ENTITY EJB 1.X Inferno.
  • 25.
    REST Sistemas pequenos, distribuídos Escalabilidadehorizontal REST Manutenção e upgrades independentes Composabilidade Conway's Law
  • 26.
    ENTITY EJB 1.X Granularidadeerrada Performance horrenda (e pilhas de hacks) Deployments sofríveis, upgrades tensos Muito difícil de usar bem Literatura cheia de péssimos exemplos
  • 27.
    REST, RUIM Granularidade errada Performancehorrenda (e pilhas de hacks) Deployments sofríveis, upgrades tensos Literatura cheia de exemplos questionáveis (Rails API) Caching fora do HTTP
  • 28.
    REST Documentos e representações(vs. 'DB em JSON') Transições de estado (vs. RPC) REST Estados de erro bem definidos e testados Fail-over bem definido e testado Upgrades oferecem retro-compatibilidade Caching e de-caching óbvios (HTTP)
  • 29.
    Q&A? DIRETO DAS TRINCHEIRAS BOAS E MÁS PRÁTICAS DE APLICAÇÕES RUBY EM AMBIENTES CORPORATIVOS BOAS Danilo Sato @dtsato Carlos Villela @cv