SlideShare una empresa de Scribd logo
1 de 26
Infraestructura para un 
proyecto de gran porte 
Noviembre 2014
Andrés 
Montañez 
@andres_montanez 
Rodrigo 
Mendez 
@menrod 
Alejandro 
Glejberman 
@aglejberman 
@aciliainternet
Introducción 
■ Sobre el proyecto 
■ Infraestructura de servidores 
■ Software y servicios utilizados 
■ Desafíos 
■ Conclusiones
El Proyecto
Punto de Partida 
■ Migración a una nueva plataforma 
■ Tráfico heredado 
■ En caso de error… no rollback 
■ Contenido Editorial 
■ Manejador de contenido 
■ Sitios web 
■ Multi país/región
Situación inicial 
■ ¿Que debemos soportar inicialmente? 
■ Aplicaciones “legacy”: LAMP 
■ Una nueva aplicación en Symfony 2 
■ Otras aplicaciones web y mobile en el futuro 
■ ¿Con que recursos empezamos? 
■ Balanceador CISCO ACE 
■ Ocho servidores
Los Fierros
Balanceo de tráfico 
■ Opciones 
■ Round Robin en DNS 
■ Heart Beat 
■ Load Balancer 
■ Cisco ACE 
■ Único punto de acceso a las aplicaciones 
■ ¡Es hardware dedicado! 
■ Deriva todo el tráfico a los servidores Varnish 
■ Permite escalar horizontalmente el cache
Receta clásica: LAMP 
■ Tenemos dos servidores de Frontend 
■ ¡Hagamos todo LAMP! 
■ Pero... 
■ Aplicaciones incompatibles (módulos, versiones) 
■ Necesitamos redundancia 
■ ¿Cómo solucionamos? 
■ ¡Virtualizamos todo!
Frontends Virtualizados 
■ ¿Qué logramos virtualizando? 
■ Aislamos las diferentes aplicaciones 
■ Logramos redundancia 
■ Distribución de recursos y tráfico 
■ Servicio de virtualización: KVM 
■ Ventaja: funciona… 
■ Desventaja: …pero no tan bien
Backends 
■ Bases de Datos 
■ MySQL 
■ MongoDB 
■ Gestión de Contenidos 
■ Feeds de uso externo 
■ Apps 
■ Integradores 
■ Scripts de mantenimiento
Media 
■ Varios TeraBytes de assets 
■ Web Server 
■ Nginx 
■ Optimizado para statics 
■ PHP-FPM (imágenes “on the fly”) 
■ Montado en Backends y Frontends 
■ Origen de los CDNs
Poniendo 
todo junto
Desafíos
Entornos de Trabajo 
Pero en local me funciona… 
■ Ambientes de staging 
■ Entornos por aplicación 
■ Entornos por issue 
■ Control de Versiones
Deployment 
¿Cómo subimos a producción? 
■ Magallanes 
■ Peticiones de Deployment 
■ Deploy Master 
■ ¡Los viernes no se hace deploy!
Performance y Cache 
¿Cómo mejoramos la performance? 
■ Varnish 
■ Memcached 
■ Sesiones de PHP 
■ Fragment Cache
SSL 
¿Cómo usamos HTTPs con una sola IP? 
■ Varnish no soporta HTTPs 
■ Son varios certificados SSL 
■ Solución… Pound
Búsquedas 
¿Aparece algo si busco “собака сплетник”? 
■ Más de 30 idiomas 
■ Incluyendo Chino, Ruso, Griego, Turco… 
■ Solucionamos con… Sphinx
DELETE FROM … Oops! 
Backups 
■ Control de Versiones en Git 
■ Respaldo y Réplicas de Bases de Datos 
■ Respaldo de Assets 
■ Respaldo de código no versionado
Monitoreo 
¿Te levanta el sitio? 
■ Testing Unitario y Funcional 
■ Integración Continua 
■ Monitoreo permanente 
■ Guardia 24x7
Moraleja
Situación Actual 
✓ Servidores: 13 
✓ Máquinas virtuales: 24 
✓ Aplicaciones: 7 y sumando 
✓ Sitios: +120 
✓ Feeds: +10 
✓ Visitas únicas: +7 millones por mes 
✓ Líneas de PHP: ~500.000 made in Acilia
¿Qué nos ha dejado la experiencia? 
“Una infraestructura a medida para cada aplicación” 
– La virtualización rinde 
“¡En PHP 5.4 tenemos traits!” 
– Beneficios de estar actualizados 
“Desarrollar para el problema y no para el proyecto” 
– Acilia Components
Gracias 
¿Preguntas?
Enlaces 
Acilia Internet 
@aciliaInternet 
Andrés Montañez 
@andres_montanez 
Rodrigo Mendez 
@menrod 
Alejandro Glejberman 
@aglejberman 
Varnish 
Pound 
Sphinx 
OSSEC 
rdiff-backup 
Magallanes

Más contenido relacionado

La actualidad más candente

T1 trabajo1navarrozuaraelisaramosruizpedropresentacion
T1 trabajo1navarrozuaraelisaramosruizpedropresentacionT1 trabajo1navarrozuaraelisaramosruizpedropresentacion
T1 trabajo1navarrozuaraelisaramosruizpedropresentacionPedro Ramos
 
Desplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDesplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDavid Gil Sánchez
 
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaA falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaDani Latorre
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + AzureNacho Fanjul Corteguera
 
Typo3: El CMS que vino del frío
Typo3: El CMS que vino del fríoTypo3: El CMS que vino del frío
Typo3: El CMS que vino del fríoOpenExpoES
 
Conociendo Full Stack JavaScript usando NodeJs y MongoDB
Conociendo Full Stack JavaScript usando NodeJs y MongoDBConociendo Full Stack JavaScript usando NodeJs y MongoDB
Conociendo Full Stack JavaScript usando NodeJs y MongoDBSoftware Guru
 
Timerepublik
TimerepublikTimerepublik
Timerepublikbetabeers
 

La actualidad más candente (9)

T1 trabajo1navarrozuaraelisaramosruizpedropresentacion
T1 trabajo1navarrozuaraelisaramosruizpedropresentacionT1 trabajo1navarrozuaraelisaramosruizpedropresentacion
T1 trabajo1navarrozuaraelisaramosruizpedropresentacion
 
Desplegando Drupal con Capistrano
Desplegando Drupal con CapistranoDesplegando Drupal con Capistrano
Desplegando Drupal con Capistrano
 
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers ZaragozaA falta de APIs buenas son tortas. XV Betabeers Zaragoza
A falta de APIs buenas son tortas. XV Betabeers Zaragoza
 
¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure¿Cómo mezclar agua con aceite? NodeJS + Azure
¿Cómo mezclar agua con aceite? NodeJS + Azure
 
Typo3: El CMS que vino del frío
Typo3: El CMS que vino del fríoTypo3: El CMS que vino del frío
Typo3: El CMS que vino del frío
 
Conociendo Full Stack JavaScript usando NodeJs y MongoDB
Conociendo Full Stack JavaScript usando NodeJs y MongoDBConociendo Full Stack JavaScript usando NodeJs y MongoDB
Conociendo Full Stack JavaScript usando NodeJs y MongoDB
 
La Noche Electoral
La Noche ElectoralLa Noche Electoral
La Noche Electoral
 
Timerepublik
TimerepublikTimerepublik
Timerepublik
 
Tema6
Tema6Tema6
Tema6
 

Similar a PHP Conference Argentina 2014

Web app, el arte del botón derecho -> Publicar
Web app, el arte del botón derecho -> PublicarWeb app, el arte del botón derecho -> Publicar
Web app, el arte del botón derecho -> PublicarNacho Fanjul Corteguera
 
Saregune Técnica
Saregune TécnicaSaregune Técnica
Saregune TécnicaSaregune
 
Serverless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nubeServerless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nubeQuito Lambda
 
Configurando un servidor para Moodle
Configurando un servidor para MoodleConfigurando un servidor para Moodle
Configurando un servidor para MoodleDennis Cohn
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Luis Bosque
 
Introducción a SharePoint Framework
Introducción a SharePoint FrameworkIntroducción a SharePoint Framework
Introducción a SharePoint FrameworkHaaron Gonzalez
 
Diseña tu propio Office 365 - Global Azure Bootcamp 2015
Diseña tu propio Office 365 - Global Azure Bootcamp 2015Diseña tu propio Office 365 - Global Azure Bootcamp 2015
Diseña tu propio Office 365 - Global Azure Bootcamp 2015Miguel Tabera
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsErnesto Anaya
 
Flisol 2011 alta disponibilidad y alto desempeño
Flisol 2011   alta disponibilidad y alto desempeñoFlisol 2011   alta disponibilidad y alto desempeño
Flisol 2011 alta disponibilidad y alto desempeñocrio_
 
Wikipedia Burgos devfest 2017
Wikipedia Burgos devfest 2017Wikipedia Burgos devfest 2017
Wikipedia Burgos devfest 2017Jaime Crespo
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQLJuan Percy Rojas Cruz
 
Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021Fernando Puente
 
Desarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceDesarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceMario IC
 
Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014mszuchman
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryGonzalo Chacaltana
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVIrontec
 

Similar a PHP Conference Argentina 2014 (20)

Web app, el arte del botón derecho -> Publicar
Web app, el arte del botón derecho -> PublicarWeb app, el arte del botón derecho -> Publicar
Web app, el arte del botón derecho -> Publicar
 
Saregune Técnica
Saregune TécnicaSaregune Técnica
Saregune Técnica
 
Serverless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nubeServerless: La evolucion de la arquitectura a la nube
Serverless: La evolucion de la arquitectura a la nube
 
Configurando un servidor para Moodle
Configurando un servidor para MoodleConfigurando un servidor para Moodle
Configurando un servidor para Moodle
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
 
Introducción a SharePoint Framework
Introducción a SharePoint FrameworkIntroducción a SharePoint Framework
Introducción a SharePoint Framework
 
Diseña tu propio Office 365 - Global Azure Bootcamp 2015
Diseña tu propio Office 365 - Global Azure Bootcamp 2015Diseña tu propio Office 365 - Global Azure Bootcamp 2015
Diseña tu propio Office 365 - Global Azure Bootcamp 2015
 
BBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOpsBBVA Arquitectura - Demo DevOps
BBVA Arquitectura - Demo DevOps
 
Flisol 2011 alta disponibilidad y alto desempeño
Flisol 2011   alta disponibilidad y alto desempeñoFlisol 2011   alta disponibilidad y alto desempeño
Flisol 2011 alta disponibilidad y alto desempeño
 
Principios de cloud native
Principios de cloud nativePrincipios de cloud native
Principios de cloud native
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Wikipedia Burgos devfest 2017
Wikipedia Burgos devfest 2017Wikipedia Burgos devfest 2017
Wikipedia Burgos devfest 2017
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
 
Skipfish
Skipfish Skipfish
Skipfish
 
Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021Optimiza tus webs a bajo costo - WCVenezuela2021
Optimiza tus webs a bajo costo - WCVenezuela2021
 
Cómo elegir un servidor Web
Cómo elegir un servidor WebCómo elegir un servidor Web
Cómo elegir un servidor Web
 
Desarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_sourceDesarrollo tecnologias software_libre_open_source
Desarrollo tecnologias software_libre_open_source
 
Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014Meetup - NGinx - 08/2014
Meetup - NGinx - 08/2014
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 

Último (20)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 

PHP Conference Argentina 2014

  • 1. Infraestructura para un proyecto de gran porte Noviembre 2014
  • 2. Andrés Montañez @andres_montanez Rodrigo Mendez @menrod Alejandro Glejberman @aglejberman @aciliainternet
  • 3. Introducción ■ Sobre el proyecto ■ Infraestructura de servidores ■ Software y servicios utilizados ■ Desafíos ■ Conclusiones
  • 5. Punto de Partida ■ Migración a una nueva plataforma ■ Tráfico heredado ■ En caso de error… no rollback ■ Contenido Editorial ■ Manejador de contenido ■ Sitios web ■ Multi país/región
  • 6. Situación inicial ■ ¿Que debemos soportar inicialmente? ■ Aplicaciones “legacy”: LAMP ■ Una nueva aplicación en Symfony 2 ■ Otras aplicaciones web y mobile en el futuro ■ ¿Con que recursos empezamos? ■ Balanceador CISCO ACE ■ Ocho servidores
  • 8. Balanceo de tráfico ■ Opciones ■ Round Robin en DNS ■ Heart Beat ■ Load Balancer ■ Cisco ACE ■ Único punto de acceso a las aplicaciones ■ ¡Es hardware dedicado! ■ Deriva todo el tráfico a los servidores Varnish ■ Permite escalar horizontalmente el cache
  • 9. Receta clásica: LAMP ■ Tenemos dos servidores de Frontend ■ ¡Hagamos todo LAMP! ■ Pero... ■ Aplicaciones incompatibles (módulos, versiones) ■ Necesitamos redundancia ■ ¿Cómo solucionamos? ■ ¡Virtualizamos todo!
  • 10. Frontends Virtualizados ■ ¿Qué logramos virtualizando? ■ Aislamos las diferentes aplicaciones ■ Logramos redundancia ■ Distribución de recursos y tráfico ■ Servicio de virtualización: KVM ■ Ventaja: funciona… ■ Desventaja: …pero no tan bien
  • 11. Backends ■ Bases de Datos ■ MySQL ■ MongoDB ■ Gestión de Contenidos ■ Feeds de uso externo ■ Apps ■ Integradores ■ Scripts de mantenimiento
  • 12. Media ■ Varios TeraBytes de assets ■ Web Server ■ Nginx ■ Optimizado para statics ■ PHP-FPM (imágenes “on the fly”) ■ Montado en Backends y Frontends ■ Origen de los CDNs
  • 15. Entornos de Trabajo Pero en local me funciona… ■ Ambientes de staging ■ Entornos por aplicación ■ Entornos por issue ■ Control de Versiones
  • 16. Deployment ¿Cómo subimos a producción? ■ Magallanes ■ Peticiones de Deployment ■ Deploy Master ■ ¡Los viernes no se hace deploy!
  • 17. Performance y Cache ¿Cómo mejoramos la performance? ■ Varnish ■ Memcached ■ Sesiones de PHP ■ Fragment Cache
  • 18. SSL ¿Cómo usamos HTTPs con una sola IP? ■ Varnish no soporta HTTPs ■ Son varios certificados SSL ■ Solución… Pound
  • 19. Búsquedas ¿Aparece algo si busco “собака сплетник”? ■ Más de 30 idiomas ■ Incluyendo Chino, Ruso, Griego, Turco… ■ Solucionamos con… Sphinx
  • 20. DELETE FROM … Oops! Backups ■ Control de Versiones en Git ■ Respaldo y Réplicas de Bases de Datos ■ Respaldo de Assets ■ Respaldo de código no versionado
  • 21. Monitoreo ¿Te levanta el sitio? ■ Testing Unitario y Funcional ■ Integración Continua ■ Monitoreo permanente ■ Guardia 24x7
  • 23. Situación Actual ✓ Servidores: 13 ✓ Máquinas virtuales: 24 ✓ Aplicaciones: 7 y sumando ✓ Sitios: +120 ✓ Feeds: +10 ✓ Visitas únicas: +7 millones por mes ✓ Líneas de PHP: ~500.000 made in Acilia
  • 24. ¿Qué nos ha dejado la experiencia? “Una infraestructura a medida para cada aplicación” – La virtualización rinde “¡En PHP 5.4 tenemos traits!” – Beneficios de estar actualizados “Desarrollar para el problema y no para el proyecto” – Acilia Components
  • 26. Enlaces Acilia Internet @aciliaInternet Andrés Montañez @andres_montanez Rodrigo Mendez @menrod Alejandro Glejberman @aglejberman Varnish Pound Sphinx OSSEC rdiff-backup Magallanes

Notas del editor

  1. Vamos a contar nuestra experiencia de haber llevado adelante un proyecto de gran porte utilizando PHP en combinación con otras tecnologías. Nosotros somos: Andrés: Más de una década desarrollando en PHP. Creador de la herramienta de deployment Magallanes. Jugador de rol (a la Dungeons & Dragons). Cinéfilo. Uruguayo que no toma mate. Rodrigo: Puede trabajar con cualquier Linux siempre y cuando use KDE, Programador Macho, vi es su entorno de desarrollo. Uruguayo que solo toma mate. Alejandro: 10 años con php y con symfony desde la versión 1.0, futbolista frustrado devenido en ingenerio en computación. Acilia: Es una empresa de software, ubicada en Madrid y Montevideo. Realizamos proyectos de Internet, web y móvil. Trabajamos con una amplia gama de tecnologías, pero nos apoyamos mucho en PHP / Symfony.
  2. Vamos a presentar la definición de la arquitectura de servidores, la definición de la infraestructura y el hardware utilizado, sin ahondar en detalle. Mostraremos la combinación de software elegido para las distintas soluciones que implementamos. Es una forma de implementar, no la única. Nos encargamos de todo el ecosistema. Desde el desarrollo hasta el mantenimiento, pasando por servidores y monitoreo.
  3. Migración de una arquitectura previa, tanto en software como en hardware (vencimiento de licencias???) Una refactorización dónde se ve todo igual DNS TTL Tráfico heredado: la aplicación ya contaba con bastante tráfico, había que mantenerlo No había margen para “crecer de a poco” Contenido editorial: noticias, artículos, competiciones, usuarios
  4. Servidores: Dos servidores de Varnish (cache) Dos servidores de Frontend (vms / apps) Dos servidores de Backend (cms) Un servidor de Media (assets) Un servidor de Staging Nota 1: Porque 8? tuvimos la posibilidad de elegir la cantidad de servidores, el cliente estaba de acuerdo. Nota 2: Explicar la terminología y en que servicios consiste cada uno Nota 3: Porque no 2 de media? Por akamai. Nota 4: Servicios grandes: Front y Back, por la redundancia se requieren 2 de cada uno, asi que 4 minimo. Se necesitaba una capa de cache, por lo cual si queriamos cumplir con la redundancia ibamos a necesitar 2 más, ahi van 6. Esto toma el 75% de los servidores iniciales: 8. Un numero considerable para una aplicación que recién comenzaba.
  5. Servidores Varnish son la primer línea de defensa de las aplicaciones (conexión entre Balanceador y Varnish) Explicar que es el balanceador, en terminos fisicos (hardware). Que otras opciones hay? Round robin en DNS, pero da problemas si uno de los puntos de acceso se cae. HeartBeat, en el proveedor actual no podemos mover las IPs publicas. Explicar los falsos positivos. Problemas de colocation, etc. Ventajas? Facilita la administración de los dominios Desventajas? Tener un único punto de acceso es útil de forma administrativa, pero problemático cuando falla, por ejemplo por algún switch en mal estado (son problemas atípicos).
  6. Incompatibilidad: Las aplicaciones legacy y la nueva en Symfony2 no son compatibles en el mismo entorno. Cada aplicacion requiere de distinta configuración en apache, distintas versiones de PHP Cada aplicacion necesita modulos especiales Configuraciones de Varnish distintas para cada app Hay que cumplir todos estos requisitos, solo con dos servidores y sin perder la redundancia. Nota 1: Más adelante veremos la toma de decisión sobre como determinamos que servicios/software utilizar.
  7. Virtualizamos los servidores de frontend Aislamos aplicaciones, configuraciones independientes y tuneadas Cada aplicación puede tener asignada la cantidad de recursos que necesite en cada momento. Cada aplicacion puede tener la configuracion especifica que se requiera. VMWare Qué problemas tiene kvm? Debido al poco tiempo de pruebas, decidimos utilizar KVM. Hoy, tres años más tarde, estamos comenzando un proceso evaluativo y progresivo de mover estas VMs a una solución co-gestionada en VMWare.
  8. En los backends tenemos todos los gestores de contenido, los CMS. El código está hecho en Zend Framework (requerimiento del cliente) y se ejecuta en una arquitectura LAMP clássica. También tenemos las bases de datos, todas MySQL, aunque para algunos proyectos también tenemos MongoDB. Las bases no tienen redundancia pero si están replicadas –topología master-slave– que podemos usar en caso de que ocurra algún problema. Los Feeds son una parte importante de la plataforma pero que pasa desapercibida. Son usados por terceras partes, aplicaciones móviles, integradores de contenidos, etc. Desde los backends también ejecutamos scripts de mantenimiento, se realizan procesos de reducción de datos, integración con servicios externos, procesado de videos, etc.
  9. Contamos con muchos assets, varios TeraBytes de imágenes que deben ser gestionados, y para eso contamos con un servidor dedicado. Utilizamos Nginx para el servicio web por su alta eficiencia para entregar contenido estático, como es el caso. Además contamos con una instancia de PHP para recortar imágenes a demanda, tamaños que no estén previstos en el CMS pero que quizá lo requieran otras aplicaciones externas. El “storage” de media se encuentra montado en cada Backend via NFS, así desde el CMS se puede subir assets al servidor sin mayor inconveniente. Por el contrario, cuando necesitamos subir imagenes desde los frontends, por ejemplo avatares o imagenes de concursos, desde la aplicacion hacemos un “upload” interno, que es recibido por un PHP que valida el payload. Esto lo hacemos para no tener el servidor montado en cada frontend, las principales razones son: seguridad y practicidad. En varios casos, por delante de este servidor hay un servicio de CDN transparente, para optimizar los tiempos de descarga desde los usuarios. Este servidor se accede desde un punto de entrada distinto al balanceador.
  10. El balanceador de carga en primera línea, que envía todo el tráfico a los varnish. En los backends tenemos las correspondientes bases de datos, CMSs y motores de búsqueda, además de ser desde donde se realizan tareas de mantenimiento. Un servidor de Media donde están los assets “grandes”. Este servidor se accede por fuera del balanceador de carga, en algunos casos por via de CDN. Esto probó ser útil para no saturar el tráfico del balanceador de carga (anécdota The Walking Dead). *** Sistema Operativo Ubuntu Web Server Apache para manejadores de contenido Nginx (PHP-FPM) para frontends PHP lo más actualizado posible Base de datos MySQL MongoDB
  11. Tenemos un servidor dedicado a entornos de pruebas y demostraciones, donde el cliente puede entrar y validar el desarrollo, revisarlo, cambiarlo, y finalmente aprobarlo antes de subirlo a producción. Esto es un punto vital y clave. A su vez, muchas veces necesitamos un ambiente extra, ya sea por un desarrollo en paralelo (en otra rama) o excluyente con otro. En estos casos resolvemos de forma muy simple, creamos un entorno nuevo (macros de Apache). Ahora bien, toda esta colaboración y trabajo en equipo descentralizado lo podemos hacer gracias a que trabajamos bajo control de versiones, en nuestro caso usamos Git via GitHub.
  12. Anécdota que se pisaron los deploys!! En el entorno web los cambios son algo de todos los días, y cuando somos varios trabajando es facil perder el control de lo que está en producción. Para tener orden es que realizamos peticiones de deployment. Indicando que aplicación queremos publicar y el motivo del mismo. A su vez, las tandas de deployment se realizan una vez al día de lunes a jueves. ¿Por qué no los viernes? Simple, porque el sábado y domingo no hay soporte por si el cliente quiere cambiar algo deployado el viernes. Para repartir las responsabilidades del deployment es que tenemos el rol del Deploy Master, es un miembro del equipo que se responsabiliza de los deployments durante toda la semana, este rol rota entre todo el equipo. Estas aplicaciones requieren tareas especiales en el deployment más allá de copiar el código. Hay que crear enlaces simbólicos, limpiar y generar caches, habilitar configuraciones, etc. Para esto, usamos la herramienta Magallanes que nos permite realizar estas tareas y crear propias, sin salirnos de PHP.
  13. La performance es uno de los puntos clave y con que más cuidado debemos tener A nivel de código de PHP y de framework son varios los puntos a mejorar de performance, pero no los únicos El cache es nuestra primera defensa. Varnish permite cachear de forma independiente assets (media, js, css, etc), HTML, o incluso fragmentos de HTML. No solo cacheamos la “web”. Sino también todo lo que usa la aplicacion. Como ser configuraciones, traducciones, resolución de redirecciones, fragmentos de HTML. Casi todo está en memcache. Así como Varnish cachea la parte de “afuera” de la web; hemos desarrollado un componente llamado FragmentCache que nos permite cachear renders (subrequests) de Symfony. Esto ha probado ser muy útil, particularmente en sitios con muchos modulos. Experiencia de Usuario
  14. El cliente requiere que en algunos sitios haya protección via SSL Tenemos sola una IP de acceso, por lo cual presenta un problema para definir los certificados A su vez Varnish no implementa SSL Utilizamos en los mismos servidores de Varnish el servicio Pound, que actúa como un proxy reverso… Al cual le podemos definir todos los certificados SSL y cuando llega un request HTTPs intenta desencriptarlo probando con todos los certificados hasta dar con el correcto… Y saber hacia donde redirigir el request. Es una solución que funciona, a expensa de recursos ya que debe probar varios certificados antes de dar con el correcto.
  15. En todos los sitios la búsqueda es una funcionalidad imprescindible Debemos hacerla eficiente, ya que se buscan varios modelos de datos (artículos, videos, biografías) Contemplar que tenemos más de 30 idiomas en lenguas muy extrañas, o al menos dispares entre sí Con Sphinx pudimos abarcar todas los requerimientos, sin perder performance. Nos permite buscar sobre diversos tipos de datos y aplicar reglas de orden Se integra muy bien con PHP
  16. Tener una política de backups es muy importante. ¡No hace falta justificar por qué! El código de los proyectos lo versionamos en Git, via GitHub. Eso ya es un respaldo en sí mismo. Las bases de datos están replicadas y además se realizan dumps de las bases de producción a cada hora. También se realizan dumps diarios y mensuales de todas las bases de datos de la infraestructura (incluyendo las de producción). Los assets (imágenes) se respaldan en un servidor aparte. Existe código no versionado, de aplicaciones del cliente no gestionadas por nosotros, que se respaldan de forma diaria con rdiff-backup. Hemos verificado satisfactoriamente el recuperar información desde todos estos backups.
  17. El mejor problema es aquél que pudimos prevenir. Por ello hacemos aplicamos testing unitario y funcional Además realizamos integración continua que verifica que las funcionalidades más críticas no se rompan En cada push se lanzan tests y en caso de que alguno falle nos llega una notificación Esto es sumamente útil en los Feeds, que no son fáciles de verificar Pero si lo anterior falla, tenemos un monitoreo permanente en la plataforma. Utilizamos Pingdom, Nagios, OSSEC y scripts propios que nos alertan de si un servicio está dando problemas Además contamos con Cacti para tener el histórico del rendimiento de los servidores Por último, le ofrecemos al cliente un servicio de Guardia 24x7, por si ocurre un problema grave. Pero “grave” con G mayúscula.
  18. De aquella infraestructura de 8 servidores, algunas aplicaciones legacy y una aplicación symfony en desarrollo… Es que llegamos hoy a 13 servidores físicos con más de 24 máquinas virtuales… Que hostean 7 aplicaciones symfony2, no contamos las legacy Que se reparten en más de 120 sitios y más de 10 feeds para aplicaciones móviles e integradores Servimos en promedio más de 7 millones de visitas únicas por mes Que ejecutan alrededor de 500.000 líneas de código PHP escritas en Acilia Las perspectivas son de crecimiento y de desafíos aún más interesantes
  19. La virtualización nos ha rendido muy bien Actualmente estamos pasando a VMWare para simplificar la gestión y crecer en ese aspecto. Lo primero y más importante que nos ha dejado la experiencia… Es una enorme satisfacción, de realización, superación y objetivos y metas logradas Mantener todo actualizado ha resultado una buena práctica a mediano plazo Desde servidores y servicios, hasta las versiones de PHP y Symfony. ¡Incluyendo a nosotros mismos! Además, estamos desarrollando en componentes, para reutilizar en nuestros proyectos. De esta forma logramos desarrollar más rápido y mejor. El concepto de base es pensar en una solución para el problema abstracto y no para el problema del proyecto.