clusterização de aplicações php

26
Clusterização de Aplicações PHP PHP Diego Thomaz Flores

Upload: campus-party-brasil

Post on 21-Jun-2015

1.294 views

Category:

Technology


0 download

DESCRIPTION

Clusterização de aplicações PHP

TRANSCRIPT

Page 1: ClusterizaçãO De AplicaçõEs Php

Clusterização de Aplicações

PHPPHP

Diego Thomaz Flores

Page 2: ClusterizaçãO De AplicaçõEs Php

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

Page 3: ClusterizaçãO De AplicaçõEs Php

AGENDA

• Camadas de Execução

• Webserver

• Database

• Codificação• Codificação

• Cache

• Load Balance

• Client-side scripting

Page 4: ClusterizaçãO De AplicaçõEs Php

Para fazer uma aplicação rodar bem numa estrutura clusterizada, ela precisa ser estrutura clusterizada, ela precisa ser escrita para uma estrutura clusterizada!

Page 5: ClusterizaçãO De AplicaçõEs Php

• Conteúdo estático

• Scripts e bibliotecas client-side

• Scripts server-side

• Banco de Dados

• Webserver

CAMADAS DE EXECUÇÃO

• Webserver

Page 6: ClusterizaçãO De AplicaçõEs Php

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)

Page 7: ClusterizaçãO De AplicaçõEs Php

WEBSERVER

APACHE PREFORK

• Grande consumo de memória

• Rápido

APACHE WORKER

• Menor consumo de memória

• Apache 2.0+

• Mais escalável• Pouco escalável

• Até 2 CPUs

• Mais escalável

• Multi-thread

• 2 CPUs ou mais

Page 8: ClusterizaçãO De AplicaçõEs Php

WEBSERVER

OUTRAS OPÇÕES: servidores mais leves

• lighttpd

• tux•

• thttpd

• nginx

Page 9: ClusterizaçãO De AplicaçõEs Php

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.

Page 10: ClusterizaçãO De AplicaçõEs Php

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

Page 11: ClusterizaçãO De AplicaçõEs Php

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

Page 12: ClusterizaçãO De AplicaçõEs Php

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

Page 13: ClusterizaçãO De AplicaçõEs Php

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()

Page 14: ClusterizaçãO De AplicaçõEs Php

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

Page 15: ClusterizaçãO De AplicaçõEs Php

CODIFICAÇÃO

DESIGN PATTERNS

BOAS PRÁTICASAtenção aos tempos de processamento das funções nativas

Aspas simples vs. aspas duplasAspas simples vs. aspas duplas

Defina apenas as variáveis que fazem sentido

OPCode OTIMIZADOPECL::APC

Xcache

Zend Platform

Page 16: ClusterizaçãO De AplicaçõEs Php

CACHE

STORAGE: formas de implementação

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

• CENTRALIZADOFácil, mas Single Point of Failure

• DISTRIBUÍDODifícil, porém correto e elegante

Page 17: ClusterizaçãO De AplicaçõEs Php

CACHE

MEMORY: memcached

• Data cache

• View cache

• PECL::memcache (3.0.2+ para redundância)

Page 18: ClusterizaçãO De AplicaçõEs Php

CACHE

PECL::memcache->SESSION

• INDIVIDUALStickyness: o usuário #1 acessa sempre o server #1

• CENTRALIZADOConsistente, mas Single Point of Failure

• DISTRIBUÍDOReplicação e redundância

Page 19: ClusterizaçãO De AplicaçõEs Php

LOAD BALANCE

Page 20: ClusterizaçãO De AplicaçõEs Php

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

Page 21: ClusterizaçãO De AplicaçõEs Php

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)

Page 22: ClusterizaçãO De AplicaçõEs Php

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

Page 23: ClusterizaçãO De AplicaçõEs Php

CLIENT-SIDE SCRIPTING

COMPRESSÃO DE JAVASCRIPT

Page 24: ClusterizaçãO De AplicaçõEs Php

CLIENT-SIDE SCRIPTING

COMPRESSÃO DE JAVASCRIPT

Page 25: ClusterizaçãO De AplicaçõEs Php

REFERÊNCIAS

• PHP Architect - Volume 8, Issue 3, March 2009

http://www.phparch.com

• SCHLOSSNAGLE, George. Advanced PHP Programming. Sams, 2004.• 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

Page 26: ClusterizaçãO De AplicaçõEs Php

Obrigado!

@diegotf

[email protected]