Como facer apps fodidamente rápidas: con PHP

31
Como facer apps fodidamente rápidas: con PHP Fran Diéguez – OpenHost

Transcript of Como facer apps fodidamente rápidas: con PHP

Page 1: Como facer apps fodidamente rápidas: con PHP

Como facer appsfodidamente rápidas: con PHP

Fran Diéguez – OpenHost

Page 2: Como facer apps fodidamente rápidas: con PHP

ttEste traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

2

Sobre min

Page 3: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

[email protected]

[email protected]

Page 4: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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, ...

Page 5: Como facer apps fodidamente rápidas: con PHP

ttEste traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

5

Que fai lento o meu aplicativo

Page 6: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 7: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 8: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

8

Page 9: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

9

Problema de conexiónssimultá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

Page 10: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

10

Como simulamos altas taxas deusuarios?

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

Page 11: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

11

Servidores de aplicativo vsservidores 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

Page 12: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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.

Page 13: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 14: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 15: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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.

Page 16: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 17: Como facer apps fodidamente rápidas: con PHP

ttEste traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

17

Caché e Sistemas de caché

Page 18: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 19: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 20: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 21: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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()

Page 22: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 23: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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.

Page 24: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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!!!)

Page 25: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 26: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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)

Page 27: Como facer apps fodidamente rápidas: con PHP

ttEste traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

27

Clustering e apps na nube

Page 28: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 29: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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.

Page 30: Como facer apps fodidamente rápidas: con PHP

Este traballo ten a licenza Creative Commons Atribución 3.0.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

Page 31: Como facer apps fodidamente rápidas: con PHP

ttEste traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h

31

Preguntas