clusterização de aplicações php

Post on 21-Jun-2015

1.294 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Clusterização de aplicações PHP

TRANSCRIPT

Clusterização de Aplicações

PHPPHP

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 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• Codificação

• Cache

• Load Balance

• Client-side scripting

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

• Conteúdo estático

• Scripts e bibliotecas client-side

• Scripts server-side

• Banco de Dados

• Webserver

CAMADAS DE EXECUÇÃO

• 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

• 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

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

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

CACHE

MEMORY: memcached

• Data cache

• View cache

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

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

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

top related