Symfony y 3 millones
de usuarios, nuestro día
         a día
   Jordi Llonch <jordi.llonch@ofertix.com>
Symfony y 3 millones de usuarios, nuestro dia a dia
Me presento

Jordi Llonch
jordi.llonch@ofertix.com
jordillonch
¿Qué veremos?
¿Código?
¿Código?
  NO
¿Técnicas?
¿Técnicas?
ALGUNAS
¿Filosofía?
¿Filosofía?
SUPONGO QUE SI
¿Lo más interesante?
¿Lo más interesante?
 Vuestras preguntas
¿Bueno, pero qué?
El proyecto
Vendemos productos y
servicios a precios interesantes
          por internet
Cada día abrimos 2-6
 pequeñas tiendas
  durante 3-4 días
Symfony y 3 millones de usuarios, nuestro dia a dia
Nuestros usuarios entran de golpe
     (cuando ven nuestro email)
Algunos números

• 5M visitas únicas mensuales.
• 100M páginas servidas/mes.
• 90M de correos enviados cada mes
• 50k pedidos al mes
Sólo contamos con
 nuestros recursos
Alcance
sistemas          frontal         backoffice        mailing


  SO        BBDD           SEO             CRM          programación

red        serv. web      caché            tickets
                                                      generación masiva
      granja PHP       monitorización      SCM
                                                        envío masivo
 SMTP           SAN                      producción
                                          campañas          firma
backup      NoSQL
                                         Marketing       gestión de
       Cachés
                                                         la lista de
                                                           correo
  monitorización

      mini cloud
       privado

         VPNs
Alcance x 2
Principios IT
Minimizar las
tecnologías que usamos
Symfony y 3 millones de usuarios, nuestro dia a dia
Symfony y 3 millones de usuarios, nuestro dia a dia
Somos los únicos
responsables de IT
Symfony y 3 millones de usuarios, nuestro dia a dia
Intentamos tener claro
dónde queremos llegar
pero sabemos que hoy
      no llegamos
Symfony y 3 millones de usuarios, nuestro dia a dia
COTS
COTS
Nos mola lo estándar
Symfony y 3 millones de usuarios, nuestro dia a dia
Nuestro equipo de I+D
Nuestro código
¡es symfony!
¿porqué?
estandarización
productividad
lo escribimos desde 0
      en 6 meses
Symfony y 3 millones de usuarios, nuestro dia a dia
2 programadores
A tener en cuenta
clases doctrine modelo
           !=
 clases lógica negocio
Eventos (decoupling)
Colas (procesos largos)
Encapsula lo que va a
        cambiar
           y
lo que necesites probar
Escribe código para los
 otros compañeros no
  para el compilador
Arquitectura
Servidores web y granja
 de renderización PHP
INTERNET




                        FRONTALES               CONTENIDO
                                                 ESTATICO




RENDERIZADORES PHP                  BASE DE DATOS




        Caché          SMTP                 Workers de procesos
Sesiones
memcached
Cache
Cacheamos:
   • Partes de la web que pueden ser estáticas
     (por ej. proceso de compra)

   • Información relativa a negocio muy usada
     pero que no es necesario que esté
     actualizada

   • assets (css, js, imágenes...)
memcached

  redis
Invalidación de caché

• del proceso de compra (invalida la app)
• de asset (invalida nuestro script deployer)
Envío de mail
Requisitos
Cada noche envía
3 millones de emails
Todos personalizados
Firmados con DKIM
¿cómo?
Lo hacemos en 2 pasos
        (decoupling)
1r paso
Seleccionamos todos
 los destinatarios y
    generamos el
     contenido
Seleccionamos todos
 los destinatarios y
    generamos el
     contenido

  Tardamos 1 hora
2º paso
entregar el correo
¿cómo?
• Varios procesos concurrentes cogen packs
  de emails y los entregan a los servidores
  SMTP

• Los servidores SMTP los entregan a los
  destinos

• Firmamos con DKIM utilizando el clúster
  de renderización PHP
Entregamos en 3 horas
Entregamos en 3 horas

      Si Hotmail nos deja...
Data warehouse
Necesitamos medir
para tomar decisiones
recolección de datos
desde la BBDD réplica
Cargamos los datos
  en un copo de nieve
en un MySQL dedicado
Los años pasan y
se nos piden cosas
     nuevas...
ergo
La base de datos
    evoluciona y
     el código
      también
Symfony y 3 millones de usuarios, nuestro dia a dia
doctrine migrations
En el99%      de las
     migraciones
añadimos campos
si la tabla es pequeña

      < 300 Mb
          ó
   < 300k registros
ejecutamos migración y
  actualizamos código
si la tabla es grande
ejecutamos migración a
       las 4:00h
lo hemos hecho 4
      veces
y la gente compra a
     esas horas...
Vale, y con el código?
Cada programador es
responsable de su
       código
Symfony y 3 millones de usuarios, nuestro dia a dia
Deployamos 5 o 6 veces al
          día
A veces fallamos y
tenemos que correr
por eso tenemos un
  MTTR muy bajo
¿Cómo?
Deployer




Al rescate!
Desarrollo en Sf2
       :)
Ideas basadas en
   capistrano
Requisitos
Symfony y 3 millones de usuarios, nuestro dia a dia
• Adaptar configuraciones para producción
• Adaptar configuraciones para producción
• Verificaciones del código y configuración
• Adaptar configuraciones para producción
• Verificaciones del código y configuración
• Deploy en 8 servidores simultáneamente
• Adaptar configuraciones para producción
• Verificaciones del código y configuración
• Deploy en 8 servidores simultáneamente
• 4 tipos de deploy
• Adaptar configuraciones para producción
• Verificaciones del código y configuración
• Deploy en 8 servidores simultáneamente
• 4 tipos de deploy
• Migraciones de la base de datos
• Adaptar configuraciones para producción
• Verificaciones del código y configuración
• Deploy en 8 servidores simultáneamente
• 4 tipos de deploy
• Migraciones de la base de datos
• Rollback
¿cómo?
script preparación de
        código
subimos código vía git
aplicación de deploy

• download
• code2production
• migrate
• rollback
• status
mi gato poniendo código
     en producción
Organización
Equipo humano
• 1 responsable de IT
• 5 programadores PHP
• 1 programador .NET y android
• 1 project leader
• 1 administrador de sistemas
ratios

• 1 programador / 600 k usuarios
• 1 administrador de sistemas para cada 3M
  de usuarios ;)
• 1 servidor para cada 250 k usuarios
FIN


    Autores:
Joan Valduvieco
  Jordi Llonch
¿Quién se apunta?
Gracias

Más contenido relacionado

PPT
Software Libre Y Escalabilidad
PDF
Escalabilidad y alto rendimiento con Symfony2
PPTX
PROYECTO BUSCAENESPAÑA.COM
PDF
El comercio electronico: Los 7 puntos esenciales de tu tienda online (Parte 1...
PDF
DeSymfonyDay 2014 - To mock or not to mock - Spanish
PDF
desarrollando la app de idealista
PPT
Las 7 ms de todo proceso productivo
PPT
Sistemas De ProduccióN De Bienes Tangibles E Intangibles
Software Libre Y Escalabilidad
Escalabilidad y alto rendimiento con Symfony2
PROYECTO BUSCAENESPAÑA.COM
El comercio electronico: Los 7 puntos esenciales de tu tienda online (Parte 1...
DeSymfonyDay 2014 - To mock or not to mock - Spanish
desarrollando la app de idealista
Las 7 ms de todo proceso productivo
Sistemas De ProduccióN De Bienes Tangibles E Intangibles

Similar a Symfony y 3 millones de usuarios, nuestro dia a dia (20)

PDF
Webinar Arquitectura de Microservicios
PDF
Sergio arroyo | TAPTAP Networks | Developers
PDF
Escalando hasta las 10.000 peticiones por segundo
PPTX
Integración continua y despliegue automático en Azure 
PDF
KronOps - Perfil Corporativo
DOC
Tienda Virtual.- Gygacom
PPTX
PGDAY-PERU 2012 SAP E-COMERCE
PDF
Refactorizando Pccomponentes.com con Symfony
PPTX
PresentacionSgemMarkelMoreno
PDF
Meetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOps
PPTX
Trabajo fin de master Dirección TI
PDF
Azure Realtime analytics: Análisis de datos en tiempo real
PDF
¡Que lo haga otro! Automatizaciones SEO para vivir mejor
PDF
Tecnologías de hoy y del futuro
PPTX
Empleos con futuro. Perfil de un ingeniero de datos
PDF
Derribando la torre de marfil - Plain Concepts Dev Day
PDF
Comenzando a usar el Continuous Delivery
PDF
Semana de la I+D - Proyecto OPOSSUM
PDF
Aplicaciones Big Data Marketing
PDF
Commit 2018 - Integrando Microservicios y Machine Learning
Webinar Arquitectura de Microservicios
Sergio arroyo | TAPTAP Networks | Developers
Escalando hasta las 10.000 peticiones por segundo
Integración continua y despliegue automático en Azure 
KronOps - Perfil Corporativo
Tienda Virtual.- Gygacom
PGDAY-PERU 2012 SAP E-COMERCE
Refactorizando Pccomponentes.com con Symfony
PresentacionSgemMarkelMoreno
Meetup Oracle Technology MAD_BCN: 6.2 DevOps y DataOps
Trabajo fin de master Dirección TI
Azure Realtime analytics: Análisis de datos en tiempo real
¡Que lo haga otro! Automatizaciones SEO para vivir mejor
Tecnologías de hoy y del futuro
Empleos con futuro. Perfil de un ingeniero de datos
Derribando la torre de marfil - Plain Concepts Dev Day
Comenzando a usar el Continuous Delivery
Semana de la I+D - Proyecto OPOSSUM
Aplicaciones Big Data Marketing
Commit 2018 - Integrando Microservicios y Machine Learning
Publicidad

Último (20)

PPTX
LEGALIZACIÓN Y VERIFICACIÓN DE UN APARATO TAXÍMETRO
DOCX
Conceptos básicos de programación PseInt laura.docx
PDF
Conceptos básicos de programación PseInt laura.pdf
PPT
Presentacion Proyecto Seguridad Chacao 09_10_08.ppt
PDF
PLAN DE ASEGURAMIENTO CURSOS CORTOS 2024.pdf
PDF
Herramientas-de-Recuperacion-de-Datos.pdf
PPTX
VariablesExpresiones.pptx conceptos que puedes usar en c++
PDF
conceptosbsicosdeprogramacinpseintlaura.pdf
PDF
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
PDF
Gtd Infraestructura Digital de Misión Critica
PDF
EL RESPETO mejororado para aprender .pdf
PPTX
Redes neuronales artificiales y como entrenarlas
PDF
sol tecnología 2025.pdf........pdf10-7grado
PDF
Estrategia de apoyo de tecnología 9-5 Daylin Castaño
PDF
Estrategia de Apoyo Juan José Narvaéz 9-4
PDF
Salud digital: información, integración y el valor de MS Fabric for Health
PPT
CONFIGURACIÓN DE PANTALLA DE UNA COMPUTADORA
PDF
1.3.4-Handling-and-Safety-Instructions-ESP-2024.pdf
PDF
004-CC2014-Irrigacion Mbb equinos del mundo
PDF
Sociedad y ética digital en inteligencia artificial
LEGALIZACIÓN Y VERIFICACIÓN DE UN APARATO TAXÍMETRO
Conceptos básicos de programación PseInt laura.docx
Conceptos básicos de programación PseInt laura.pdf
Presentacion Proyecto Seguridad Chacao 09_10_08.ppt
PLAN DE ASEGURAMIENTO CURSOS CORTOS 2024.pdf
Herramientas-de-Recuperacion-de-Datos.pdf
VariablesExpresiones.pptx conceptos que puedes usar en c++
conceptosbsicosdeprogramacinpseintlaura.pdf
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
Gtd Infraestructura Digital de Misión Critica
EL RESPETO mejororado para aprender .pdf
Redes neuronales artificiales y como entrenarlas
sol tecnología 2025.pdf........pdf10-7grado
Estrategia de apoyo de tecnología 9-5 Daylin Castaño
Estrategia de Apoyo Juan José Narvaéz 9-4
Salud digital: información, integración y el valor de MS Fabric for Health
CONFIGURACIÓN DE PANTALLA DE UNA COMPUTADORA
1.3.4-Handling-and-Safety-Instructions-ESP-2024.pdf
004-CC2014-Irrigacion Mbb equinos del mundo
Sociedad y ética digital en inteligencia artificial
Publicidad

Symfony y 3 millones de usuarios, nuestro dia a dia

Notas del editor

  • #2: \n
  • #3: \n
  • #4: \n
  • #5: \n
  • #6: \n
  • #7: \n
  • #8: \n
  • #9: \n
  • #10: \n
  • #11: \n
  • #12: \n
  • #13: \n
  • #14: \n
  • #15: \n
  • #16: \n
  • #17: \n
  • #18: Aqu&amp;#xED; explicar que &amp;#xE9;s Ofertix.\nI r&amp;#xE1;pidament com funciona.\nExplicar que &amp;#xE9;s com obrir petites botigues cada dia (microsites). (s&amp;#x2019;enlla&amp;#xE7;ar&amp;#xE0; amb q podem invalidar caches a nivell de microsite)\n
  • #19: \n
  • #20: \n
  • #21: \n
  • #22: \n
  • #23: Servidor web = NGINX\nGranja PHP = php-fpm\nLog&amp;#xED;stica t&amp;#xE9; molt de pes al projecte. Pantalles molt complexes amb Sencha.\nSCM = Supply Chain Management\n
  • #24: \n
  • #25: \n
  • #26: Nos permite dominar nuestras herramientas y sistemas. Pocas dependencias.\nAdem&amp;#xE1;s nuestros programadores son m&amp;#xE1;s polivalentes.\n
  • #27: \n
  • #28: Vendemos en internet si la web no va, no comemos.\nTenemos los m&amp;#xED;nimos proveedores externos. Ellos no est&amp;#xE1;n tan comprometidos con nuestro negocio como nosotros.\n
  • #29: \n
  • #30: No tiramos c&amp;#xF3;digo, lo evolucionamos.\nNos pensamos muy bien las cosas antes de decidir que debemos desarrollar algo.\n
  • #31: \n
  • #32: Cheap Off The Shelf\nTecnolog&amp;#xED;as simples y gen&amp;#xE9;ricas.\nPodr&amp;#xED;amos utilizar powermta, o una aplicaci&amp;#xF3;n de datawarehouse o un framework propio hecho de oro...\nEsto no mola del todo pq hacemos pocos desarrollos que podamos publicar para que otros los usen.\n\n
  • #33: \n
  • #34: \n
  • #35: \n
  • #36: \n
  • #37: teniamos la idea de aumentar el equipo de programadores\ny evolucionar el c&amp;#xF3;digo\ny no quer&amp;#xED;amos reinventar la rueda\n\n\n
  • #38: \n
  • #39: desarrollo en paralelo a la operaci&amp;#xF3;n de ofertix1. \nNo paramos de vender.\nHemos evolucionado ese desarrollo durante 2 a&amp;#xF1;os y pico\n
  • #40: \n
  • #41: \n
  • #42: \n
  • #43: Ponemos eventos en las partes susceptibles de ser ampliadas. Sobretodo para notificaciones o acciones a realizar cuando pasa alguna cosa.\n
  • #44: Para generar documentaci&amp;#xF3;n.\nProcesos de preparaci&amp;#xF3;n de elementos de la web (pej fotograf&amp;#xED;as)\n\n
  • #45: \n
  • #46: No tenemos problemas de rendimiento por c&amp;#xF3;digo mal escrito (si acaso por malas ideas). Pero si que podemos tener problemas de &amp;#x201C;rendimiento&amp;#x201D; en el desarrollo si quien tiene que tocar tu c&amp;#xF3;digo no lo entiende.\n
  • #47: \n
  • #48: \n
  • #49: \n
  • #50: \n
  • #51: Putada si tenemos que reiniciar, pero eso no ha pasado nunca. Lo meteremos en Redis, alg&amp;#xFA;n d&amp;#xED;a.\n
  • #52: \n
  • #53: \n
  • #54: Memcached va a morir.. Nuestro futuro es redis. Estamos en ello.\n
  • #55: \n
  • #56: \n
  • #57: \n
  • #58: \n
  • #59: Datos de clientes, ofertas exclusivas, etc..\n
  • #60: DKIM es una firma digital asim&amp;#xE9;trica aplicada a cada correo para validar que el remitente es quien dice ser.\n
  • #61: \n
  • #62: \n
  • #63: \n
  • #64: \n
  • #65: \n
  • #66: \n
  • #67: \n
  • #68: Aprofitem la CPU que de nit no fem servir firmant amb el cluster de PHP\nEls nostres servidors SMTP fan de buffer. Aix&amp;#xED; no tenim el proc&amp;#xE9;s parat. Un servidor SMTP ser&amp;#xE0; sempre millor client SMTP que nosaltres.\n
  • #69: \n
  • #70: \n
  • #71: \n
  • #72: Per a evitar bloquejar les taules amb consultes llargues. S&amp;#xED; un select tamb&amp;#xE9; bloqueja.\n
  • #73: con algunos ajustes en referencia a la transaccionalidad\n
  • #74: \n
  • #75: \n
  • #76: \n
  • #77: \n
  • #78: \n
  • #79: \n
  • #80: \n
  • #81: \n
  • #82: \n
  • #83: \n
  • #84: \n
  • #85: \n
  • #86: \n
  • #87: Cada uno se como su ...erda.\n
  • #88: \n
  • #89: Procurem que la gent faci les seves hores i no m&amp;#xE9;s. Cal estar descansats.\nOdiem l&amp;#x2019;stress.\n
  • #90: MTTR = Mean Time To Recovery (o Resolve)\n
  • #91: \n
  • #92: \n
  • #93: \n
  • #94: \n
  • #95: \n
  • #96: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #97: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #98: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #99: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #100: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #101: Parlem de netejar cach&amp;#xE9;s, APC, etc?\n\n
  • #102: \n
  • #103: \n
  • #104: \n
  • #105: \n
  • #106: Parla d&amp;#x2019;etsy\n
  • #107: \n
  • #108: Preguntar quantes persones pensen que som?\n
  • #109: Explicar que confiem amb les persones i la seva responsabilitat\nQue busquem el balan&amp;#xE7; entre lo personal i lo professional\nQue la gent quan porta moltes hores currant fa fallos\nQue intentem mantenir el Focus. \nMultidisciplinar\n
  • #110: he comptat uns 12 servidors per ofx\n
  • #111: \n
  • #112: \n
  • #113: \n