escalabilidad y alto rendimiento con symfony2
DESCRIPTION
En esta charla se pretenden tocar todas las cosas que debemos tener en cuenta para sacar el máximo rendimiento y poder escalar usando Symfony2. Se toca desde parámetros de configuración de PHP y APC, optimización de Composer, dónde optimizar, quick wins varios, cómo hacer profiling correctamente, BBDD NoSQL vs SQL y por supuesto lecciones aprendidas en mis anteriores trabajosTRANSCRIPT
![Page 1: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/1.jpg)
20-22 junio 2013 Madrid
ESCALABILIDAD Y ALTO RENDIMIENTO CON SYMFONY2Ricard Clau
deSymfony
![Page 2: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/2.jpg)
¡muchas gracias a nuestros patrocinadores!
deSymfony
![Page 3: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/3.jpg)
RICARD CLAUTwitter @ricardclau / Gmail [email protected]
Emigrante en LondresA veces doy charlas
Y de vez en cuando me aceptan PR en Github
![Page 4: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/4.jpg)
VAMOS A HABLAR DE...
• Performance y escalabilidad
• Profiling y optimización
• Storage: SQL vs NoSQL
• ¡Basado en hechos reales!
• Casi todo sirve también en entornos sin Symfony2
• Symfony2 es suficientemente rápido. ¡De verdad!
![Page 5: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/5.jpg)
CONCEPTOSEscalabilidad, Disponibilidad, Balanceo, Sharding
Millones de Usuarios en
todo el mundo24x7x365
![Page 6: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/6.jpg)
ESCALANDO¿Qué modelo creéis que es mejor y más sostenible?
![Page 7: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/7.jpg)
DISPONIBLES 24X7X365Debemos podernos levantar rápido de cualquier problema
![Page 8: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/8.jpg)
BALANCEO DE CARGAPermite hacer cambios sin dejar de dar servicio
![Page 9: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/9.jpg)
SHARDINGLlega un momento en que hay que hacerlo...
¡Y puede ser muy doloroso!
![Page 10: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/10.jpg)
NO NOS PRECIPITEMOS...
• Evitad optimizaciones prematuras
• Las microoptimizaciones no sirven para nada
• Foco a cosas de impacto
• Mejoras incrementales
• Si no se factura, no sirve de nada
![Page 11: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/11.jpg)
NI ESPEREMOS AL DESASTRE...
• Monitorizad servidores: Ram, CPUs, Disco, red, procesos idle...
• Intentad implicar a negocio
• Cuando algo esté a la mitad de su capacidad, preparad plan B
• Morir de éxito es fatal
![Page 12: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/12.jpg)
MANOS A LA OBRA¿Por dónde empezamos?
![Page 13: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/13.jpg)
CUIDAD EL FRONTENDMinimizad las peticiones y su tamaño
![Page 14: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/14.jpg)
COSAS FÁCILES DE APLICAR
• La request más rápida es la que no se hace
• Iconos en base64 dentro del CSS
• CSS y JS minificados, imágenes con jpegoptim, pngcrush, ...
• Usad cabeceras HTTP para poder cachear
• La latencia de red importa más de lo que parece
• Se puede ganar muchísimo en experiencia de usuario
![Page 15: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/15.jpg)
ESCALANDO PHPFacebook, Wikipedia, WordPress, YouPorn, ...
Softonic, Emagister, Privalia, LetsBonus, SocialPoint, Tuenti, ...
![Page 16: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/16.jpg)
¿ESCALAR ES FÁCIL?
• PHP bootstrapea todo en cada Request, y escalar es tan fácil como añadir máquinas tras un Load Balancer
• Pero eso provoca peor rendimiento que otros lenguajes
• Hay cosas a compartir como las sesiones o el storage pero frameworks como Symfony nos lo ponen muy fácil
• Es una tecnología probada por sitios MUY grandes
• Los primeros problemas suelen estar en las BBDD
![Page 17: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/17.jpg)
VIDA MÁS ALLA DE LAMP
• Servidores web ligeros para los assets
• Usad reverse proxy cache como Varnish si podéis cachear páginas (o trozos, con ESI) durante un cierto tiempo
• Cachead todo lo que podáis (APC, Memcached, Redis, ...). Caché 10 segundos -> ¡ Sólo 6 peticiones por minuto!
• MySQL aguanta MUCHO. Pero hay problemas que se solucionan mejor con bases de datos NoSQL
![Page 18: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/18.jpg)
PERFORMANCE PHPOpcode caches, composer, quick wins
Actualizar a PHP5.4 acelerará un 15-30%
![Page 19: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/19.jpg)
APC: NUESTRO MEJOR AMIGO
• Si no sabes qué es, nunca te has preocupado del rendimiento
• apc.stat -> Off (Apache reload para ver cambios)
• apc.serializer -> igbinary (compact_strings a Off)
• apc.shm_size -> Ajustar a las necesidades
• apc.write_lock -> Evita problemas con caches frías
• Revisad http://www.php.net/manual/en/apc.configuration.php
![Page 20: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/20.jpg)
ESTADO DE APChttp://svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup
![Page 21: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/21.jpg)
ZEND OPCACHE
• Será incluido en distribución estándar de PHP5.5 (válido desde 5.2) y se evitarán problemas como PHP5.4+APC
• Mejor rendimiento que APC en todos los tests
• README https://github.com/zendtech/ZendOptimizerPlus
• APC Cache + Upload Hooks seguirán existiendo en APCU (https://github.com/krakjoe/apcu)
• En @EmagisterTech lo tienen en producción hace meses :)
![Page 22: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/22.jpg)
ESTADO DE OPCACHERasmus en estado puro :)
(https://github.com/rlerdorf/opcache-status)
![Page 23: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/23.jpg)
COMPOSER AUTOLOAD
• Usáis todos Composer, ¿no?
• Autoload costoso ya que se suele acceder mucho al FileSystem
• composer.phar install --optimize-autoloader (-o) genera ClassMap
• Mismo rendimiento con apc.stat a Off que ApcUniversalClassLoader y muchas menos claves en APC!
![Page 24: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/24.jpg)
APC VS ZEND OPCACHEhttp://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-
benchmarks-with-symfony2/
![Page 25: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/25.jpg)
APC VS ZEND OPCACHEhttp://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-
benchmarks-with-symfony2/
Comparativa Requests / segundo
![Page 26: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/26.jpg)
EXPRIMIENDO SYMFONY2
• Con Apache, app/console router :dump-apache
• SwiftMailer pesa bastante, intentad delegarlo a daemons
• Si podéis, usad SubRequests con ESI y Varnish
• Probad la extensión de Twig
• Podéis implementar incluso un Cache Warmer
![Page 27: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/27.jpg)
PROFILINGDiagnosticando cuellos de botella
![Page 28: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/28.jpg)
HERRAMIENTAS PROFILING
• ¿Cuánto tiempo dedicáis a hacer profiling?
• Existen xDebug (Derick Rethans) y XHProf (Facebook)
• Es muy conveniente tener alguna (o ambas) instaladas en producción y poderlas activar unos minutos
• En local también podemos ver muchas cosas
• Algunas cosas sólo pueden reproducirse con tráfico real
![Page 29: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/29.jpg)
XHPROF (DEV VS PROD)https://github.com/jonaswouters/XhprofBundle
![Page 30: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/30.jpg)
HELLO WORLD PHP y los frameworks...
Y las comparativas entre cosas que no tienen nada que ver
![Page 31: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/31.jpg)
¿FRAMEWORKS == LENTOS?
• Existe la creencia de que un framework propio escrito desde 0 será mucho mejor que coger uno existente
• También que los frameworks grandes consumen mucho. (ZF1 y Symfony2 funcionan con memory_limit 32M)
• Si ese es realmente tu problema, PHP tampoco es la solución
• ¡No os fiéis de los Hello World Performance Tests!
• ¡Nadie sabe más que la inteligencia colectiva!
![Page 32: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/32.jpg)
TECHEMPOWER BENCHMARK
• Symfony2 queda mal clasificado
• La comparación con otros FW PHP es algo injusta. Se cargan muchas cosas innecesarias (PR#229 de @beberlei) Hay incoherencias (frameworks PHP >> PHP)
• PHP nunca será más rápido que un lenguaje compilado
• Un buen acceso a los datos y cachear igualan las cosas
• Está en el roadmap intentar optimizar performance
![Page 33: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/33.jpg)
GUARDANDO DATOSUsa la herramienta correcta para el trabajo
Ninguno soluciona todos los problemas
![Page 34: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/34.jpg)
BBDD RELACIONALES
• Tecnologías maduras y buena performance
• Transacciones: Atomicidad, Consistencia, aIslamieto, Durabilidad
• Podemos usarlas como NOSQLs clave-valor usando campos BLOB con objetos serializados en el interior
• Soportan integridad referencial, Joins, querys complejas
• Millones de registros sin problemas
![Page 35: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/35.jpg)
SOLUCIONES NOSQL
• Soluciones a algunos problemas concretos
• Teorema CAP (Consistencia, Disponibilidad, Tolerancia a particionamiento). Solo se pueden tener 2.
• Inmadurez en muchas de ellas. Problemas escalando.
• ¿Big Data? 100 millones de registros NO lo es.
• Redis, Cassandra, Riak y Solr funcionan muy bien
![Page 36: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/36.jpg)
SISTEMAS DE COLASCasi nada tiene por qué ser REAL-TIME
![Page 37: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/37.jpg)
¿REAL-TIME? ¿ES NECESARIO?
• Intentad delegar todo lo que podáis a procesos en lote
• Ejemplos: Envío de mails, peticiones a APIs externas, redimensionado de imágenes, estadísticas, ...
• El 99% de estadísticas no hace falta que sean real-time
• ¡60 segundos de decalaje es real-time a todos los efectos!
• ¡Podemos usar varios lenguajes para maximizar rendimiento!
![Page 38: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/38.jpg)
PHP A VECES NO BASTAO no es la mejor herramienta para lo que necesitamos
![Page 39: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/39.jpg)
ESCENARIOS MALOS PHP
• Aplicaciones con daemons CLI corriendo 24x7
• Cálculos matemáticos, procesados masivos de datos, concursos de programación
• Escenarios de alta concurrencia de usuarios con peticiones no cacheables
• Threading, Forking
![Page 40: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/40.jpg)
LOOKING BEYOND PHP
• El futuro es la interacción continua cliente-servidor.
• JavaScript será el rey en cliente
• En el servidor, Erlang y Go cada vez tienen más presencia y está por ver la evolución de Node.JS
• Y siempre seguirán siendo necesarios lenguajes compilados como Go, C, C++ o Java para algunas cosas
• ¡Aprender otros lenguajes nos hace mejores!
![Page 41: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/41.jpg)
EL VIRUS ERLANG
• Es muy diferente a PHP. Además es divertido
• Problemas complejos solucionados hace más de 20 años por ingenieros de Ericsson
• Creemos que el futuro de Internet pasa por un uso masivo de Erlang en todas partes
• No os perdáis la charla de Jordi Llonch y Marcos Quesada en unos instantes!
![Page 42: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/42.jpg)
SYMFONY2Es suficientemente rápido para lo que quieres hacer
![Page 43: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/43.jpg)
¿POR QUÉ ELEGIR SYMFONY2?
• Symfony2 NO es el framework más rápido para Hello World pero es muy rápido para APIs y aplicaciones web
• Usar un framework tan grande es bueno, porque permite probar cualquier tecnología en 5 minutos
• Crear tu framework tiene costes y riesgos muy elevados!
• Tiene un roadmap de releases LTS, proyectos grandes en producción y una comunidad, madurez, número de bundles, y estabilidad envidiable
![Page 44: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/44.jpg)
DRAGONCITY: NÚMEROS
• ~7 millones de usuarios diarios (Facebook + iOS)
• ~300 millones de usuarios registrados
• Cientos de millones de registros diarios para analítica
• MySQL (32x2 + Analytics), Redis (~30), Cassandra (3)
• Las requests son tu partida -> No se puede cachear
• Y sí, casi todo el código es Symfony2! :)
![Page 45: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/45.jpg)
POWERED BY SYMFONY2Y creciendo...
![Page 46: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/46.jpg)
CONCLUSIONES
• PHP y Symfony2 sirve para la mayoría de proyectos
• La estrategia de caching nos ayudará
• Podemos mejorar el rendimiento con buen profiling
• La BBDD suele ser el primer cuello de botella al escalar
• Un buen diseño de arquitectura es lo más importante
• PHP no es la mejor solución para algunos problemas
![Page 47: Escalabilidad y alto rendimiento con Symfony2](https://reader033.vdocuments.net/reader033/viewer/2022051514/54b7678d4a795957768b4607/html5/thumbnails/47.jpg)
¿PREGUNTAS?
• Twitter: @ricardclau
• E-mail: [email protected]
• Github: https://github.com/ricardclau
• Blog de PHP y Symfony2: http://www.ricardclau.com
• Por favor, comentad en http://joind.in/talk/view/8845