Desenvolvendo aplicações Web escaláveis. Elton Luís Minetto



Documentos relacionados
Criação de um Ambiente Web de Alto Desempenho para o Portal do CEULP/ULBRA

Transações Seguras em Bancos de Dados (MySQL)

Tuning Apache/MySQL/PHP para Desenvolvedores. By Douglas V. Pasqua Zend Certified Engineer / LPI / SCJP douglas.pasqua@gmail.com

Programando em PHP. Conceitos Básicos

Curso de Aprendizado Industrial Desenvolvedor WEB

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Programação Web Prof. Wladimir

ENHANCED SERVER FAULT- TOLERANCE FOR IMPROVED USER EXPERIENCE. André Esteves nº3412 David Monteiro

MELHORANDO O DESEMPENHO DO SEU WORDPRESS JULIAN FERNANDES TIAGO HILLEBRANDT

Zend Framework. Elton Luís Minetto

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro

Prof. Luiz Fernando Bittencourt MC714. Sistemas Distribuídos 2 semestre, 2013

Comparativo de desempenho do Pervasive PSQL v11

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração

Manual do Painel Administrativo

Administração de Banco de Dados

Administração de Banco de Dados

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

SISTEMAS DISTRIBUÍDOS

MÓDULO 11 ELEMENTOS QUE FAZEM PARTE DO PROJETO DO SISTEMA

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I


08/04/2013. Agenda. O Sistema CACHÉ. O Sistema CACHÉ. O Sistema CACHÉ. O Sistema CACHÉ

FACULDADE SENAC-RS PELOTAS RODRIGO ALMEIDA PEREIRA. Sistemas de Informação

Universidade Federal de Goiás Ciências da Computação Sistemas Operacionais 2

Práticas de Desenvolvimento de Software

2 echo "PHP e outros.";

Desenvolvimento orientado a objetos com PEAR: DB/MDB2, DB_DataObject, HTML_QuickForm e DB_DataObjectFormBuilder

Programação e Designer para WEB

INTRODUÇÃO À OTIMIZAÇÃO

Arquitetura de Banco de Dados

Fundamentos de Banco de Dados

Otimização de infraestrutura. de websites. Fabiano Weimar dos Santos

Introdução ao PHP. Prof. Késsia Marchi

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Google Android para Tablets

Sistemas Distribuídos

Conteúdo Programático de PHP

Oficina. Praça das Três Caixas d Água Porto Velho - RO

Piwik Uma alternativa livre ao Google Analytics

ServerAdmin - Se o sistema detectar algo de anômalo, um mail será enviado a bazar@projeointegador.

Programação para Web Artefato 01. AT5 Conceitos da Internet

GUIA DE CONFIGURAÇÃO CONEXÕES VPN SSL (CLIENT TO SERVER)

DESENVOLVIMENTO DE SOFTWARE DE VOTAÇÃO WEB UTILIZANDO TECNOLOGIA TOUCHSCREEN

Introdução a PHP (Um Programa PHP)

Meu site Plone está lento. O que fazer? Fabiano Weimar dos Santos xiru@xiru.org

Informática I. Aula 5. Aula 5-13/05/2006 1

Apresentação. Objetivo. Dados Principais. Tecnologia Abordada Administração de Banco de Dados MySQL

Introdução à Linguagem Java

Desenvolvimento de Aplicações para Internet Aula 11

World Wide Web e Aplicações

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

PHP AULA1. Prof. Msc. Hélio Esperidião

Disciplina: Unidade V: Prof.: Período:

AMBIENTE WEB PARA GERÊNCIA DE PROCESSO DE SOFTWARE BASEADO NO SCRUM

Projeto Disciplinar de Infra-Estrutura de Software ECOFROTA TRIBUNAL THEMIS

ANÁLISE DE SITES EDUCACIONAIS PELO PROFESSOR E PELO ALUNO

MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS

Servidor, Proxy e Firewall. Professor Victor Sotero

Desempenho de Web Servers

Uma solução de desempenho para a distribuição de documentos: Habilitando a distribuição de documentos em tempo real para corporações globais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Servidor proxy - Squid PROFESSOR : RENATO WILLIAM

JDBC Java Database Connectivity

Entendendo como funciona o NAT

Endereço de Rede. Comumente conhecido como endereço IP Composto de 32 bits comumente divididos em 4 bytes e exibidos em formato decimal

UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor.

Escrito por Sáb, 15 de Outubro de :19 - Última atualização Seg, 26 de Março de :32

Tempo de Resposta em Sub-Segundos com o novo MicroStrategy 10 In-Memory Analytics. Anderson Santos, Sales Engineer Brazil

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Engenharia de software 2011A. Trabalho sobre

Novell Vibe 3.4. Novell. 1º de julho de Inicialização Rápida. Iniciando o Novell Vibe. Conhecendo a interface do Novell Vibe e seus recursos

Gerência de Redes. Profa. Márcia Salomão Homci

Índice. 3 Capítulo 1: Visão Geral do Blog. 4 Capítulo 2: SEO. 5 Capítulo 3: Backend: Como Funciona. Visão Geral Plataforma Frontend Backend

Integrantes: Catarino Rodrigues Data: 26/10/2012. Leandro de Matos Pereira. Leandro dos Santos Marciano. Ramon Alves de Souza

Desenvolvimento de Grandes Aplicações Web

Módulo 6 Usando a Internet. Internet. 3.1 Como tudo começou

Índice de audiência no jornalismo digital

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS -ARQUITETURAS DE APLICAÇÃO MÓVEL. Prof. Angelo Augusto Frozza, M.Sc.

Introdução ao Modelos de Duas Camadas Cliente Servidor

PHP (Seções, Cookies e Banco de Dados)

Automação de Locais Distantes

PARANÁ GOVERNO DO ESTADO

Banco de Dados. Professor: Rômulo César.

Processos Técnicos - Aulas 4 e 5

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Linguagem de Programação III Aula 2 Revisão Parte II

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Universidade Federal do Espírito Santo CCA UFES. Centro de Ciências Agrárias CCA UFES Departamento de Computação. Programação WEB

Criando, inserindo e exibindo PHP+MySql

Transcrição:

Desenvolvendo aplicações Web escaláveis Elton Luís Minetto

Quem? Graduado e pós-graduado em Ciência da Computação. Cursando MBA em Gerenciamento de Projetos Trabalha com PHP desde 2000 Autor do livro Frameworks para Desenvolvimento em PHP - Editora Novatec Membro do PHPSC Gerente de Desenvolvimento da Drimio e professor na Sociesc (Joinville)/Unochapecó(Chapecó)

Terminologia Performance: a habilidade que uma aplicação tem de atingir um objetivo, como por exemplo responder no menor tempo possível Capacidade: a carga total que uma aplicação pode suportar Escalabilidade: a habilidade de uma aplicação manter a performance quando a carga de trabalho aumenta. É a junção da capacidade e da performance

Ou

Ou... Performance: a velocidade do carro Capacidade: o limite de velocidade e o número de pistas da estrada Escalabilidade: quantos carros e pistas eu posso adicionar sem diminuir a velocidade do tráfego Performance is a problem. Scaling your performance is a bigger problem

Camadas

Web Servers Apache: Prefork X Worker Prefork Usa fork(). Cada processo filho trata uma conexão Grande uso de memória Rápido Bom para até duas CPUs Worker Apache 2.0 e superior Múltiplas threads dentro de cada filho (poucos filhos) Diminui o uso de memória Mais escalável Melhor com múltiplos processadores

Web Servers Usar servidores dedicados para conteúdo estático (Flickr) Apache pode ser substituído por outro mais leve: lighttpd, tux, thttpd Usar domínios diferentes para conteúdo estático e dinâmico. Exemplo: http://www.drimio.com (Servidor Apache) http://static.drimio.com (Servidor lighttpd) Usa a possibilidade dos navegadores acessarem múltiplos domínios ao mesmo tempo. Não sobrecarrega o servidor de conteúdo dinâmico

MySQL Nenhum dos problemas de escalabilidade que enfrentaram era relacionado com PHP. Os maiores problemas encontrados eram relacionados com base de dados (Digg) Sharding é usado para quebrar a base de dados em várias porções menores (Digg) Fazer o tunning do MySQL durante a escolha da engine de armazenamento das tabelas. Usar InnoDB quando precisa de transações e MyISAM quando não precisa (Digg)

MySQL Desnormalização ou cacheamento são as únicas formas de gerar uma tag cloud em milissegundos para milhões de tags (Flickr) Não usar conexões persistentes ao banco de dados (Friendster)

MySQL Usar replicação Master-Slave. Dividir a carga entre servidores. As requisições de modificação (INSERT, UPDATE,DELETE) podem ser enviadas para o Master. Os dados são replicados para os Slaves. As requisições de leitura (SELECT) são enviadas direto para os Slave Usar o tipo correto de dados na tabela: INT x SMALLINT x TINYINT CHAR x VARCHAR

MySQL Master-Slave tem o problema do tempo de sincronização. Resposta: sharding. Uma base de dados pode ser sharded por tabelas, dados ou faixas (ranges). É similar ao particionamento, mas possui algumas diferenças. Sharding envolve separar os dados em máquinas fisicamente distintas, enquanto que particionamento geralmente ocorre em mesmo hardware. MySQL não suporta nativamente sharding, mas sim tabelas particionadas, tabelas federadas (federated) e clusters.

PHP Usar boas práticas de programação echo é mais rápido que print require_once() é lento etc,etc http://reinholdweber.com/?p=3 http://www.devolio.com/blog/archives/314-practical-andimpractical-php-optimizations.html

PHP PHP tem um compilador JIT que gera um código intermedário chamado opcode que é então interpretado. Por default essa compilação ocorre em todas as execuções do script. Para otimização e caching desse opcode, existem algumas soluções: Pacote APC do PECL XCache Zend Platform ($$$)

Cache Memcached: é um sistema de cache de objetos em memória distribuída de alta performance.ele foi desenvolvido de maneira que se consiga armazenar qualquer tipo de informação mas é largamente usado em aplicações web para armazenar conteúdos como resultados de queries SQL, sessões de usuários, arquivos CSS, etc. É possível criar memcached farms, aumentando a escalabilidade

Cache <?php //exemplo usando cliente PECL $memcache = new Memcache; $memcache- >connect('localhost', 11211) or die ("Could not connect"); $version = $memcache->getversion(); echo "Server's version: ".$version."<br/>\n"; $tmp_object = new stdclass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) ; echo "Store data in the cache (data will expire in 10 seconds) <br/>\n"; $get_result = $memcache->get('key'); echo "Data from the cache:<br/>\n"; var_dump($get_result);?>

80-90% of the end-user response time is spent on the frontend.

Javascript Algumas pessoas reclamam que o Digg é lento. Mas isso é mais devido ao uso de grandes bibliotecas javascript e não da arquitetura de backend (Digg) JavaScript pode ser comprimido http://developer.yahoo.com/yui/compressor/ Usar compresão no Apache.

Bibliotecas Javascript

Bibliotecas Javascript

Imagens Editores de imagens possuem grandes ferramentas para otimizar o tamanho do arquivo sem perder qualidade visual. Mesmo assim elas adicionam informações extra no documento, como nome da ferramenta, data de criação, etc. O site Smushit.com permite fazer upload de uma imagem ou indicar uma URL com a imagem a ser otimizada. Lançado em 10/2008 por pesquisadores do Yahoo! Exceptional Performance Team.

Métricas

Métricas

Métricas

Ferramentas Apache ab,siege (aplicação) Ganglia,Nagios (S.O. e serviços) Firebug e YSlow (javascript, aplicação) Xdebug (profiling do PHP) Outras...

Arquitetura Load Balancers Cache servers Bancos de dados Master/Slave, Sharding Scale-Out Wins Over Scale- Up (escalar horizontalmente adicionando mais máqui nas é melhor do que verticalmente adicionando mais memória/cpu)

Arquitetura Sobre o Youtube: Eles seguiram uma evolução comum: servidor único, único master e múltiplos slaves para leitura, depois particionaram a base de dados e finalmente usaram uma abordagem baseada em sharding.

Arquitetura

Arquitetura Observações Como agora um cliente pode ser atendido por diversos servidores Web durante o uso, as sessões dos usuários devem ser salvas no banco de dados ou nos servidores de cache (Memcached) O MySQL Master é um SPOF( Single Point of Failure) adicionar mais Masters em um esquema de replicação Master/Master. Ou usar sharding Diversos servidores de cache podem ser adicionados

Lições Aprendidas Dividir a carga Usar servidores dedicados para conteúdo estático Ao invés de comprar máquinas grandes e centralizadas, é melhor comprar um monte de pequenas e baratas. Base de dados é um gargalo. Atacar e corrigir consultas lentas Coletar várias estatísticas de performance Usar InnoDB quando precisa de transações e MyISAM quando não precisa

Lições Aprendidas Fazer medições realísticas. Capacity planning deve ser feito baseado em dados reais e não abstratos. Começar lentamente. Não comprar muito equipamento apenas porque está apavorado/feliz com o fato de que o seu site vai explodir. Descobrir o máximo de cada servidor para poder saber se está perto do limite

Receita para tratar crescimento rápido while (true) { identify_and_fix_bottlenecks(); } drink(); sleep(); notice_new_bottleneck(); Fonte: YouTube Team

Referências http://developer.yahoo.com/performance/ http://highscalability.com/unorthodox-approachdatabase-design-coming-shard http://blog.feliperibeiro.com/2008/04/slides-dapalestra-php-para-desenvolvimento-de-aplicacoes-degrande-porte.html http://www.xdebug.org http://devzone.zend.com/content/zendcon_07_slides/ White_Eli_zendcon-2007-high-perf.pdf http://jst.pbwiki.com/ http://www.slideshare.net/jallspaw/velocity2008- capacity-management1-484676

Perguntas?

Contato <?php $card = array( nome => Elton Luís Minetto, site => http://www.eltonminetto.net, e-mail => elton.minetto@drimio.com, fone => (47) 9189 6359 ); var_dump($card);?>