1) O documento apresenta informações sobre um PHP Summer School ministrado por Nuno Loureiro, incluindo sua experiência e sobre desempenho de aplicações;
2) O documento discute arquitetura de desempenho cobrindo tópicos como conteúdo estático vs dinâmico, webservers, compressão e otimizações;
3) O documento também aborda otimizações no PHP como profiling, caching e escolha de código, além de bases de dados.
Infraestrutura em nuvem com Amazon Web Services (AWS)Infosimples
Esta apresentação foi feita para um minicurso na Escola Politécnica da USP administrado pela Infosimples. Foram discutidos temas de Infraestrutura com foco em escalabilidade e redundância. Também foram apresentadas as opções comerciais de contratação de infraestrutura. Por fim, uma atividade prática de publicação (deployment) de uma aplicação web foi realizada.
https://infosimples.com/artigos/como-publicar-uma-aplicacao-web-usando-aws
Instalação do CakePHP 2.2.3 tanto em linux quanto windows.
Este Slide faz parte do Minucurso Apresentado na Semana De Analise de Sistemas da Faculdade Guairacá
Tecnologias Web 2.0
JavaScript | jQuery | AJAX | XML | PHP | ASP.NET
Trabalho de pesquisa realizado no âmbito do módulo web 2.0
Curso de Especialização Tecnológica - Especialista em Desenvolvimento de Produtos Multimédia
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
Nessa apresentação eu descrevo o quanto eu gosto do Ruby e do Rails, mas onde ele pode não ser a melhor opção. NodeJS é uma tecnologia de certa forma recente, mas que pode cobrir algumas lacunas que o Ruby e Rails não fazem tão bem.
Infraestrutura em nuvem com Amazon Web Services (AWS)Infosimples
Esta apresentação foi feita para um minicurso na Escola Politécnica da USP administrado pela Infosimples. Foram discutidos temas de Infraestrutura com foco em escalabilidade e redundância. Também foram apresentadas as opções comerciais de contratação de infraestrutura. Por fim, uma atividade prática de publicação (deployment) de uma aplicação web foi realizada.
https://infosimples.com/artigos/como-publicar-uma-aplicacao-web-usando-aws
Instalação do CakePHP 2.2.3 tanto em linux quanto windows.
Este Slide faz parte do Minucurso Apresentado na Semana De Analise de Sistemas da Faculdade Guairacá
Tecnologias Web 2.0
JavaScript | jQuery | AJAX | XML | PHP | ASP.NET
Trabalho de pesquisa realizado no âmbito do módulo web 2.0
Curso de Especialização Tecnológica - Especialista em Desenvolvimento de Produtos Multimédia
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
Nessa apresentação eu descrevo o quanto eu gosto do Ruby e do Rails, mas onde ele pode não ser a melhor opção. NodeJS é uma tecnologia de certa forma recente, mas que pode cobrir algumas lacunas que o Ruby e Rails não fazem tão bem.
Living With Passwords: Personal Password ManagementNuno Loureiro
Living with passwords. How can you manage your passwords and what the alternatives are. Password managers, two-factor authentication, OTPs, smart cards and NFC are some of the covered topics.
Introduction to blockchain and crypto currenciesRohas Nagpal
The Blockchain technology has received tremendous attention over the last couple of years.Key benefits of blockchains include immutability and decentralisation.
Reserve Bank of India has said that "With its potential to fight counterfeiting, the 'blockchain' is likely to bring about a major transformation in the functioning of financial markets, collateral identification (land records for instance) and payments system".
This presentation introduces the blockchain technology.
Presentation as given at the 3rd annual B2B Marketing Forum of SpotOn Vision and NIMA on the main outcomes of the CMO study and some implications at IBM
Protecting Your Web SiteFrom SQL Injection & XSSskyhawk133
The UNM Information Architects and the UNM Arts LAB invite you to to a presentation by ABQ Web Geeks' own Chris Kenworthy at the UNM SUB this Wednesday the 27th of August.
Chris will be discussing SQL Injection and Cross Site Scripting Vulnerabilities.
These types of attacks against websites are both common and potentially devastating. Chris will bring us up to speed on them and give us some tips on how to prevent them.
Please mark your calendars for Wednesday, August 27 from 10:00 - 11:30 at the UNM Student Union Building, Lobo Rooms A & B.
Presentation of March 21st and 22nd during EMERCE Digital Marketing Live with Marco Mur of Rabobank on their first experiences with behavorial targetting
Show the reader the potential damage that a SQL injection vulnerability can make. Show evading techniques to some filters. Show some common mistakes that the programmers make when protecting their sites. Show the best practices to protect your code.
Lightning talk falando muito superficialmente sobre escalabilidade, tentando prover o básico de informação para melhorar a escalabilidade e performance dos sistemas escritos com PHP.
Falando desde
Escrevi este mini curso de PHP que abrange desde o nível inicial básico até o intermediário/avançado. Este mini curso foi apresentado durante o evento WISM 2013, organizado pela PUC Minas Poços de Caldas, MG.
Pauta:
1. Introdução ao PHP;
2. Configuração do ambiente para desenvolvimento;
3. Variáveis em PHP;
4. Comandos Condicionais e Controle de fluxo;
5. Controle de fluxo: Switch;
6. Controle de fluxo: Laços de repetição;
7. Arrays em PHP;
8. Funções em PHP;
9. PHP e Banco de Dados MySQL;
10. PHP Orientado a Objetos;
11.Visão Geral: Frameworks PHP;
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
Apresentação de pesquisa onde é feita uma revisão bibliográfica sobre a linguagem de programação Ruby e o arcabouço Ruby on Rails, os quais são utilizados para o desenvolvimento ágil de aplicações para plataforma web. Nesta são analisados diversos requisitos necessários para o desenvolvimento de aplicações eficientes e de forma produtiva.
Desenvolvendo aplicativos web escaláveisManuel Lemos
Palestra dada por Elton Minetto no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008
1. PHP Summer School
PHP Summer School
Desenvolvimento Orientado à Performance
Nuno Loureiro <nuno@co.sapo.pt>
http://blog.sig9.net/
20/07/2007
Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007
2. PHP Summer School
About me
• Licenciatura em Eng. Sistemas e Computação
• Começou a usar Linux em 1995
• Começou a programar PHP em 1999
• Organizou o 1º Simpósio de Linux em 1999 - Simplinux
• Sócio-fundador da ETH em 1999
• Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002
• Juntou-se à equipa do SAPO em 2002
• Programador do Webmail do SAPO
• Gestor técnico da plataforma de email do SAPO
• Zend Certified Engineer em 2005
Performance 2
3. PHP Summer School
Sumário - parte I
• Arquitectura
• Performance e Escalabilidade
• Conteúdo Estático vs Dinâmico
• Webserver
• Compressão de Conteúdo
• Optimizações de Compilador
• Tuning php.ini
• Compiler/Opcode Caching
• Bottlenecks
• Session Storage
• Benchmarking
Performance 3
4. PHP Summer School
Sumário - parte II
• PHP
• Profiling
• Caching
• Opções de código a considerar
• Regra 80/20
• Bases de Dados
• O que evitar e o que usar
Performance 4
5. PHP Summer School
Arquitectura
Performance e Escalabilidade
• Performance != velocidade de execução
• Performance = compromisso entre velocidade e escalabilidade
Performance 5
6. PHP Summer School
Arquitectura
Performance e Escalabilidade
Exemplo:
Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro
com o conteúdo do primeiro mas codificado em base64
Performance 6
7. PHP Summer School
Arquitectura
Performance e Escalabilidade
Exemplo:
Script que leia um ficheiro binário de 5Mb e escreva outro ficheiro
com o conteúdo do primeiro mas codificado em base64
Exemplo A.php: implementação tendo em conta a velocidade
Exemplo B.php: implementação tendo em conta a escalabilidade
A.php B.php
Performance 6
8. PHP Summer School
Arquitectura
Performance e Escalabilidade
Performance 7
9. PHP Summer School
Arquitectura
Performance e Escalabilidade
• A.php: Leitura única do ficheiro => Mais rápido
• B.php: Múltiplas leituras do ficheiro => Mais lento
A.php B.php
Performance 7
10. PHP Summer School
Arquitectura
Performance e Escalabilidade
• A.php: Leitura única do ficheiro => Mais rápido
• B.php: Múltiplas leituras do ficheiro => Mais lento
No entanto,
• A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb)
• B.php: Múltiplas leituras do ficheiro => Pouca memória usada
A.php B.php
Performance 7
11. PHP Summer School
Arquitectura
Performance e Escalabilidade
• A.php: Leitura única do ficheiro => Mais rápido
• B.php: Múltiplas leituras do ficheiro => Mais lento
No entanto,
• A.php: Leitura única do ficheiro => Mais memória usada (~=2x5Mb)
• B.php: Múltiplas leituras do ficheiro => Pouca memória usada
Com 100 instâncias em paralelo,
• A.php: Ocupa cerca de 1Gb RAM => Usa Swap => LENTO!
• B.php: Consumo de memória praticamente não cresce => Impacto na performance
pouco significativo => MAIS RAPIDO!
A.php B.php
Performance 7
12. PHP Summer School
Arquitectura
Conteúdo Estático vs Dinâmico
Performance 8
13. PHP Summer School
Arquitectura
Conteúdo Estático vs Dinâmico
Conteúdo Estático: Conteúdo Dinâmico:
• •
Não envolve processamento extra Envolve processamento extra
• •
Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script
• •
Mais leve e rápido Mais lento que conteúdo estático
• •
exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby
,
Performance 8
14. PHP Summer School
Arquitectura
Conteúdo Estático vs Dinâmico
Conteúdo Estático: Conteúdo Dinâmico:
• •
Não envolve processamento extra Envolve processamento extra
• •
Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script
• •
Mais leve e rápido Mais lento que conteúdo estático
• •
exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby
,
Para obter máxima Performance/Escalabilidade:
• Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o
conteúdo estático resultante)
• Quando não é possível usar apenas conteúdo estático, dividir página em componentes e
tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias)
• Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas
tipo cache.
Performance 8
15. PHP Summer School
Arquitectura
Conteúdo Estático vs Dinâmico
Conteúdo Estático: Conteúdo Dinâmico:
• •
Não envolve processamento extra Envolve processamento extra
• •
Servido directamente pelo servidor Web Servidor Web => Engine que interpreta o script
• •
Mais leve e rápido Mais lento que conteúdo estático
• •
exemplos: imagens, HTML, Javascript exemplos: PHP Perl, Python, Ruby
,
Para obter máxima Performance/Escalabilidade:
• Usar sempre que possível conteúdo estático (pre-executar os scripts e servir sempre o
conteúdo estático resultante)
• Quando não é possível usar apenas conteúdo estático, dividir página em componentes e
tornar estático os componentes que podem ser estáticos. (Ex: Portal com blocos de notícias)
• Mas, nem sempre precisamos deste tipo de solução. Existem também outras alternativas
tipo cache.
Dica: devido às limitações de pipelining dos browsers
usar um domínio diferente para servir conteúdo estático
Performance 8
17. PHP Summer School
Arquitectura
Webserver
Arquitectura mais comum:
Apache
PHP
Apache + mod_php
• “A” da arquitectura LAMP
• Popular por algum motivo
• PHP está embutido no Apache
• Processos Apache ocupam mais RAM
• Se o Apache estiver a servir muitos
clientes lentos vai ter muita memória
ocupada inutilmente
Performance 9
18. PHP Summer School
Arquitectura
Webserver
Arquitectura mais comum: A ganhar bastante popularidade:
Lighttpd
Apache
PHP PHP
Apache + mod_php Lighttpd + php fcgi
• “A” da arquitectura LAMP • Rápido que se farta para conteúdo
• Popular por algum motivo estático.
• PHP está embutido no Apache • Separa as águas:
• Processos Apache ocupam mais RAM • Servidor HTTP + Servidor PHP
• Se o Apache estiver a servir muitos • Podemos criar um cluster de
clientes lentos vai ter muita memória servidores HTTP e outro para correr
ocupada inutilmente apenas PHP
• Se o Lighttpd estiver a servir muitos
clientes lentos, não há problema
Performance 9
19. PHP Summer School
Arquitectura
Webserver
Exemplo de uma Arquitectura escalável:
Performance 10
20. PHP Summer School
Arquitectura
Webserver
Dicas:
• Compilar apenas com os módulos necessários
• Desligar tudo o que não é necessário:
• Logs => I/O
• Se precisar de Logs:
• não converter IPs em Hostnames
• rodar os Logs
• Status/ExtendStatus
• Evitar tudo o que provoque mais do que um stat() por request
• Exemplos no Apache:
• Manter a lista do “DirectoryIndex” o mais pequena possível
• Desactivar o uso de .htaccess com “AllowOverride none”
Performance 11
22. PHP Summer School
Arquitectura
Compressão de Conteúdo
Compressão de Conteúdo
• A maioria dos Browsers suporta
• Páginas comprimidas são em média 7-10x mais pequenas
• Implementações:
• Apache 1 (mod_gzip / mod_deflate)
• Apache 2 (mod_deflate)
• Lighttpd (mod_compress)
• PHP:
• php.ini: zlib.output compression=1
• no script: ob_start(“ob_gzhandler”)
Performance 12
23. PHP Summer School
Arquitectura
Compressão de Conteúdo
Menos output ...
• usa menos largura de banda
• poupa €€€
• as páginas carregam mais rapidamente
• reduz IO de rede em sites com muito tráfego
Compressão de Conteúdo
• A maioria dos Browsers suporta
• Páginas comprimidas são em média 7-10x mais pequenas
• Implementações:
• Apache 1 (mod_gzip / mod_deflate)
• Apache 2 (mod_deflate)
• Lighttpd (mod_compress)
• PHP:
• php.ini: zlib.output compression=1
• no script: ob_start(“ob_gzhandler”)
Performance 12
24. PHP Summer School
Arquitectura
Optimizações de Compilador
Para máxima performance é crucial que todo o software seja
compilado de forma a usar o máximo do hardware disponível
• Activar todas as optimizações de compilador com o -O3
• Optimizar o código para o CPU usado via -march -mcpu
• Funcionalidades específicas do CPU via -msse -mmmx
-mfpmath=sse
• Desactivar dados para debug via -fomit-frame-pointer
Performance 13
25. PHP Summer School
Arquitectura
Tuning php.ini
• Settings aconselhados ** php.ini:
no
• register_globals = Off
• register_long_arrays = Off
• magic_quotes_gpc = Off
• variables_order = “GPCS”
• expose_php = Off
• register_argc_argv = Off
• always_populate_raw_post_data = Off **
• session.use_trans_sid = Off **
• session.auto_start = Off **
• session.gc_divisor = 1000 or 10000
• output_buffering = 4096
** Desligado por default
Performance 14
26. PHP Summer School
Arquitectura
Compiler/Opcode Caching
Performance 15
27. PHP Summer School
Arquitectura
Compiler/Opcode Caching
• O ciclo a branco acontece para cada ficheiro
incluído e não apenas para o ficheiro principal
• A compilação facilmente consome mais
tempo do que a execução.
Performance 15
28. PHP Summer School
Arquitectura
Compiler/Opcode Caching
• O ciclo a branco acontece para cada ficheiro
incluído e não apenas para o ficheiro principal
• A compilação facilmente consome mais
tempo do que a execução.
Compiler/Opcode Caching
• Cada script PHP é compilado apenas uma
única vez para cada revision.
• Reduz IO de ficheiros, os opcodes são lidos
da memória em vez de serem “parsed” do
disco.
• Os opcodes são optimizados para uma
execução mais rápida.
Performance 15
29. PHP Summer School
Arquitectura
Compiler/Opcode Caching
Opções mais populares para Opcode Cache:
• Alternative PHP Cache (APC) - http://pecl.php.net/package/APC
• pear install pecl.php.net/apc
• Adicionar “extension=apc.so” no php.ini
• XCache - http://xcache.lighttpd.net/wiki/GettingSource
• Zend Platform - http://www.zend.com/
Performance 16
30. PHP Summer School
Arquitectura
Bottlenecks
• Bottlenecks típicos de uma Arquitectura:
• IO de Disco
• Evitar logs ou gravar em disco diferente
• Drive T uning (hdparm / RAID)
• Usar RAM Disk para sessões ou para as sources
# Speed Up /tmp Directory
mount --bind -ttmpfs /tmp /tmp
# Accelerate Scripts Directory
mount --bind -ttmpfs /home/webroot /home/webroot
• IO de Rede
• Usar compressão de conteúdo
• Separar Redes e usar mais interfaces de rede
Performance 17
31. PHP Summer School
Arquitectura
Session Storage
Para um único servidor:
• Por default cada sessão de PHP é guardada em disco num ficheiro
separado
• Muitos ficheiros num directório reduz a velocidade de acesso
• Separar as sessões em múltiplos directórios
• session.save_path = quot;N;/pathquot;
• Usar sessões em memória (via Ramdisk, shared memory)
Para um cluster de servidores:
• Usar Memcache
• Usar o Session Clustering do Zend Platform
• Fazer stickyness por servidor e usar método convencional para sessões
Performance 18
32. PHP Summer School
Arquitectura
Benchmarking
Opções mais populares para Benchmarking de conteúdo:
Apache Benchmark - http://www.apache.org/
httperf
http://freshmeat.net/projects/httperf/
http_load
http://www.acme.com/software/http_load/
Performance 19
33. PHP Summer School
Sumário - parte II
• PHP
• Profiling
• Caching
• Opções de código a considerar
• Regra 80/20
• Bases de Dados
• O que evitar e o que usar
Performance 20
35. PHP Summer School
PHP
Profiling
PEAR Benchmark_Profiler
Result
Métodos mais úteis da class Pear::Benchmark_Profiler:
•start()
•stop()
•enterSection()
•leaveSection()
•display()
•getAllSectionsInformations()
Performance 22
37. PHP Summer School
PHP
Caching
O que é?
• Caching é o reconhecimento do facto que a maioria dos
dados dinâmicos não mudam cada vez que os pedem
Performance 23
38. PHP Summer School
PHP
Caching
O que é?
• Caching é o reconhecimento do facto que a maioria dos
dados dinâmicos não mudam cada vez que os pedem
Como funciona?
Performance 23
39. PHP Summer School
PHP
Caching
O que é?
• Caching é o reconhecimento do facto que a maioria dos
dados dinâmicos não mudam cada vez que os pedem
Como funciona?
Vantagens?
• Grande aumento de performance
• Diminuição na utilização de recursos
Performance 23
40. PHP Summer School
PHP
Caching
O que é?
• Caching é o reconhecimento do facto que a maioria dos
dados dinâmicos não mudam cada vez que os pedem
Como funciona?
Vantagens?
• Grande aumento de performance
• Diminuição na utilização de recursos
Desvantagens?
• Complexidade da Arquitectura
• Potencial para dados inconsistentes
Performance 23
41. PHP Summer School
PHP
Caching
Tipos de cache:
• Full Content Caching
• Partial Content Caching
• After Caching
• Permanent Caching
• HTP Header Caching
Implementações de cache:
• Zend Platform (parcial, total)
• PEAR::Cache_Lite
Performance 24
42. PHP Summer School
Opções de código a considerar
Profiling Results:
Como posso optimizar o script?
Performance 25
43. PHP Summer School
PHP
Opções de código a considerar
• Evitar usar Regular Expressions
• preg_match() => strpos()
• preg_replace() => str_replace() ou strstr()
• Usar echo em vez de print
• Usar pelicas em vez de aspas
• Usar ciclos while() em vez de for() e não usar funções nas condições
Performance 26
44. PHP Summer School
PHP
Opções de código a considerar
• Para Arrays Associativos usar foreach() em vez de while(list()= each())
Performance 27
45. PHP Summer School
Opções de código a considerar
Profiling Results:
Agora que já sabem, optimizem!
Performance 28
46. PHP Summer School
PHP
Opções de código a considerar
Profiling Results:
Ganho de 17.3%
em relação ao primeiro exemplo
Performance 29
47. PHP Summer School
PHP
80/20 rule
80% do teu código demora menos de
20% do tempo total de execução
• Não percas tempo a optimizar nada nos 80%
• Descobre o que são os 20% a optimizar e optimiza
Performance 30
48. PHP Summer School
Bases de Dados
O que evitar e o que usar
• Evitar:
• usar joins
• fazer um query por todos os campos para obter apenas um
• Usar:
• Ferramentas para analisar a execução de queries
• indexes nos campos apropriados
Performance 31
49. PHP Summer School
PHP Summer School
FIM!
Obrigado, perguntas?
Nuno Loureiro <nuno@co.sapo.pt>
http://blog.sig9.net/
20/07/2007
Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007