Diferenzas entre FLOSS e outros
Vantaxes do FLOSS na empresa
FLOSS como elemento de marketing
Ferramentas FLOSS máis salientábeis
Caso de éxito: Ubuntu-USC
Preguntas
Cas d’us de Framework web desenvolupat amb llibreries LliuresJordi Catà
El desenvolupament d’aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta xerrada esposarem el funcionament d’un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s’ha realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la base de dades), Smarty (aïllament de PHP i HTML).
Diferenzas entre FLOSS e outros
Vantaxes do FLOSS na empresa
FLOSS como elemento de marketing
Ferramentas FLOSS máis salientábeis
Caso de éxito: Ubuntu-USC
Preguntas
Cas d’us de Framework web desenvolupat amb llibreries LliuresJordi Catà
El desenvolupament d’aplicacions web està sofrint una evolució constant, actualment apareixen multitut de frameworks de desenvolupament àgil. En aquesta xerrada esposarem el funcionament d’un framework web desenvolupat amb llibreries i components lliures, orientat a arquitectura Model Vista Controlador. El desenvolupament s’ha realitzat utilitzant les llibreries Pear::Dataobject (abstracció de la base de dades), Smarty (aïllament de PHP i HTML).
1. Como facer PHP
fodidamente rápido
Fran Diéguez – OpenHost && Mabishu
2. Sobre min
Este traballo ten a licenza Creative Commons Atribución 3.0.
2 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
3. Fran Diéguez
●
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)
●
Estou perxudicado (as festas pérdenme)
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?
●
Consideracións que poucos saben e como
atallalas
●
Sistemas de cache
●
Sistemas de plantillas: Smarty 3 (non 2)
●
Clustering
Este traballo ten a licenza Creative Commons Atribución 3.0.
4 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
5. Consideracións que poucos saben
e como atallalas
Este traballo ten a licenza Creative Commons Atribución 3.0.
5 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
6. Principais lugares de bottlenecks
●
Sistemas de ficheiros
●
Conexións simultáneas
●
Memoria compartida
●
Xestión de procesos do sistema
●
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
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
● Se temos poucas conexións
(usuarios concurrentes) o noso
script PHP usará menos memoria
compartida
● 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
●
Ab do Proxecto Apache
●
Httperf de HP, un manual moi chulo
●
...
●
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
●
Non teñen relación directa co rendemento da
app
●
Pero fallos pequenos poden incrementar as
chamadas internas do parser de PHP
●
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
● 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
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:
● Iteradores de Obxectos, Arrays, Ficheiros, Directorios
● Parseo de XML optimizado
● 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 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, atacamos así
●
Gardando todo en memoria compartida
●
Crear estáticos
●
Balancear carga entre varios servers
●
Sistemas cache distribuídas
●
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. Sistemas de caché
Este traballo ten a licenza Creative Commons Atribución 3.0.
17 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
18. 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.
18 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
19. 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.
19 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
20. APC (Alternative PHP Caché)
● 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
● Api moi sinxela:
● apc_exists()
● apc_add()
● apc_fetch()
Este traballo ten a licenza Creative Commons Atribución 3.0.
20 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
21. Memcache
● Agnóstico á lingua de programación
● Sistema totalmente distribuído
● Permite ter un banco de memoria (pares chave-valor)
do tamaño que queirades nunha máquina externa que
comparte recursos a varios servers
● Permite multiserver e multiclientes
● 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.
21 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
22. Sistemas de plantillas
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
●
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.
24 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
25. Smarty 3 características
● Olvidádevos de Smarty 2 (cousa do pasado, 3 meses)
● Características:
● Template inheritance
● Sistema de cache por grupos
● Compilación a OpCode
● Compilación a PHP optimizado
● Totalmente extensíbel
● Facilita a reutilización de partials
● Sistema bastante bo de plugins (non orientado a obxectos!!!)
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
●
Tipico: Hola {$nome_do_usuario}
●
Tentade compilar a OpCode con servers
especializados como Zend Server (aviso $$$)
●
Para o caso de plantillas estáticas
●
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
Este traballo ten a licenza Creative Commons Atribución 3.0.
27 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
28. 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.
28 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
29. 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
– 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.
29 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
30. Preguntas
Este traballo ten a licenza Creative Commons Atribución 3.0.
30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h