Este documento describe una conferencia sobre Symfony, computación en la nube y escalabilidad web que se llevará a cabo los días 5 y 6 de julio de 2010 en la Universitat Jaume I en Castellón, España. La conferencia incluirá presentaciones sobre arquitectura web escalable, rendimiento y computación en la nube.
1. Castellón - 5 y 6 de Julio 2010 – Universitat Jaume I Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony patrocinan organizan colaboran
2. Symfony, cloud computing y web escalables Asier Marqués, blackslot.com 5 y 6 de julio 2010 Universitat Jaume I, Castellón Jornadas Symfony http://decharlas.uji.es/symfony
3. Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud http://blackslot.com Jornadas Symfony http://decharlas.uji.es/symfony
4. Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud Desarrollamos aplicaciones web http://blackslot.com Jornadas Symfony http://decharlas.uji.es/symfony
5. Proveemos y gestionamos infraestructuras basadas en servidores y soluciones cloud Desarrollamos aplicaciones web Por supuesto, en Symfony http://blackslot.com Jornadas Symfony http://decharlas.uji.es/symfony
17. Escalabilidad Una aplicación web o infraestructura es escalable cuando es capaz de aumentar la capacidad de dar servicio y funcionalidad, con la menor carga administrativa y de desarrollo posible. Jornadas Symfony http://decharlas.uji.es/symfony
18. Rendimiento Disponemos de buen rendimiento cuando somos capaces de soportar la mayor carga de trabajo posible con los menores recursos de hardware posibles. Jornadas Symfony http://decharlas.uji.es/symfony
19. Alta disponibilidad Gozamos de Alta disponibilidad cuando seguimos dando servicio aunque nuestra infraestructura sufra problemas en algunas de sus partes críticas. Jornadas Symfony http://decharlas.uji.es/symfony
35. Symfony / Desarrollo Usa la configuración Permite que una persona no programador mantenga tu aplicación. Automatiza el mantenimiento mediante tareas. Jornadas Symfony http://decharlas.uji.es/symfony
36. ejemplo SITUACIÓN Son las 4am y nuestro administrador de sistemas necesita añadir un nuevo nodo de memcached al pool Nosotros estamos ([ durmiendo | en Tokio | bien acompañados ]+) Jornadas Symfony http://decharlas.uji.es/symfony
47. Configuración de caché propia Cacheamos el archivo de configuración Leemos la configuración desde cache Jornadas Symfony http://decharlas.uji.es/symfony
48.
49. Estaría bien que se pudiese automatizar el despliegue de nuevos nodos para memcached de forma fácilJornadas Symfony http://decharlas.uji.es/symfony
50. Automatizamos el añadir nuevos servers al pool Jornadas Symfony http://decharlas.uji.es/symfony
51. Automatizamos el añadir nuevos servers al pool Leemos la configuración y agregamos un nuevo servidor en el caso de que sea necesario Jornadas Symfony http://decharlas.uji.es/symfony
61. Delegamos las consultas read-only en los Slaves, liberando de esa carga a los servidores Master.Jornadas Symfony http://decharlas.uji.es/symfony
62. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
63. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
64. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
65. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
66. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
67. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
68. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
69. MySql / Master - Slave Extendemos las clases Doctrine_Query y Doctrine_Record Jornadas Symfony http://decharlas.uji.es/symfony
70. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
71. MySql / Master - Slave Si la query es de tipo SELECT la conexión se hará a un servidor Slave, en caso contrario al master Jornadas Symfony http://decharlas.uji.es/symfony
72. MySql / Master - Slave Jornadas Symfony http://decharlas.uji.es/symfony
73. MySql / Master - Slave Cuando salvemos, la consulta se hará contra el servidor master Jornadas Symfony http://decharlas.uji.es/symfony
74. MySql / Optimizar Reducir el número de consultas VS desglosar una consulta compleja en varias sencillas QueryCache Sustituir Count(*) por FOUND_ROWS() Olvidarnos de DQL en consultas complejas Desnormalizar VS usar NO-SQL: Memcached, Redis, Cassandra.. Jornadas Symfony http://decharlas.uji.es/symfony
75. MySql / sfPager sin Count Jornadas Symfony http://decharlas.uji.es/symfony
76. MySql / sfPager sin Count Añadimos SQL_CAC_FOUND_ROWS al SELECT Jornadas Symfony http://decharlas.uji.es/symfony
77. MySql / sfPager sin Count Contamos las tuplas totales con FOUND_ROWS Jornadas Symfony http://decharlas.uji.es/symfony
78. MySql / Búsquedas Limitaciones de MySql en búsquedas Bajo rendimiento en tablas con muchas tuplas en las que es necesario buscar en campos de texto muy grandes. No distingue resultados en base a su relevancia. A menudo obliga a desnormalizar. Jornadas Symfony http://decharlas.uji.es/symfony
89. Caché a nivel de componente y partialDoctrine posee caché a nivel de consultas Opciones: APC, Xcache, Memcached, SQLite, Disco… Jornadas Symfony http://decharlas.uji.es/symfony
91. Cache / APC Cada servidor web almacena objetos localmente, inaccesibles desde el resto de frontales Jornadas Symfony http://decharlas.uji.es/symfony
96. Cache / APC apc.shm_size (por defecto 30MB) Tamaño de memoria compartida utilizada para almacenar objetos. apc.stat (por defecto 1) Si se encuentra activado comprueba por cada ciclo de ejecución si el código ha cambiado. Estableciéndolo 0 incrementa el rendimiento siempre que usemos rutas absolutas en los requires/includes. Jornadas Symfony http://decharlas.uji.es/symfony
98. Cache / Memcached Cualquier servidor web puede gestionar la información de cache Jornadas Symfony http://decharlas.uji.es/symfony
99. Cache / Memcached Cualquier servidor web puede gestionar la información de cache Cada servidor de memcached es el responsable de una serie de objetos Jornadas Symfony http://decharlas.uji.es/symfony
131. Cache / proxyCache Evalúa si tiene cache de la vista solicitada. Jornadas Symfony http://decharlas.uji.es/symfony
132. Cache / proxyCache En caso de no tener, solicita la información a los servidores web y de archivos. Jornadas Symfony http://decharlas.uji.es/symfony
133. Cache / proxyCache Almacena la información en caché y responde a la petición. Jornadas Symfony http://decharlas.uji.es/symfony
134. Cache / proxyCache La siguiente petición es servida desde caché Jornadas Symfony http://decharlas.uji.es/symfony
139. Cache / proxyCache / Varnish Conexión al servidor web Cacheamos los estáticos No cacheamos las peticiones POST No cacheamos las peticiones que incluyan autenticación http o una cookie __sesion Lo demás se cachea Jornadas Symfony http://decharlas.uji.es/symfony
140. Cache / proxyCache / Varnish Cuando una url es gestionada por la cache de varnish, se llamará a los métodos hit, miss y fetch Jornadas Symfony http://decharlas.uji.es/symfony
141. Cache / proxyCache / Varnish vcl_hit Configuramos que si la url contiene la palabra «PURGAR_CACHE» elimine la caché. vcl_miss Configuramos que si la url contiene la palabra «PURGAR_CACHE» y no se encuentra en caché, nos avise Jornadas Symfony http://decharlas.uji.es/symfony
142. Cache / proxyCache / Varnish vcl_fetch Miss llama a este método para que cree la caché. Ahí le establecemos el tiempo de vida de la misma Jornadas Symfony http://decharlas.uji.es/symfony
143. Cache / proxyCache / ESI ESI (EdgeSideIncludes) nos permiten incluir contenidos de una url en nuestras vistas. Podemos distribuir contenido de nuestro site e incluso tratar cada parte como si se tratase de una aplicación web independiente. Symfony2 incluirá soporte nativo para ESI. Jornadas Symfony http://decharlas.uji.es/symfony
145. Cache / proxyCache / ESI <esi:includesrc = " /esi/categorias.php" alt = " <?php echo url_for(…) ?>" onerror="continue" /> Las urls pueden ser relativas o absolutas Jornadas Symfony http://decharlas.uji.es/symfony
146. Dividir en capas Jornadas Symfony http://decharlas.uji.es/symfony
147. Dividir en capas Arquitecturas más modulares y por lo tanto, más fáciles de escalar horizontalmente. Separamos los problemas en capas. Nos permite usar varias tecnologías de forma transparente, la más adecuada para cada caso. Jornadas Symfony http://decharlas.uji.es/symfony
190. Se paga por almacenamiento, número de peticiones y transferencia.
191. El almacenamiento es flexible e infinito, pero cada objeto tiene un límite de 5GB
192. Accesible mediante REST con url basada en subdominios o directorio:http:// [bucket_id] .dominio.com/objeto http://s3.amazonaws3.com/ [bucket_id] /objeto Jornadas Symfony http://decharlas.uji.es/symfony
203. Amazon / Cloudfusion / EC2 Arranco una instancia virtual en EC2 Le asocio una dirección ip pública. Jornadas Symfony http://decharlas.uji.es/symfony
204.
205. Podemos en todo momento aumentar nuestra capacidad de almacenamiento y proceso, de forma inmediata y flexibleJornadas Symfony http://decharlas.uji.es/symfony
208. Además de por escalar, necesitamos preocuparnos por el rendimiento para reducir nuestros costes
209. Hoy en día existen más opciones que Apache + Mysqlen entornos Linux
210. El cloudcomputing es una opción asequible para disponer de arquitecturas pensadas para escalar desde el principio.Jornadas Symfony http://decharlas.uji.es/symfony
212. GRACIAS Asier Marqués asiermarques@blackslot.com 5 y 6 de julio 2010 Universitat Jaume I, Castellón Jornadas Symfony http://decharlas.uji.es/symfony