SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Clusterização de
   Aplicações
      PHP
    Diego Thomaz Flores
QUEM?
Analista e programador PHP há 8 anos, já
desenvolveu projetos para o Ministério do
Turismo, EMBRATUR, Fundação Getúlio Vargas,
Telefonica e Agência Click e Folha de São Paulo.

É Gerente de Projetos na 3YZ Performance Digital,
em Porto Alegre, agência especializada em
marketing e posicionamento online de marcas.

É responsável pela ECRAYON Tecnologia Criativa,
estúdio de desenvolvimento de sistemas web-
based.
AGENDA

•   Camadas de Execução
•   Webserver
•   Database
•   Codificação
•   Cache
•   Load Balance
•   Client-side scripting
Para fazer uma aplicação rodar bem numa
estrutura clusterizada, ela precisa ser
escrita para uma estrutura clusterizada!
CAMADAS DE EXECUÇÃO
• Conteúdo estático
• Scripts e bibliotecas client-side
• Scripts server-side
• Banco de Dados
• Webserver
WEBSERVER
DISTRIBUIÇÃO DE CONTEÚDO

Diferentes domínios para diferentes tipos de conteúdos
      http://www.exemplo.com        (PHP, dinâmico)
      http://estatico.exemplo.com (imagens, CSS, HTML, documentos)
WEBSERVER
APACHE PREFORK                APACHE WORKER

• Grande consumo de memória   • Menor consumo de memória
• Rápido                      • Apache 2.0+
• Pouco escalável             • Mais escalável
• Até 2 CPUs                  • Multi-thread
                              • 2 CPUs ou mais
WEBSERVER
OUTRAS OPÇÕES: servidores mais leves


  • lighttpd
  • tux
  • thttpd
  • nginx
Aplicações web geralmente não utilizam
processos que comprometam o
processamento, porém geram milhares de
dados e queries.

Dessa forma, em aplicações bem escritas, o
mais provável é que a base de dados entre
em colapso primeiro.
DATABASE
DIMENSIONAMENTO E TIPIFICAÇÃO CORRETA DOS DADOS

   INT, TINYINT, BIGINT, FLOAT, DOUBLE
   CHAR, VARCHAR, TEXT, BLOG



InnoDB vs. MyISAM

   InnoDB -> Foreign Keys, Constraints, Transactions
   MyISAM -> Data storage
DATABASE
READ-TO-WRITE RATIO – R2W

A parte mais importante na clusterização da base de dados é a
definição da taxa de leitura por escrita (read-to-write ratio).

            R2W > 30 reads = Configuração Master-Slave
DATABASE
CONFIGURAÇÃO MASTER-MASTER

    • Utilizada para problemas de storage
    • Exige atenção nas Primary Keys (par-ímpar)
    • Não indicada para mais de 2 servidores
DATABASE
CONFIGURAÇÃO MASTER-SLAVE

UP SIDE
      • SELECT são executadas no Slave
      • INSERT, UPDATE, DELETE são executadas no Master

DOWN SIDE
   • Lag de sincronização
   • Lag de replicação
           Evite funções resolvidas em tempo de execução: NOW()
DATABASE
SHARDING: ‘particionando’ o banco de dados

UP SIDE
      • Aplicável em schemas, tables e rows
      • Distribui os dados de maneira organizada
      • Cria um modelo semântico

DOWN SIDE
   • Exige máquinas fisicamente distintas
   • Impede JOINs entre elementos em máquinas diferentes
CODIFICAÇÃO
DESIGN PATTERNS

BOAS PRÁTICAS
     Atenção aos tempos de processamento das funções nativas
     Aspas simples vs. aspas duplas
     Defina apenas as variáveis que fazem sentido


OPCode OTIMIZADO
     PECL::APC
     Xcache
     Zend Platform
CACHE
STORAGE: formas de implementação

    • INDIVIDUAL
          Fácil, mas com diferença de conteúdo por tempo de execução


    • CENTRALIZADO
          Fácil, mas Single Point of Failure


    • DISTRIBUÍDO
          Difícil, porém correto e elegante
CACHE
MEMORY: memcached

    • Data cache
    • View cache
    • PECL::memcache (3.0.2+ para redundância)
CACHE
PECL::memcache->SESSION

    • INDIVIDUAL
          Stickyness: o usuário #1 acessa sempre o server #1


    • CENTRALIZADO
          Consistente, mas Single Point of Failure


    • DISTRIBUÍDO
          Replicação e redundância
LOAD BALANCE
LOAD BALANCE
ROUND-ROBIN DNS
    • Não garante tolerância a falhas nem alta disponibilidade

SOFTWARES ESPECIALIZADOS
    • Geralmente exigem redundância de dados, aumentando o
      custo total em função de hardware

CAPACITY PLANNING
    • Precisam ser definidos a partir de dados reais e não por
      estimativas
LOAD BALANCE
STRESS TEST
     • Em ambiente de homologação e produção

MONITORAMENTO E DEFINIÇÃO DE ESTATÍSTICAS
   • Apache ab, Siege (aplicação)
   • Ganglia, Nagios (OS e serviços)
   • Firebug, YSlow (client-side)
   • Xdebug           (server-side)
CLIENT-SIDE SCRIPTING
BENCHMARKING DE BIBLIOTECAS
    • Nem sempre a mais famosa tem melhor performance

USO CORRETO DOS TIPOS DE IMAGENS
     • JPG, GIF, PNG: cada um tem sua hora e local
     • Exportação e recorte para web fazem bem
CLIENT-SIDE SCRIPTING
COMPRESSÃO DE JAVASCRIPT
CLIENT-SIDE SCRIPTING
COMPRESSÃO DE JAVASCRIPT
REFERÊNCIAS
•   PHP Architect - Volume 8, Issue 3, March 2009
    http://www.phparch.com



• SCHLOSSNAGLE, George. Advanced PHP Programming. Sams, 2004.



•   MINETTO, Elton Luís. Desenvolvendo aplicações web escaláveis
    http://www.eltonminetto.net/docs/app_web_escalaveis_xxe.pdf
Obrigado!
     @diegotf
diegotf@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Jud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinJud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinserjaumfantin
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...Bruno Luiz Pereira da Silva
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)Aryel Tupinambá
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...Aryel Tupinambá
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1Daniel Lopes
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Aryel Tupinambá
 
PHP Conference 2015: Construindo e mantendo aplicações multi-tenant (multi-c...
PHP Conference 2015:  Construindo e mantendo aplicações multi-tenant (multi-c...PHP Conference 2015:  Construindo e mantendo aplicações multi-tenant (multi-c...
PHP Conference 2015: Construindo e mantendo aplicações multi-tenant (multi-c...Aryel Tupinambá
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - AvançadoAdriano Schmidt
 
Arquitetura Web no AWS
Arquitetura Web no AWSArquitetura Web no AWS
Arquitetura Web no AWSRafael Nunes
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyRicardo Faria
 
Quando o planejamento da infraestrutura leva ao sucesso
Quando o planejamento da infraestrutura leva ao sucessoQuando o planejamento da infraestrutura leva ao sucesso
Quando o planejamento da infraestrutura leva ao sucessoIvan Rosolen
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorZabbix BR
 
Plataforma do clic rbs
Plataforma do clic rbsPlataforma do clic rbs
Plataforma do clic rbsLincolm Aguiar
 

Was ist angesagt? (20)

Jud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinJud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantin
 
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
 
SQL Server over SMB3
SQL Server over SMB3SQL Server over SMB3
SQL Server over SMB3
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
 
PHP Conference 2015: Construindo e mantendo aplicações multi-tenant (multi-c...
PHP Conference 2015:  Construindo e mantendo aplicações multi-tenant (multi-c...PHP Conference 2015:  Construindo e mantendo aplicações multi-tenant (multi-c...
PHP Conference 2015: Construindo e mantendo aplicações multi-tenant (multi-c...
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
PostgreSQL Ha
PostgreSQL HaPostgreSQL Ha
PostgreSQL Ha
 
Arquitetura Web no AWS
Arquitetura Web no AWSArquitetura Web no AWS
Arquitetura Web no AWS
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendly
 
Inovacao em-escala-final
Inovacao em-escala-finalInovacao em-escala-final
Inovacao em-escala-final
 
Quando o planejamento da infraestrutura leva ao sucesso
Quando o planejamento da infraestrutura leva ao sucessoQuando o planejamento da infraestrutura leva ao sucesso
Quando o planejamento da infraestrutura leva ao sucesso
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
 
Plataforma do clic rbs
Plataforma do clic rbsPlataforma do clic rbs
Plataforma do clic rbs
 

Ähnlich wie Clusterização de Aplicações PHP

Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Migrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRMigrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRAmazon Web Services LATAM
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?Pedro Pisa
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Rafael Schettino
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobilenipjc
 
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...iMasters
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA CareerMarcus Vinicius Miguel Pedro
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemAmazon Web Services LATAM
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureFabrício Lopes Sanchez
 
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...CPqD
 

Ähnlich wie Clusterização de Aplicações PHP (20)

Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Migrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRMigrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMR
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?AWS Meetup Rio - Qual banco usar e quando?
AWS Meetup Rio - Qual banco usar e quando?
 
BIG DATA na UFSM
BIG DATA na UFSMBIG DATA na UFSM
BIG DATA na UFSM
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Introducao ao Amazon Redshift
Introducao ao Amazon RedshiftIntroducao ao Amazon Redshift
Introducao ao Amazon Redshift
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobile
 
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvem
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
 
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
Projeto InterVoIP - Arquitetura - I Workshop CPqD de Inovação Tecnológica em ...
 

Kürzlich hochgeladen

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Clusterização de Aplicações PHP

  • 1. Clusterização de Aplicações PHP Diego Thomaz Flores
  • 2. QUEM? Analista e programador PHP há 8 anos, já desenvolveu projetos para o Ministério do Turismo, EMBRATUR, Fundação Getúlio Vargas, Telefonica e Agência Click e Folha de São Paulo. É Gerente de Projetos na 3YZ Performance Digital, em Porto Alegre, agência especializada em marketing e posicionamento online de marcas. É responsável pela ECRAYON Tecnologia Criativa, estúdio de desenvolvimento de sistemas web- based.
  • 3. AGENDA • Camadas de Execução • Webserver • Database • Codificação • Cache • Load Balance • Client-side scripting
  • 4. Para fazer uma aplicação rodar bem numa estrutura clusterizada, ela precisa ser escrita para uma estrutura clusterizada!
  • 5. CAMADAS DE EXECUÇÃO • Conteúdo estático • Scripts e bibliotecas client-side • Scripts server-side • Banco de Dados • Webserver
  • 6. WEBSERVER DISTRIBUIÇÃO DE CONTEÚDO Diferentes domínios para diferentes tipos de conteúdos http://www.exemplo.com (PHP, dinâmico) http://estatico.exemplo.com (imagens, CSS, HTML, documentos)
  • 7. WEBSERVER APACHE PREFORK APACHE WORKER • Grande consumo de memória • Menor consumo de memória • Rápido • Apache 2.0+ • Pouco escalável • Mais escalável • Até 2 CPUs • Multi-thread • 2 CPUs ou mais
  • 8. WEBSERVER OUTRAS OPÇÕES: servidores mais leves • lighttpd • tux • thttpd • nginx
  • 9. Aplicações web geralmente não utilizam processos que comprometam o processamento, porém geram milhares de dados e queries. Dessa forma, em aplicações bem escritas, o mais provável é que a base de dados entre em colapso primeiro.
  • 10. DATABASE DIMENSIONAMENTO E TIPIFICAÇÃO CORRETA DOS DADOS INT, TINYINT, BIGINT, FLOAT, DOUBLE CHAR, VARCHAR, TEXT, BLOG InnoDB vs. MyISAM InnoDB -> Foreign Keys, Constraints, Transactions MyISAM -> Data storage
  • 11. DATABASE READ-TO-WRITE RATIO – R2W A parte mais importante na clusterização da base de dados é a definição da taxa de leitura por escrita (read-to-write ratio). R2W > 30 reads = Configuração Master-Slave
  • 12. DATABASE CONFIGURAÇÃO MASTER-MASTER • Utilizada para problemas de storage • Exige atenção nas Primary Keys (par-ímpar) • Não indicada para mais de 2 servidores
  • 13. DATABASE CONFIGURAÇÃO MASTER-SLAVE UP SIDE • SELECT são executadas no Slave • INSERT, UPDATE, DELETE são executadas no Master DOWN SIDE • Lag de sincronização • Lag de replicação Evite funções resolvidas em tempo de execução: NOW()
  • 14. DATABASE SHARDING: ‘particionando’ o banco de dados UP SIDE • Aplicável em schemas, tables e rows • Distribui os dados de maneira organizada • Cria um modelo semântico DOWN SIDE • Exige máquinas fisicamente distintas • Impede JOINs entre elementos em máquinas diferentes
  • 15. CODIFICAÇÃO DESIGN PATTERNS BOAS PRÁTICAS Atenção aos tempos de processamento das funções nativas Aspas simples vs. aspas duplas Defina apenas as variáveis que fazem sentido OPCode OTIMIZADO PECL::APC Xcache Zend Platform
  • 16. CACHE STORAGE: formas de implementação • INDIVIDUAL Fácil, mas com diferença de conteúdo por tempo de execução • CENTRALIZADO Fácil, mas Single Point of Failure • DISTRIBUÍDO Difícil, porém correto e elegante
  • 17. CACHE MEMORY: memcached • Data cache • View cache • PECL::memcache (3.0.2+ para redundância)
  • 18. CACHE PECL::memcache->SESSION • INDIVIDUAL Stickyness: o usuário #1 acessa sempre o server #1 • CENTRALIZADO Consistente, mas Single Point of Failure • DISTRIBUÍDO Replicação e redundância
  • 20. LOAD BALANCE ROUND-ROBIN DNS • Não garante tolerância a falhas nem alta disponibilidade SOFTWARES ESPECIALIZADOS • Geralmente exigem redundância de dados, aumentando o custo total em função de hardware CAPACITY PLANNING • Precisam ser definidos a partir de dados reais e não por estimativas
  • 21. LOAD BALANCE STRESS TEST • Em ambiente de homologação e produção MONITORAMENTO E DEFINIÇÃO DE ESTATÍSTICAS • Apache ab, Siege (aplicação) • Ganglia, Nagios (OS e serviços) • Firebug, YSlow (client-side) • Xdebug (server-side)
  • 22. CLIENT-SIDE SCRIPTING BENCHMARKING DE BIBLIOTECAS • Nem sempre a mais famosa tem melhor performance USO CORRETO DOS TIPOS DE IMAGENS • JPG, GIF, PNG: cada um tem sua hora e local • Exportação e recorte para web fazem bem
  • 25. REFERÊNCIAS • PHP Architect - Volume 8, Issue 3, March 2009 http://www.phparch.com • SCHLOSSNAGLE, George. Advanced PHP Programming. Sams, 2004. • MINETTO, Elton Luís. Desenvolvendo aplicações web escaláveis http://www.eltonminetto.net/docs/app_web_escalaveis_xxe.pdf
  • 26. Obrigado! @diegotf diegotf@gmail.com