2. Sobre min
Este traballo ten a licenza Creative Commons Atribución 3.0.
2 tt
Para ver unha copia da licenza visite http://tinyurl.com/2v352h
3. Ola, son Fran
● Traballo en OpenHost e na OSL da USC
● Desenvolvedor web de aplicativos con altas
taxas de usuarios
● Traballei durante 3 anos con Ruby on Rails
● Agora mesmo estou traballando nunha
plataforma editorial dixital para periódicos
desenvolvida con PHP (Zend, Smarty,
Doctrine)
● Membro de GNOME pola GNOME Foundation
● Contacto
● fran@openhost.es
● frandieguez@gnome.org
Este traballo ten a licenza Creative Commons Atribución 3.0.
3 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
4. Que imos ver
●
Que fai lento o meu aplicativo!!
●
Consideracións que poucos saben e como
atallalas
●
Sistemas de plantillas: Smarty 3 (non 2)
●
Sistemas de cache
●
Apps na nube: Clustering, balanceo, CDN, ...
Este traballo ten a licenza Creative Commons Atribución 3.0.
4 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
5. Que fai lento o meu aplicativo
Este traballo ten a licenza Creative Commons Atribución 3.0.
5 tt
Para ver unha copia da licenza visite http://tinyurl.com/2v352h
6. Bottlenecks: os inimigos
●
Sistemas de ficheiros
●
Conexións simultáneas
●
Xestión de memoria do sistema
●
Servidores de app vs servidores de apps
●
Conexión a outros servidores
Este traballo ten a licenza Creative Commons Atribución 3.0.
6 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
7. Sistemas de ficheiros
●
Se usades Linux nos vosos servers tedes que
ter en conta as restricións dos FS:
●
Sempre son problemas derivados do sistema de
xestión de nodos-i
●
Normalmente os sistemas de ficheiros funcionan
ben até os 1024 elementos dentro dun mesmo
nodo-i
●
Polo que sempre tentade que dentro dun
cartafol haxa como máximo 1024 elementos
●
Se vos pasades empregade aniñado de cartafoles
Este traballo ten a licenza Creative Commons Atribución 3.0.
7 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
8. Este traballo ten a licenza Creative Commons Atribución 3.0.
8 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
9. Problema de conexións
simultáneas
● Configuración de Apache
● Se temos poucas conexións (usuarios
concurrentes) o noso script PHP usará
menos memoria compartida
● Pero se temos moitas conexións
simultáneas PHP non xestiona nada ben a
memoria compartida e pode ocasionar
perdas de rendemento incríbeis
● SOLUCIÓN:
● Usar sistemas de memoria compartida externa
● Cachear a estáticos ou OpCode
● Utilizar métodos de abstracción para usar
servizos de terceiros
Este traballo ten a licenza Creative Commons Atribución 3.0.
9 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
10. Como simulamos altas taxas de
usuarios?
●
Hai moitas ferramentas
●
Httperf de HP, un manual moi chulo
●
Ab do Proxecto Apache
●
...
●
PROBLEMA:
●
Non representan de forma fidedigna as accións de
usuarios (useflow completo do usuario)
Este traballo ten a licenza Creative Commons Atribución 3.0.
10 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
11. Servidores de aplicativo vs
servidores de estáticos
● É moi importante ter ben diferenciados os
servidores que serven ficheiros logo dun
procesado (aplicativo) dos que son servidores de
estáticos
● Eu recomendo que estean en distintas máquinas
cando o proxecto creza dabondo
● Podedes empregar o que queirades pero:
● Apache: como server de aplicacións co módulo
mod_php
● Nginx: como server de estáticos
Este traballo ten a licenza Creative Commons Atribución 3.0.
11 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
12. Coding Standards
● Batalla de mínimos (pero que suman)
● Non teñen relación directa co rendemento da app.
● Pero fallos pequenos incrementan as chamadas internas
do parser de PHP
● Incrementa chamadas a error handlers.
● Exemplo:
● Eliminando os ?> dos controladores e modelos obrigas a
PHP a non pechar os streams de código o cal implica un
incremento de rendemento dun 0,4 % do script final.
Este traballo ten a licenza Creative Commons Atribución 3.0.
12 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
13. Máis exemplos en PHP
● Uso das funcións de expresións regulares de Perl
● Preg_replace, Preg_match
● Etc.
● Uso de include vs require (*once)
● Outro exemplo chorra:
● Impresión de texto con:
– Print e non echo
– Usade a nomenclatura “{$nome_do_usuario}” e non “$nome_do_usuario”
● O mito de que o uso de Orientación a obxectos é máis lento xa
non se cumpre
– A partires de PHP 5.3 isto mellorou moitísimo, e PHP 5.4 promete un 35% de
ganancia de rendemento
Este traballo ten a licenza Creative Commons Atribución 3.0.
13 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
14. Standard Public Library
● Se queredes facer que PHP vaia máis rápido
● POR FAVOR USADE O SPL DE PHP
● Son APIs escritas en C e compiladas en lingua máquina polo que
vai ir moi rápido
● Ten API para moitas das tarefas comúns cando queremos
acceder a elementos do sistema a baixo nivel:
● Parseo de XML optimizado
● Iteradores de Obxectos, Arrays, Ficheiros, Directorios
● Sistema de excepcións máis extenso que o incluído no core.
● Vantaxe: todo orientado a obxectos
Este traballo ten a licenza Creative Commons Atribución 3.0.
14 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
15. Usade proffiling
● O proffiling é analizar as chamadas internas da linguaxe e o uso de
memoria e tempos de execución de cada unha delas
● Para PHP usade Xdebug (basicamente porque non hai outro)
● Permite proffiling e debugging de forma moi cómoda
● Para consultar os resultados empregade Kcachegrind ou webgrind.
● Se sabedes interpretar de forma correcta os resultados podedes
● saber onde están os bottlenecks nos vosos apps.
Este traballo ten a licenza Creative Commons Atribución 3.0.
15 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
16. En resumo, atallamos así
●
Estáticos en servers distintos aos de app
●
Gardando todo o preciso en memoria
compartida
●
Crear estáticos
●
Balancear carga entre varios servers
●
Sistemas cache distribuídas
●
Ter en conta o problema de conexións
simultáneas
Este traballo ten a licenza Creative Commons Atribución 3.0.
16 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
17. Caché e Sistemas de caché
Este traballo ten a licenza Creative Commons Atribución 3.0.
17 tt
Para ver unha copia da licenza visite http://tinyurl.com/2v352h
18. Tipos de caché
●
Principalmente categorízanse en:
●
Caché de páxina
●
Caché de fragmentos
●
Caché de accións
Este traballo ten a licenza Creative Commons Atribución 3.0.
18 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
19. Sistemas de caché
●
Hai dous tipos:
●
Sistemas de caché interna
●
Sistemas de caché externa
●
Para cada un salientamos
●
Interna: APC
●
Externa: Memcache
Este traballo ten a licenza Creative Commons Atribución 3.0.
19 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
20. Sistemas de caché e II
●
O realmente interesante é ter unha
infraestrutura escalonada de sistema de Cache
●
Zend Framework fornece un sistema de varias
capas onde podes aniñar distintos sistemas de
caché segundo a súa velocidade: Zend_Cache
– APC
– Memcache
●
Base de datos
●
Cache de sistema de ficheiros
●
Personalizadas
Este traballo ten a licenza Creative Commons Atribución 3.0.
20 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
21. APC (Alternative PHP Cache)
● A partir de PHP 5.4 será
incluído no paquete base de
PHP polo que podedes
empregalo sen instalación
algunha
● Para todo lo demás:
● usade pecl ou paquetería do
voso SO.
● Api moi sinxela:
● apc_add()
● apc_exists()
● apc_fetch()
Este traballo ten a licenza Creative Commons Atribución 3.0.
21 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
22. Memcache
● Agnóstico á lingua de programación
● Sistema totalmente distribuído
● Permite multiserver e multiclientes
● Permite ter un banco de memoria (pares chave-valor) do
tamaño que queirades, nunha máquina externa que
comparte recursos a varios servers
● Api moi sinxela:
● Memcache::connect, conexión inicial ao porto 11211
● Memcache::set
● Memcache::get
Este traballo ten a licenza Creative Commons Atribución 3.0.
22 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
23. Sistemas de plantillas
●
Hai moita controversia co sistema de plantillas
●
Moitas persoas prefiren empregar PHP misturado
con HTML
●
Outras moitas empregan un sistema de plantillas
●
Todo depende das vosas necesidades porén eu
prefiro empregar un sistema de plantillas
●
Vantaxes: sistemas de caching e compilación a
opcode das plantillas, etc, etc, etc
●
Desvantaxes: obrigan a aprender unha nova sintaxe
e distintas API.
Este traballo ten a licenza Creative Commons Atribución 3.0.
23 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
24. Smarty 3
● Para min e a unha solución definitiva en PHP
● Olvidádevos de Smarty 2 (cousa do pasado, 6 meses)
● Características:
● Sistema de cache por grupos
● Compilación a OpCode
● Compilación a PHP optimizado
● Totalmente extensíbel
● Facilita a reutilización de partials
● Template inheritance
● Sistema bastante bo de plugins (non orientado a obxectos!!!)
Este traballo ten a licenza Creative Commons Atribución 3.0.
24 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
25. Smarty 3
●
Baixo as miñas probas
●
Incremento de rendemento do 30% fronte a
Smarty 2
●
Incremento de rendemento do 15% fronte a
uso de PHP embembed
– Logo de que Smarty compile as vistas a PHP
●
Incremento de rendemento do 40% fronte a
uso de PHP Embembed
– Logo que Smarty compile as vistas a OpCode
Este traballo ten a licenza Creative Commons Atribución 3.0.
25 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
26. Caché, caché, caché
●
Para o caso das plantillas con partes dinámicas
●
Tentade compilar a OpCode con servers
especializados como Zend Server (aviso $$$)
●
Para o caso de plantillas estáticas
●
Tipico: Hola {$nome_do_usuario}
●
Compilade todo a html estático escribindo en
filesystem ou memcache
●
Incluso podedes empregar este sistema para
cachear fragmentos (partials)
Este traballo ten a licenza Creative Commons Atribución 3.0.
26 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
27. Clustering e apps na nube
Este traballo ten a licenza Creative Commons Atribución 3.0.
27 tt
Para ver unha copia da licenza visite http://tinyurl.com/2v352h
28. Clustering e apps na nube
●
Ao final todo se reduce a:
●
Externalizar recursos
●
Especializar servers por uso dos mesmos
– Estáticos
– Memoria compartida
– Sesións
– Execución do app
– Load balancers e proxies inversos
Este traballo ten a licenza Creative Commons Atribución 3.0.
28 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
29. Sistemas de clustering
●
Sodes desenvolvedores, non perdades tempo
en administración de sistemas
●
O mellor é empregar sistemas que poidan
autoescalar
●
Eu recomendo EC2 combinado con S3 de Amazon
●
E se o presuposto o permite empregade Akamai.
Este traballo ten a licenza Creative Commons Atribución 3.0.
29 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
30. Apps na nube
● Como fago que o meu App poida empregar
clustering ou poida correr na nube?
● Realmente non cambia moito da infraestrutura que
tes sempre que empregues as anteriores
suxestións
● O IMPORTANTE É EXTERNALIZAR RECURSOS
● Caches distribuídas
● Conversión a estáticos e Opcode
● Diferencia de servidores de aplicativos vs servidores de
estáticos
Este traballo ten a licenza Creative Commons Atribución 3.0.
30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
31. Preguntas
Este traballo ten a licenza Creative Commons Atribución 3.0.
31 tt
Para ver unha copia da licenza visite http://tinyurl.com/2v352h