SlideShare une entreprise Scribd logo
1  sur  68
Télécharger pour lire hors ligne
Técnicas para ser
              escalável com



07/07/2012         The Developer's Conference   1
Filipe La Ruina
Works @ ecompete.com.br
@filaruina




07/07/2012                The Developer's Conference   2
Escalabilidade

07/07/2012       The Developer's Conference   3
Escalabilidade
               Técnicas não são regras!




07/07/2012           The Developer's Conference   4
O que é?




07/07/2012   The Developer's Conference   5
O que é?
             O que não é?




07/07/2012     The Developer's Conference   6
O que é?
                  O que não é?
➔
    Performance




07/07/2012          The Developer's Conference   7
O que é?
                   O que não é?
➔
    Performance

➔
    Usar Tecnologia X




07/07/2012              The Developer's Conference   8
O que é?
                   O que não é?
➔
    Performance

➔
    Usar Tecnologia X

➔
    Separação de Responsabilidades




07/07/2012              The Developer's Conference   9
O que é?
                   O que não é?
➔
    Performance

➔
    Usar Tecnologia X

➔
    Separação de Responsabilidades




07/07/2012              The Developer's Conference   10
Escalabilidade é uma característica
             desejável em todo o sistema, em uma
             rede ou em um processo, que indica sua
             habilidade de manipular uma porção
             crescente de trabalho de forma uniforme,
             ou estar preparado para crescer.




07/07/2012   The Developer's Conference           11
O que é?

➔
    Aguenta aumento no uso




07/07/2012           The Developer's Conference   12
O que é?

➔
    Aguenta aumento no uso

➔
    Aguenta aumento nos dados




07/07/2012           The Developer's Conference   13
O que é?

➔
    Aguenta aumento no uso

➔
    Aguenta aumento nos dados

➔
    Fácil manutenção




07/07/2012             The Developer's Conference   14
Vamos por Partes



07/07/2012   The Developer's Conference   15
1º Passo
       Desenvolvimento

07/07/2012   The Developer's Conference   16
Desenvolvimento

➔
    Separação de Conceitos (OOP, Camadas, etc)




07/07/2012             The Developer's Conference   17
Desenvolvimento

➔
    Separação de Conceitos (OOP, Camadas, etc)




             API                                    Cliente




07/07/2012             The Developer's Conference             18
Desenvolvimento

➔
    Separação de Conceitos (OOP, Camadas, etc)


                  API




       DB         API                         LB     Client




                  API


07/07/2012              The Developer's Conference            19
Desenvolvimento

➔
    Arquitetura Orientada a Serviços



         Authentication



                                API                        Client
     Product




             Email



07/07/2012                    The Developer's Conference            20
Desenvolvimento

➔
    Use Controle de Versão




07/07/2012             The Developer's Conference   21
Desenvolvimento

➔
    Use Controle de Versão


                      Usa esse blz?




07/07/2012               The Developer's Conference   22
Desenvolvimento

➔
    Integração Contínua




07/07/2012                The Developer's Conference   23
Desenvolvimento

➔
    Integração Contínua
    ➔
        Build Automatizado (e rápido)




07/07/2012                    The Developer's Conference   24
Desenvolvimento

➔
    Integração Contínua
    ➔
        Build Automatizado (e rápido)

    ➔
        Testes




07/07/2012                    The Developer's Conference   25
Desenvolvimento

➔
    Integração Contínua
    ➔
        Build Automatizado (e rápido)

    ➔
        Testes

    ➔
        Verifique Qualidade


                          http://phpqatools.org




07/07/2012                    The Developer's Conference   26
Desenvolvimento

➔
    Atualize-se




07/07/2012            The Developer's Conference   27
Desenvolvimento

➔
    Atualize-se

                                                   THIS




07/07/2012            The Developer's Conference          28
2º Passo
             Monitoramento

07/07/2012       The Developer's Conference   29
Monitoramento

➔
    Por que?




07/07/2012        The Developer's Conference   30
Monitoramento

➔
    Por que?




07/07/2012        The Developer's Conference   31
Monitoramento

➔
    Por que?

     ➔
         Identificar Gargalos (+ usuários => + tempo gasto)




07/07/2012                      The Developer's Conference    32
Monitoramento

➔
    Por que?

     ➔
         Identificar Gargalos (+ usuários => + tempo gasto)

     ➔
         Prevenir Problemas




07/07/2012                      The Developer's Conference    33
Monitoramento

➔
    Por que?

     ➔
         Identificar Gargalos (+ usuários => + tempo gasto)

     ➔
         Prevenir Problemas

     ➔
         Poder dormir tranquilo




07/07/2012                      The Developer's Conference    34
Monitoramento

➔
    Ferramentas




07/07/2012           The Developer's Conference   35
Monitoramento

➔
    Ferramentas
    ➔
        Top (é sério)




07/07/2012                 The Developer's Conference   36
Monitoramento

➔
    Ferramentas
    ➔
        Top (é sério)
                                                        Load: 1, 5, 15 minutos




07/07/2012                 The Developer's Conference                            37
Monitoramento

   ➔
       Ferramentas
       ➔
           Top (é sério)
                                                           Load: 1, 5, 15 minutos




Memória e Swap




   07/07/2012                 The Developer's Conference                            38
Monitoramento

   ➔
       Ferramentas
       ➔
           Top (é sério)
                                                           Load: 1, 5, 15 minutos




Memória e Swap


                                                                            Processos




   07/07/2012                 The Developer's Conference                                39
Monitoramento

➔
    Ferramentas
    ➔
        Profiling




07/07/2012             The Developer's Conference   40
Monitoramento

➔
    Ferramentas
    ➔
        MySql SHOW (tem tudo lá! http://dev.mysql.com/doc/refman/5.0/en/show.html)

    ➔
        Slow Query Log

    ➔
        Explain Query




07/07/2012                        The Developer's Conference                   41
Monitoramento

➔
    Ferramentas
    ➔
        Monitoramento de Infra




07/07/2012                  The Developer's Conference   42
3º Passo
             Crescimento

07/07/2012      The Developer's Conference   43
Crescimento

➔
    Formas de Crescer




07/07/2012              The Developer's Conference   44
Crescimento

➔
    Formas de Crescer

    ➔
        Horizontalmente

         AppServer   AppServer        AppServer           AppServer   AppServer




                                    Load Balancer


                                          Client


07/07/2012                       The Developer's Conference                       45
Crescimento

➔
    Formas de Crescer

    ➔
        Horizontalmente
                                           AppServer            AppServer
    ➔
        Verticalmente


                                                   Load Balancer


                                                       Client



07/07/2012                The Developer's Conference                        46
Crescimento

➔
    Cache




07/07/2012     The Developer's Conference   47
Crescimento

➔
    Cache

    ➔
        HTTP Cache (Diminui quantidade de requests)




07/07/2012                     The Developer's Conference   48
Crescimento

➔
    Cache

    ➔
        Opcode Cache (APC)
        http://www.php.net/apc




07/07/2012                         The Developer's Conference   49
Crescimento

➔
    Cache

    ➔
        Memory Cache (memcached)
    https://github.com/php-memcached-dev/php-memcached
    http://pecl.php.net/package/memcached




                    DB                   Memcached                   App




07/07/2012                              The Developer's Conference         50
Crescimento

➔
    Replicação                   Slave
                                           Slave

                                      Slave
    ➔
        Master (Escritas)                                             Master
                                   Slave
                                            Slave
    ➔
        Slaves (Leituras)
                                                         Read
                                                                        Write




                                                                App




07/07/2012                  The Developer's Conference                          51
Crescimento

➔
    Índices em tabelas




07/07/2012               The Developer's Conference   52
Crescimento

➔
    Índices em tabelas




07/07/2012               The Developer's Conference   53
Crescimento

➔
    Índices em tabelas




07/07/2012               The Developer's Conference   54
Crescimento

➔
    Índices em tabelas

     ➔
         Preferência a campos com baixa cardinalidade




07/07/2012                The Developer's Conference    55
Crescimento

➔
    Índices em tabelas

     ➔
         Preferência a campos com baixa cardinalidade

     ➔
         Ocupam mais espaço em disco




07/07/2012                The Developer's Conference    56
Crescimento

➔
    Índices em tabelas

     ➔
         Preferência a campos com baixa cardinalidade

     ➔
         Ocupam mais espaço em disco

     ➔
         Índices são agrupamentos




07/07/2012                The Developer's Conference    57
Crescimento

➔
    Índices em tabelas

     ➔
         Preferência a campos com baixa cardinalidade

     ➔
         Ocupam mais espaço em disco

     ➔
         Índices são agrupamentos

     ➔
         Diminuem o tempo de escrita



07/07/2012                The Developer's Conference    58
Crescimento

➔
    Distribuição de Tarefas




07/07/2012              The Developer's Conference   59
Crescimento

➔
    Distribuição de Tarefas

     ➔
         Gearman                       http://gearman.org/
                                       http://php.net/gearman




07/07/2012              The Developer's Conference              60
Crescimento

➔
    Distribuição de Tarefas

     ➔
         Gearman                       http://gearman.org/
                                       http://php.net/gearman




07/07/2012              The Developer's Conference              61
Crescimento

➔
    Distribuição de Tarefas

     ➔
         Gearman                       http://gearman.org/
                                       http://php.net/gearman




07/07/2012              The Developer's Conference              62
Mais Umas Coisas



07/07/2012   The Developer's Conference   63
Mais Umas Coisas

➔
    Entenda o que está acontecendo

➔
    Análise os custos antes de tomar uma decisão

➔
    Use um proxy reverso (nginx, squid, Varnish)

➔
    Lado cliente é importante




07/07/2012              The Developer's Conference   64
Case – Bolsa de Mulher




        by: @zanaca

07/07/2012             The Developer's Conference   65
Case – Bolsa de Mulher




                                                    ~ 7K Simultâneos
        by: @zanaca

07/07/2012             The Developer's Conference                      66
Referências
                                Cases interessantes
                             Tumblr: http://bit.ly/z4cdCG
                             YouPorn: http://bit.ly/Hhz0PV (Sério!)
                             Facebook: http://b.qr.ae/gB5C6b
                             Digg: http://bit.ly/Xp4NW
                             Flickr: http://bit.ly/1Jywk1

                                             Livros




             http://oreil.ly/N7LH6b    http://oreil.ly/pnKqJG http://oreil.ly/LwjPXd


07/07/2012                            The Developer's Conference                       67
Obrigado!
                                  @filaruina

Agradecimentos:
● @alganet e @duodraco pela oportunidade

● @searleoliveira pela ajuda com MySql

● @zanaca pela lembrança da arquitetura do Bolsa de Mulher

● @igorpsantos pela ajuda com a Infra




07/07/2012                     The Developer's Conference    68

Contenu connexe

Tendances

Como montar um DevOps Toolchain
Como montar um DevOps Toolchain Como montar um DevOps Toolchain
Como montar um DevOps Toolchain Fabio Reginaldo
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Toc aplicada a gestão de projetos
Toc aplicada a gestão de projetosToc aplicada a gestão de projetos
Toc aplicada a gestão de projetosAragon Vieira
 
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARE
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWAREDESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARE
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARECloves da Rocha
 
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempre
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempreGerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempre
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempreLeandro Faria
 
Tradução resumida do livro "The Elements of Scrum"
Tradução resumida do livro "The Elements of Scrum"Tradução resumida do livro "The Elements of Scrum"
Tradução resumida do livro "The Elements of Scrum"Henrique Bueno
 
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANDesenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANFernando Palma
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixCris Fidelix
 
Colocando o Scrum em prática
Colocando o Scrum em práticaColocando o Scrum em prática
Colocando o Scrum em práticaAragon Vieira
 
Fluxograma processo - desenvolvimento de software
Fluxograma   processo - desenvolvimento de softwareFluxograma   processo - desenvolvimento de software
Fluxograma processo - desenvolvimento de softwareAragon Vieira
 
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021Eduardo Cesar
 
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...Christian Gut
 
Projeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareProjeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareAragon Vieira
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Cloves da Rocha
 

Tendances (20)

DevOps - o que é?
DevOps - o que é?DevOps - o que é?
DevOps - o que é?
 
Monografia-Devops
Monografia-DevopsMonografia-Devops
Monografia-Devops
 
Como montar um DevOps Toolchain
Como montar um DevOps Toolchain Como montar um DevOps Toolchain
Como montar um DevOps Toolchain
 
Métodos ágeis
Métodos ágeisMétodos ágeis
Métodos ágeis
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
Curso Scrum
Curso ScrumCurso Scrum
Curso Scrum
 
Toc aplicada a gestão de projetos
Toc aplicada a gestão de projetosToc aplicada a gestão de projetos
Toc aplicada a gestão de projetos
 
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARE
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWAREDESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARE
DESENVOLVIMENTO E GERENCIAMENTO ÁGIL DE PROJETOS DE SOFTWARE
 
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempre
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempreGerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempre
Gerenciamento Ágil de Projetos, Uma nova abordagem para os desafio de sempre
 
Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
 
Tradução resumida do livro "The Elements of Scrum"
Tradução resumida do livro "The Elements of Scrum"Tradução resumida do livro "The Elements of Scrum"
Tradução resumida do livro "The Elements of Scrum"
 
Metodos Ageis
Metodos AgeisMetodos Ageis
Metodos Ageis
 
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBANDesenvolvimento ágil de software: análise sintética a partir de KANBAN
Desenvolvimento ágil de software: análise sintética a partir de KANBAN
 
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 3 - Prof.ª Cristiane Fidelix
 
Colocando o Scrum em prática
Colocando o Scrum em práticaColocando o Scrum em prática
Colocando o Scrum em prática
 
Fluxograma processo - desenvolvimento de software
Fluxograma   processo - desenvolvimento de softwareFluxograma   processo - desenvolvimento de software
Fluxograma processo - desenvolvimento de software
 
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021
COMO SE TORNAR UM GP PMBOK 7 AINDA EM 2021
 
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...
Agile Brazil 2018 - LPPD - Lean Product and Process Development, uma alternat...
 
Projeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareProjeto e Desenvolvimento de Software
Projeto e Desenvolvimento de Software
 
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
Aula Modelos de Processos Tradicionais para Desenvolvimento de Software
 

Similaire à Técnicas escaláveis para desenvolvimento

RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...
RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...
RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...Daniel Wildt
 
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 Express
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 ExpressVisual Studio Summit 2012 - Novidades do Visual Studio 2012 Express
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 ExpressRogério Rodrigues
 
Integração do Zabbix com Testes Automatizados
Integração do Zabbix com Testes AutomatizadosIntegração do Zabbix com Testes Automatizados
Integração do Zabbix com Testes AutomatizadosRobert Silva
 
TDC 2012 - Processo de Teste e Qualidade de Software
TDC 2012 - Processo de Teste e Qualidade de SoftwareTDC 2012 - Processo de Teste e Qualidade de Software
TDC 2012 - Processo de Teste e Qualidade de SoftwareRobson Agapito Correa
 
Visual Studio Summit 2012 - Team Foundation Server 2012 Express
Visual Studio Summit 2012 - Team Foundation Server 2012 ExpressVisual Studio Summit 2012 - Team Foundation Server 2012 Express
Visual Studio Summit 2012 - Team Foundation Server 2012 ExpressRogério Rodrigues
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de DadosJosé Araújo
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPPablo Dall'Oglio
 
Apresentacao pré banca TCC em SI
Apresentacao pré banca TCC em SIApresentacao pré banca TCC em SI
Apresentacao pré banca TCC em SIHelton Ritter
 
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Daniel Wildt
 
Continuous Delivery com TFS e Release Management for Visual Studio 2013
Continuous Delivery com TFS e Release Management for Visual Studio 2013Continuous Delivery com TFS e Release Management for Visual Studio 2013
Continuous Delivery com TFS e Release Management for Visual Studio 2013André Dias
 
DevBrasil OpenDay São José do Rio Preto
DevBrasil OpenDay São José do Rio PretoDevBrasil OpenDay São José do Rio Preto
DevBrasil OpenDay São José do Rio PretoRogério Rodrigues
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwarePablo Dall'Oglio
 

Similaire à Técnicas escaláveis para desenvolvimento (20)

RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...
RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...
RSJUG Day - Ferramentas Para Projetos Java Usando Metodologias Ageis - Daniel...
 
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 Express
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 ExpressVisual Studio Summit 2012 - Novidades do Visual Studio 2012 Express
Visual Studio Summit 2012 - Novidades do Visual Studio 2012 Express
 
Integração do Zabbix com Testes Automatizados
Integração do Zabbix com Testes AutomatizadosIntegração do Zabbix com Testes Automatizados
Integração do Zabbix com Testes Automatizados
 
TDC 2012 - Processo de Teste e Qualidade de Software
TDC 2012 - Processo de Teste e Qualidade de SoftwareTDC 2012 - Processo de Teste e Qualidade de Software
TDC 2012 - Processo de Teste e Qualidade de Software
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
Visual Studio Summit 2012 - Team Foundation Server 2012 Express
Visual Studio Summit 2012 - Team Foundation Server 2012 ExpressVisual Studio Summit 2012 - Team Foundation Server 2012 Express
Visual Studio Summit 2012 - Team Foundation Server 2012 Express
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
 
Msp workshop
Msp workshopMsp workshop
Msp workshop
 
Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6
 
Refactoring
RefactoringRefactoring
Refactoring
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
 
Desenvolvimento Ágil de Software
Desenvolvimento Ágil de SoftwareDesenvolvimento Ágil de Software
Desenvolvimento Ágil de Software
 
Apresentacao pré banca TCC em SI
Apresentacao pré banca TCC em SIApresentacao pré banca TCC em SI
Apresentacao pré banca TCC em SI
 
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
 
Continuous Delivery com TFS e Release Management for Visual Studio 2013
Continuous Delivery com TFS e Release Management for Visual Studio 2013Continuous Delivery com TFS e Release Management for Visual Studio 2013
Continuous Delivery com TFS e Release Management for Visual Studio 2013
 
DevBrasil OpenDay São José do Rio Preto
DevBrasil OpenDay São José do Rio PretoDevBrasil OpenDay São José do Rio Preto
DevBrasil OpenDay São José do Rio Preto
 
Gt 10 fcsi
Gt 10   fcsiGt 10   fcsi
Gt 10 fcsi
 
DevOps
DevOpsDevOps
DevOps
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 

Técnicas escaláveis para desenvolvimento

  • 1. Técnicas para ser escalável com 07/07/2012 The Developer's Conference 1
  • 2. Filipe La Ruina Works @ ecompete.com.br @filaruina 07/07/2012 The Developer's Conference 2
  • 3. Escalabilidade 07/07/2012 The Developer's Conference 3
  • 4. Escalabilidade Técnicas não são regras! 07/07/2012 The Developer's Conference 4
  • 5. O que é? 07/07/2012 The Developer's Conference 5
  • 6. O que é? O que não é? 07/07/2012 The Developer's Conference 6
  • 7. O que é? O que não é? ➔ Performance 07/07/2012 The Developer's Conference 7
  • 8. O que é? O que não é? ➔ Performance ➔ Usar Tecnologia X 07/07/2012 The Developer's Conference 8
  • 9. O que é? O que não é? ➔ Performance ➔ Usar Tecnologia X ➔ Separação de Responsabilidades 07/07/2012 The Developer's Conference 9
  • 10. O que é? O que não é? ➔ Performance ➔ Usar Tecnologia X ➔ Separação de Responsabilidades 07/07/2012 The Developer's Conference 10
  • 11. Escalabilidade é uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer. 07/07/2012 The Developer's Conference 11
  • 12. O que é? ➔ Aguenta aumento no uso 07/07/2012 The Developer's Conference 12
  • 13. O que é? ➔ Aguenta aumento no uso ➔ Aguenta aumento nos dados 07/07/2012 The Developer's Conference 13
  • 14. O que é? ➔ Aguenta aumento no uso ➔ Aguenta aumento nos dados ➔ Fácil manutenção 07/07/2012 The Developer's Conference 14
  • 15. Vamos por Partes 07/07/2012 The Developer's Conference 15
  • 16. 1º Passo Desenvolvimento 07/07/2012 The Developer's Conference 16
  • 17. Desenvolvimento ➔ Separação de Conceitos (OOP, Camadas, etc) 07/07/2012 The Developer's Conference 17
  • 18. Desenvolvimento ➔ Separação de Conceitos (OOP, Camadas, etc) API Cliente 07/07/2012 The Developer's Conference 18
  • 19. Desenvolvimento ➔ Separação de Conceitos (OOP, Camadas, etc) API DB API LB Client API 07/07/2012 The Developer's Conference 19
  • 20. Desenvolvimento ➔ Arquitetura Orientada a Serviços Authentication API Client Product Email 07/07/2012 The Developer's Conference 20
  • 21. Desenvolvimento ➔ Use Controle de Versão 07/07/2012 The Developer's Conference 21
  • 22. Desenvolvimento ➔ Use Controle de Versão Usa esse blz? 07/07/2012 The Developer's Conference 22
  • 23. Desenvolvimento ➔ Integração Contínua 07/07/2012 The Developer's Conference 23
  • 24. Desenvolvimento ➔ Integração Contínua ➔ Build Automatizado (e rápido) 07/07/2012 The Developer's Conference 24
  • 25. Desenvolvimento ➔ Integração Contínua ➔ Build Automatizado (e rápido) ➔ Testes 07/07/2012 The Developer's Conference 25
  • 26. Desenvolvimento ➔ Integração Contínua ➔ Build Automatizado (e rápido) ➔ Testes ➔ Verifique Qualidade http://phpqatools.org 07/07/2012 The Developer's Conference 26
  • 27. Desenvolvimento ➔ Atualize-se 07/07/2012 The Developer's Conference 27
  • 28. Desenvolvimento ➔ Atualize-se THIS 07/07/2012 The Developer's Conference 28
  • 29. 2º Passo Monitoramento 07/07/2012 The Developer's Conference 29
  • 30. Monitoramento ➔ Por que? 07/07/2012 The Developer's Conference 30
  • 31. Monitoramento ➔ Por que? 07/07/2012 The Developer's Conference 31
  • 32. Monitoramento ➔ Por que? ➔ Identificar Gargalos (+ usuários => + tempo gasto) 07/07/2012 The Developer's Conference 32
  • 33. Monitoramento ➔ Por que? ➔ Identificar Gargalos (+ usuários => + tempo gasto) ➔ Prevenir Problemas 07/07/2012 The Developer's Conference 33
  • 34. Monitoramento ➔ Por que? ➔ Identificar Gargalos (+ usuários => + tempo gasto) ➔ Prevenir Problemas ➔ Poder dormir tranquilo 07/07/2012 The Developer's Conference 34
  • 35. Monitoramento ➔ Ferramentas 07/07/2012 The Developer's Conference 35
  • 36. Monitoramento ➔ Ferramentas ➔ Top (é sério) 07/07/2012 The Developer's Conference 36
  • 37. Monitoramento ➔ Ferramentas ➔ Top (é sério) Load: 1, 5, 15 minutos 07/07/2012 The Developer's Conference 37
  • 38. Monitoramento ➔ Ferramentas ➔ Top (é sério) Load: 1, 5, 15 minutos Memória e Swap 07/07/2012 The Developer's Conference 38
  • 39. Monitoramento ➔ Ferramentas ➔ Top (é sério) Load: 1, 5, 15 minutos Memória e Swap Processos 07/07/2012 The Developer's Conference 39
  • 40. Monitoramento ➔ Ferramentas ➔ Profiling 07/07/2012 The Developer's Conference 40
  • 41. Monitoramento ➔ Ferramentas ➔ MySql SHOW (tem tudo lá! http://dev.mysql.com/doc/refman/5.0/en/show.html) ➔ Slow Query Log ➔ Explain Query 07/07/2012 The Developer's Conference 41
  • 42. Monitoramento ➔ Ferramentas ➔ Monitoramento de Infra 07/07/2012 The Developer's Conference 42
  • 43. 3º Passo Crescimento 07/07/2012 The Developer's Conference 43
  • 44. Crescimento ➔ Formas de Crescer 07/07/2012 The Developer's Conference 44
  • 45. Crescimento ➔ Formas de Crescer ➔ Horizontalmente AppServer AppServer AppServer AppServer AppServer Load Balancer Client 07/07/2012 The Developer's Conference 45
  • 46. Crescimento ➔ Formas de Crescer ➔ Horizontalmente AppServer AppServer ➔ Verticalmente Load Balancer Client 07/07/2012 The Developer's Conference 46
  • 47. Crescimento ➔ Cache 07/07/2012 The Developer's Conference 47
  • 48. Crescimento ➔ Cache ➔ HTTP Cache (Diminui quantidade de requests) 07/07/2012 The Developer's Conference 48
  • 49. Crescimento ➔ Cache ➔ Opcode Cache (APC) http://www.php.net/apc 07/07/2012 The Developer's Conference 49
  • 50. Crescimento ➔ Cache ➔ Memory Cache (memcached) https://github.com/php-memcached-dev/php-memcached http://pecl.php.net/package/memcached DB Memcached App 07/07/2012 The Developer's Conference 50
  • 51. Crescimento ➔ Replicação Slave Slave Slave ➔ Master (Escritas) Master Slave Slave ➔ Slaves (Leituras) Read Write App 07/07/2012 The Developer's Conference 51
  • 52. Crescimento ➔ Índices em tabelas 07/07/2012 The Developer's Conference 52
  • 53. Crescimento ➔ Índices em tabelas 07/07/2012 The Developer's Conference 53
  • 54. Crescimento ➔ Índices em tabelas 07/07/2012 The Developer's Conference 54
  • 55. Crescimento ➔ Índices em tabelas ➔ Preferência a campos com baixa cardinalidade 07/07/2012 The Developer's Conference 55
  • 56. Crescimento ➔ Índices em tabelas ➔ Preferência a campos com baixa cardinalidade ➔ Ocupam mais espaço em disco 07/07/2012 The Developer's Conference 56
  • 57. Crescimento ➔ Índices em tabelas ➔ Preferência a campos com baixa cardinalidade ➔ Ocupam mais espaço em disco ➔ Índices são agrupamentos 07/07/2012 The Developer's Conference 57
  • 58. Crescimento ➔ Índices em tabelas ➔ Preferência a campos com baixa cardinalidade ➔ Ocupam mais espaço em disco ➔ Índices são agrupamentos ➔ Diminuem o tempo de escrita 07/07/2012 The Developer's Conference 58
  • 59. Crescimento ➔ Distribuição de Tarefas 07/07/2012 The Developer's Conference 59
  • 60. Crescimento ➔ Distribuição de Tarefas ➔ Gearman http://gearman.org/ http://php.net/gearman 07/07/2012 The Developer's Conference 60
  • 61. Crescimento ➔ Distribuição de Tarefas ➔ Gearman http://gearman.org/ http://php.net/gearman 07/07/2012 The Developer's Conference 61
  • 62. Crescimento ➔ Distribuição de Tarefas ➔ Gearman http://gearman.org/ http://php.net/gearman 07/07/2012 The Developer's Conference 62
  • 63. Mais Umas Coisas 07/07/2012 The Developer's Conference 63
  • 64. Mais Umas Coisas ➔ Entenda o que está acontecendo ➔ Análise os custos antes de tomar uma decisão ➔ Use um proxy reverso (nginx, squid, Varnish) ➔ Lado cliente é importante 07/07/2012 The Developer's Conference 64
  • 65. Case – Bolsa de Mulher by: @zanaca 07/07/2012 The Developer's Conference 65
  • 66. Case – Bolsa de Mulher ~ 7K Simultâneos by: @zanaca 07/07/2012 The Developer's Conference 66
  • 67. Referências Cases interessantes Tumblr: http://bit.ly/z4cdCG YouPorn: http://bit.ly/Hhz0PV (Sério!) Facebook: http://b.qr.ae/gB5C6b Digg: http://bit.ly/Xp4NW Flickr: http://bit.ly/1Jywk1 Livros http://oreil.ly/N7LH6b http://oreil.ly/pnKqJG http://oreil.ly/LwjPXd 07/07/2012 The Developer's Conference 67
  • 68. Obrigado! @filaruina Agradecimentos: ● @alganet e @duodraco pela oportunidade ● @searleoliveira pela ajuda com MySql ● @zanaca pela lembrança da arquitetura do Bolsa de Mulher ● @igorpsantos pela ajuda com a Infra 07/07/2012 The Developer's Conference 68