SlideShare una empresa de Scribd logo
1 de 159
Descargar para leer sin conexión
Symfony @ OpenSky
Pablo Godel
DeSymfony 2017 - Castellón, Spain
Symfony @ OpenSky
¿Qué es OpenSky?
Symfony @ OpenSky
• Varios negocios corriendo Symfony:
opensky.com, dotandbo.com,
55mulberry.com
¿Qué es OpenSky?
Symfony @ OpenSky
• Varios negocios corriendo Symfony:
opensky.com, dotandbo.com,
55mulberry.com
• ~100 empleados
¿Qué es OpenSky?
Symfony @ OpenSky
• Varios negocios corriendo Symfony:
opensky.com, dotandbo.com,
55mulberry.com
• ~100 empleados
• Oficinas alrededor del mundo: New York,
Portland, Nashville, Miami, Chico,
Bucharest and Los Angeles
¿Qué es OpenSky?
Symfony @ OpenSky
HISTORIA
Symfony @ OpenSky
• Usuario temprano de Symfony2 en 2010
(anterior a 2.0 estable)
Historia
Symfony @ OpenSky
• Usuario temprano de Symfony2 en 2010
(anterior a 2.0 estable)
• Migración de Magento -> symfony1 ->
Symfony2
Historia
Symfony @ OpenSky
• Usuario temprano de Symfony2 en 2010
(anterior a 2.0 estable)
• Migración de Magento -> symfony1 ->
Symfony2
• Partes del carrito de Magento usados
durante el proceso de migración hasta ser
reemplazado completamente
Historia
Symfony @ OpenSky
Symfony @ OpenSky
Symfony @ OpenSky
PLATAFORMA ACTUAL
Symfony @ OpenSky
• Symfony 2.8
• RequireJS + Backbone
• PHP 7.0.12
• MySQL 5.6 + MongoDB 3.2
• Redis
• Varnish + Nginx
• VMWare
• Amazon AWS
Plataforma Actual
Symfony @ OpenSky
Plataforma Actual
Symfony @ OpenSky
X Redis
Plataforma Actual
Symfony @ OpenSky
FLUJO DE TRABAJO
Symfony @ OpenSky
Symfony at OpenSky
GitHub Enterprise
GitHub Enterprise
Flujo de Trabajo
Symfony @ OpenSky
• Rama production (master)
Flujo de Trabajo
Symfony @ OpenSky
• Rama production (master)
• Ramas feature / fix
Flujo de Trabajo
Symfony @ OpenSky
• Rama production (master)
• Ramas feature / fix
• Pull Requests relacionados con JIRA
Flujo de Trabajo
Symfony @ OpenSky
• Rama production (master)
• Ramas feature / fix
• Pull Requests relacionados con JIRA
• Integración con Jenkins para Tests
unitarios y funcionales
Flujo de Trabajo
Symfony @ OpenSky
• Rama production (master)
• Ramas feature / fix
• Pull Requests relacionados con JIRA
• Integración con Jenkins para Tests
unitarios y funcionales
• Hooks Pre-commit para php-cs-fixer,
gulp-jshint, gulp-sass-lint
Flujo de Trabajo
Symfony @ OpenSky
• Symfony Coding Standards
Flujo de Trabajo
Symfony @ OpenSky
• Symfony Coding Standards
• Short Array Syntax
Flujo de Trabajo
Symfony @ OpenSky
• Symfony Coding Standards
• Short Array Syntax
• Declaraciones de Use ordenados
Flujo de Trabajo
Symfony @ OpenSky
• Symfony Coding Standards
• Short Array Syntax
• Declaraciones de Use ordenados
• Asegurar un EOF al final del archivo
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
• ‘NamespaceClassName’
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
• ‘NamespaceClassName’
• Incluidos en los forms
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
• ‘NamespaceClassName’
• Incluidos en los forms
• $builder->add('name', TextType::class);
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
• ‘NamespaceClassName’
• Incluidos en los forms
• $builder->add('name', TextType::class);
• Siempre usar la declaración de ‘use’
Flujo de Trabajo
Symfony @ OpenSky
• PHP7 Type-Hints lo más posible
• DocBlocks sólo cuando agrega valor/claridad
• ClassName::class
• ‘NamespaceClassName’
• Incluidos en los forms
• $builder->add('name', TextType::class);
• Siempre usar la declaración de ‘use’
• $time = new DateTime()
Flujo de Trabajo
Symfony @ OpenSky
Antes del deployment de producción:
Flujo de Trabajo
Symfony @ OpenSky
Antes del deployment de producción:
• Peer Reviews
Flujo de Trabajo
Symfony @ OpenSky
Antes del deployment de producción:
• Peer Reviews
• 100% test pass (unit & funcional)
Flujo de Trabajo
Symfony @ OpenSky
Antes del deployment de producción:
• Peer Reviews
• 100% test pass (unit & funcional)
• Deploy y Testing de Integración
Flujo de Trabajo
Symfony @ OpenSky
Antes del deployment de producción:
• Peer Reviews
• 100% test pass (unit & funcional)
• Deploy y Testing de Integración
• UA / QA pass (registrado en JIRA)
Flujo de Trabajo
Symfony @ OpenSky
BUNDLES de SYMFONY
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
• APIBundle
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
• APIBundle
• Bundles de terceros
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
• APIBundle
• Bundles de terceros
• AvalancheImagineBundle
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
• APIBundle
• Bundles de terceros
• AvalancheImagineBundle
• FOSUserBundle
Bundles de Symfony
Symfony @ OpenSky
• Separar en bundles generales. No abusar.
• MainBundle
• AdminBundle (500+ rutas, 300 servicios
extra en el container)
• APIBundle
• Bundles de terceros
• AvalancheImagineBundle
• FOSUserBundle
• Alerta! Usar bundles de terceros puede
afectar el mantenimiento a largo plazo
Bundles de Symfony
Symfony @ OpenSky
SYMFONY APPS
Symfony @ OpenSky
• 3 Apps
Symfony Apps
Symfony @ OpenSky
• 3 Apps
• opensky
• admin
• api
Symfony Apps
Symfony @ OpenSky
• 3 Apps
• opensky
• admin
• api
• Acotar rutas, servicios, bundles
Symfony Apps
Symfony @ OpenSky
• 3 Apps
• opensky
• admin
• api
• Acotar rutas, servicios, bundles
• opensky -> MainBundle
• admin -> MainBundle, AdminBundle
• api -> MainBundle, ApiBundle
Symfony Apps
Symfony @ OpenSky
DOCTRINE
Symfony @ OpenSky
• MongoDB y MySQL juntos
Doctrine
Symfony @ OpenSky
• MongoDB y MySQL juntos
• Referencias entre MongoDB y MySQL
Doctrine
Symfony @ OpenSky
• MongoDB y MySQL juntos
• Referencias entre MongoDB y MySQL
• Usar Doctrine ORM & MongoDB ODM para los
modelos de datos entre los dos sistemas,
transparente al core
Doctrine
Symfony @ OpenSky
• MongoDB y MySQL juntos
• Referencias entre MongoDB y MySQL
• Usar Doctrine ORM & MongoDB ODM para los
modelos de datos entre los dos sistemas,
transparente al core
• Nunca borrar datos para evitar problemas de
integridad referencial. Usar soft delete
(deletedAt)
Doctrine
Symfony @ OpenSky
• MongoDB y MySQL juntos
• Referencias entre MongoDB y MySQL
• Usar Doctrine ORM & MongoDB ODM para los
modelos de datos entre los dos sistemas,
transparente al core
• Nunca borrar datos para evitar problemas de
integridad referencial. Usar soft delete
(deletedAt)
• Traits para funcionalidad común como
createdAt/updatedAt
Doctrine
Symfony @ OpenSky
Symfony @ OpenSky
Symfony @ OpenSky
Algunas consideraciones:
Migraciones con Doctrine
Symfony @ OpenSky
• ¿Cuánto dura ejecutarlas?
Migraciones con Doctrine
Symfony @ OpenSky
• ¿Cuánto dura ejecutarlas?
• ¿Es compatible hacia atrás?
Migraciones con Doctrine
Symfony @ OpenSky
• ¿Cuánto dura ejecutarlas?
• ¿Es compatible hacia atrás?
• Up & Down
Migraciones con Doctrine
Symfony @ OpenSky
• ¿Cuánto dura ejecutarlas?
• ¿Es compatible hacia atrás?
• Up & Down
• schema.sql / data.sql
actualizados
Migraciones con Doctrine
Symfony @ OpenSky
• ¿Cuánto dura ejecutarlas?
• ¿Es compatible hacia atrás?
• Up & Down
• schema.sql / data.sql
actualizados
• Agregar indexes
Migraciones con Doctrine
Symfony @ OpenSky
+SYMFONY
Symfony @ OpenSky
• Livianos
Controladores
Symfony @ OpenSky
• Livianos
• Excluir lógica de negocios
Controladores
Symfony @ OpenSky
• Livianos
• Excluir lógica de negocios
• Sólo flujo de control
Controladores
Symfony @ OpenSky
• Livianos
• Excluir lógica de negocios
• Sólo flujo de control
• Extender de un BaseController
Controladores
Symfony @ OpenSky
• Dos niveles de autenticación implementado con role
voters
Seguridad
Symfony @ OpenSky
• Dos niveles de autenticación implementado con role
voters
• PartiallyAuthenticatedVoter
• AuthenticatedRecentlyVoter
Seguridad
Symfony @ OpenSky
• Dos niveles de autenticación implementado con role
voters
• PartiallyAuthenticatedVoter
• AuthenticatedRecentlyVoter
• Cuando un usuario es autenticado recientemente
entra en el segundo nivel y tienen acceso a cuenta,
checkout, etc. Luego de 15 minutos de inactividad es
sacado del segundo nivel
Seguridad
Symfony @ OpenSky
• Dos niveles de autenticación implementado con role
voters
• PartiallyAuthenticatedVoter
• AuthenticatedRecentlyVoter
• Cuando un usuario es autenticado recientemente
entra en el segundo nivel y tienen acceso a cuenta,
checkout, etc. Luego de 15 minutos de inactividad es
sacado del segundo nivel
• Admin integrado con LDAP (con zendframework/
zend-ldap)
Seguridad
Symfony @ OpenSky
• Dos niveles de autenticación implementado con role
voters
• PartiallyAuthenticatedVoter
• AuthenticatedRecentlyVoter
• Cuando un usuario es autenticado recientemente
entra en el segundo nivel y tienen acceso a cuenta,
checkout, etc. Luego de 15 minutos de inactividad es
sacado del segundo nivel
• Admin integrado con LDAP (con zendframework/
zend-ldap)
• firewalls/authentication providers distintos para
consumidores, admin y api
Seguridad
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
• Permite cambios de configuración sin
deployment
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
• Permite cambios de configuración sin
deployment
• Parámetros pueden tener fecha de comienzo &
fin
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
• Permite cambios de configuración sin
deployment
• Parámetros pueden tener fecha de comienzo &
fin
• Todos los parámetros presentes en cache
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
• Permite cambios de configuración sin
deployment
• Parámetros pueden tener fecha de comienzo &
fin
• Todos los parámetros presentes en cache
• Con cambio de valor, cache es actualizado y
procesos de cola reiniciados
Symfony @ OpenSky
Runtime Settings/Parameters
• Parámetros definidos en config/parameters.yml
• Cambios guardados en MongoDB
• Permite cambios de configuración sin
deployment
• Parámetros pueden tener fecha de comienzo &
fin
• Todos los parámetros presentes en cache
• Con cambio de valor, cache es actualizado y
procesos de cola reiniciados
• Muy usado para activar/desactivar nueva/vieja
funcionalidad
Symfony @ OpenSky
Runtime Settings/Parameters
Symfony @ OpenSky
Runtime Settings/Parameters
Symfony @ OpenSky
Runtime Settings/Parameters
Dev/Testing: production.flag = false
Production: production.flag = true
Symfony @ OpenSky
EVENTOS
Symfony @ OpenSky
• Realizar tareas luego de enviar la respuesta al
cliente
Evento kernel.terminate
Symfony @ OpenSky
• Realizar tareas luego de enviar la respuesta al
cliente
• Guardar Request Log en MongoDB
Evento kernel.terminate
Symfony @ OpenSky
• Realizar tareas luego de enviar la respuesta al
cliente
• Guardar Request Log en MongoDB
• Analizar petición para acciones adicionales
Evento kernel.terminate
Symfony @ OpenSky
• Realizar tareas luego de enviar la respuesta al
cliente
• Guardar Request Log en MongoDB
• Analizar petición para acciones adicionales
• Sólo efectivo con FastCGI
Evento kernel.terminate
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
Sistema de Eventos
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
• Serializador/Deserializador de eventos
Sistema de Eventos
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
• Serializador/Deserializador de eventos
• Eventos programados a futuro
Sistema de Eventos
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
• Serializador/Deserializador de eventos
• Eventos programados a futuro
• Multiples intentos
Sistema de Eventos
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
• Serializador/Deserializador de eventos
• Eventos programados a futuro
• Multiples intentos
• Una cola por collection de mongodb
Sistema de Eventos
Symfony @ OpenSky
• Encolar eventos para funcionalidad
asíncrona
• Serializador/Deserializador de eventos
• Eventos programados a futuro
• Multiples intentos
• Una cola por collection de mongodb
• Consumidores de cola manejados con
Supervisord
Sistema de Eventos
Symfony @ OpenSky
Sistema de Eventos
Symfony @ OpenSky
Sistema de Eventos
Symfony @ OpenSky
Sistema de Eventos
Symfony @ OpenSky
Sistema de Eventos
Symfony @ OpenSky
Sistema de Eventos
Symfony @ OpenSky
SLACK
Symfony @ OpenSky
• php-kip usando yabot
Integración con Slack
Symfony @ OpenSky
• php-kip usando yabot
• Manejo de línea de deploy de
producción
Integración con Slack
Symfony @ OpenSky
• php-kip usando yabot
• Manejo de línea de deploy de
producción
• Reservaciones y deploys de entornos
de integración
Integración con Slack
Symfony @ OpenSky
• php-kip usando yabot
• Manejo de línea de deploy de
producción
• Reservaciones y deploys de entornos
de integración
• Notificaciones desde Symfony
Integración con Slack
Symfony @ OpenSky
Symfony at OpenSky
Php-kip using yubot
- Production deploy queue/line
- Dev environment deploys
Integración con Slack
Symfony @ OpenSky
Symfony at OpenSky
Php-kip using yubot
- Production deploy queue/line
- Dev environment deploys
Integración con Slack
Symfony @ OpenSky
Symfony at OpenSky
Php-kip using yubot
- Production deploy queue/line
- Dev environment deploys
Integración con Slack
Symfony @ OpenSky
Integración con Slack
Symfony @ OpenSky
Integración con Slack
Symfony @ OpenSky
Integración con Slack
Symfony @ OpenSky
SEARCH
Symfony @ OpenSky
Search
• Integración con Algolia
Symfony @ OpenSky
Search
• Integración con Algolia
• algolia/algoliasearch-client-php
Symfony @ OpenSky
Search
• Integración con Algolia
• algolia/algoliasearch-client-php
• Actualización de index con Event Listeners
Symfony @ OpenSky
Pagos
• Integración con Braintree Payments
• braintree/braintree_php
Symfony @ OpenSky
• NPM
• jQuery
• RequireJS
• Backbone
• TwigJS
• Gulp / Less / Sass
El Frontend
Symfony @ OpenSky
TESTING
Symfony @ OpenSky
• pr-nightmare
Testing
Symfony @ OpenSky
• pr-nightmare
• Corre en todos los commits y pull requests
Testing
Symfony @ OpenSky
• pr-nightmare
• Corre en todos los commits y pull requests
• Usa PHPChunkit para ejecutar 30 minutos de
tests en 3 minutos corriendo grupos de tests
en paralelo distribuidos en varios servidores

https://github.com/jwage/phpchunkit
Testing
Symfony @ OpenSky
Testing
Symfony @ OpenSky
• Anotación ‘@app admin’ para indicar que app/
kernel usar en el web test case
Testing con PHPUnit
Symfony @ OpenSky
• Anotación ‘@app admin’ para indicar que app/
kernel usar en el web test case
• AutoDataCleanupListener automáticamente
monitorea las colecciones y tablas donde
insertamos datos para luego limpiarlas
Testing con PHPUnit
Symfony @ OpenSky
• Anotación ‘@app admin’ para indicar que app/
kernel usar en el web test case
• AutoDataCleanupListener automáticamente
monitorea las colecciones y tablas donde
insertamos datos para luego limpiarlas
• AbstractTwigLintTest: Twig linting. Carga y
chequea todos los archivos Twig para errores de
sintaxis
Testing con PHPUnit
Symfony @ OpenSky
• Anotación ‘@app admin’ para indicar que app/
kernel usar en el web test case
• AutoDataCleanupListener automáticamente
monitorea las colecciones y tablas donde
insertamos datos para luego limpiarlas
• AbstractTwigLintTest: Twig linting. Carga y
chequea todos los archivos Twig para errores de
sintaxis
• Comando para generar archivos de definición de
tests basado en las clases PHP
Testing con PHPUnit
Symfony @ OpenSky
• Anotación ‘@app admin’ para indicar que app/
kernel usar en el web test case
• AutoDataCleanupListener automáticamente
monitorea las colecciones y tablas donde
insertamos datos para luego limpiarlas
• AbstractTwigLintTest: Twig linting. Carga y
chequea todos los archivos Twig para errores de
sintaxis
• Comando para generar archivos de definición de
tests basado en las clases PHP
• Comando para PHPUnit watch
Testing con PHPUnit
Symfony @ OpenSky
Testing con PHPUnit
Symfony @ OpenSky
• Correr con PHP 7
Testing con PHPUnit
Symfony @ OpenSky
• Correr con PHP 7
• Deshabilitar XDebug
Testing con PHPUnit
Symfony @ OpenSky
• Correr con PHP 7
• Deshabilitar XDebug
• Crear Mocks
Testing con PHPUnit
Symfony @ OpenSky
PHPUnit watch
Symfony @ OpenSky
PHPUnit watch
Symfony @ OpenSky
PHPUnit watch
Symfony @ OpenSky
PHPUnit watch
Symfony @ OpenSky
Twig Lint con PHPUnit
Symfony @ OpenSky
Twig Lint con PHPUnit
Symfony @ OpenSky
Twig Lint con PHPUnit
Symfony @ OpenSky
DEPLOYMENT
Symfony @ OpenSky
Deployment
• Fabric extendido
Symfony @ OpenSky
Deployment
• Fabric extendido
• Iniciado manualmente desde Jenkins
Symfony @ OpenSky
Deployment
• Fabric extendido
• Iniciado manualmente desde Jenkins
• Primera tarea de build
Symfony @ OpenSky
Deployment
• Fabric extendido
• Iniciado manualmente desde Jenkins
• Primera tarea de build
• Merge rama feature/fix a master
• Crea Tag
Symfony @ OpenSky
Deployment
• Fabric extendido
• Iniciado manualmente desde Jenkins
• Primera tarea de build
• Merge rama feature/fix a master
• Crea Tag
• Segunda tarea de build
Symfony @ OpenSky
Deployment
• Fabric extendido
• Iniciado manualmente desde Jenkins
• Primera tarea de build
• Merge rama feature/fix a master
• Crea Tag
• Segunda tarea de build
• git checkout
• composer install --no-dev —no-scripts
• Genera front controller
• Corre gulp, requires, less, sass
• Warmup cache para cada app
• Assetic dump
• Crea archivo de artifacts & distribuye a los servidores
• Corre migraciones de MySQL & MongoDB
• Rota logs
• Reinicia php-fpm
• Recarga Varnish and nginx
• Reinicia queue workers
Symfony @ OpenSky
¿Qué sigue?
Symfony @ OpenSky
¿Qué sigue?
• Actualizar a Symfony 3
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
¿Qué sigue?
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
• Actualizar el frontend utilizando un stack más
moderno
¿Qué sigue?
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
• Actualizar el frontend utilizando un stack más
moderno
• Retirar Assetic
¿Qué sigue?
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
• Actualizar el frontend utilizando un stack más
moderno
• Retirar Assetic
• Incrementar los tests funcionales
¿Qué sigue?
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
• Actualizar el frontend utilizando un stack más
moderno
• Retirar Assetic
• Incrementar los tests funcionales
• Usar RabbitMQ
¿Qué sigue?
Symfony @ OpenSky
• Actualizar a Symfony 3
• Crear aplicaciones adicionales para mejorar
rendimiento de areas específicas
• Actualizar el frontend utilizando un stack más
moderno
• Retirar Assetic
• Incrementar los tests funcionales
• Usar RabbitMQ
• Muchas cosas más
¿Qué sigue?
Symfony @ OpenSky
¿Preguntas?
Symfony @ OpenSky
¡Muchas gracias!
@pgodel
http://slideshare.net/pgodel

Más contenido relacionado

Similar a DeSymfony 2017 - Symfony en OpenSky

BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
Asier Marqués
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzada
César Suárez Ortega
 

Similar a DeSymfony 2017 - Symfony en OpenSky (20)

Adentrándonos al Framework Symfony
Adentrándonos al  Framework SymfonyAdentrándonos al  Framework Symfony
Adentrándonos al Framework Symfony
 
Symfony dagrinchi
Symfony dagrinchiSymfony dagrinchi
Symfony dagrinchi
 
Frontal avanzado y assetic
Frontal avanzado y asseticFrontal avanzado y assetic
Frontal avanzado y assetic
 
Frontal Avanzado y Assetic
Frontal Avanzado y AsseticFrontal Avanzado y Assetic
Frontal Avanzado y Assetic
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
 
Symfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony FrameworkSymfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony Framework
 
Symfony Parte 3
Symfony Parte 3Symfony Parte 3
Symfony Parte 3
 
RabbitMQ y Symfony
RabbitMQ y SymfonyRabbitMQ y Symfony
RabbitMQ y Symfony
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzada
 
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
 
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasSymfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlas
 
Symfony
SymfonySymfony
Symfony
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Introduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWARIntroduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWAR
 
Symfony: construyendo aplicaciones web
Symfony: construyendo aplicaciones webSymfony: construyendo aplicaciones web
Symfony: construyendo aplicaciones web
 
Backbeam
BackbeamBackbeam
Backbeam
 
Symfony 1 y 2
Symfony 1 y 2Symfony 1 y 2
Symfony 1 y 2
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
 

Más de Pablo Godel

Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2
Pablo Godel
 

Más de Pablo Godel (20)

SymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSkySymfonyCon Cluj 2017 - Symfony at OpenSky
SymfonyCon Cluj 2017 - Symfony at OpenSky
 
Symfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSkySymfony Live San Francisco 2017 - Symfony @ OpenSky
Symfony Live San Francisco 2017 - Symfony @ OpenSky
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 -  Rock Solid Deployment of Symfony AppsSymfony Live NYC 2014 -  Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
 
The Modern Developer Toolbox
The Modern Developer ToolboxThe Modern Developer Toolbox
The Modern Developer Toolbox
 
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
 
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP appsphp[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
 
Lone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP DevelopersLone Star PHP 2013 - Sysadmin Skills for PHP Developers
Lone Star PHP 2013 - Sysadmin Skills for PHP Developers
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
 
Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2Creating Mobile Apps With PHP & Symfony2
Creating Mobile Apps With PHP & Symfony2
 
Tek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and SymfonyTek13 - Creating Mobile Apps with PHP and Symfony
Tek13 - Creating Mobile Apps with PHP and Symfony
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
 
Soflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developersSoflophp 2013 - SysAdmin skills for PHP developers
Soflophp 2013 - SysAdmin skills for PHP developers
 
Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013   Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Codeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP AppsCodeworks'12 Rock Solid Deployment of PHP Apps
Codeworks'12 Rock Solid Deployment of PHP Apps
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (11)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

DeSymfony 2017 - Symfony en OpenSky

  • 1. Symfony @ OpenSky Pablo Godel DeSymfony 2017 - Castellón, Spain
  • 2.
  • 4. Symfony @ OpenSky • Varios negocios corriendo Symfony: opensky.com, dotandbo.com, 55mulberry.com ¿Qué es OpenSky?
  • 5. Symfony @ OpenSky • Varios negocios corriendo Symfony: opensky.com, dotandbo.com, 55mulberry.com • ~100 empleados ¿Qué es OpenSky?
  • 6. Symfony @ OpenSky • Varios negocios corriendo Symfony: opensky.com, dotandbo.com, 55mulberry.com • ~100 empleados • Oficinas alrededor del mundo: New York, Portland, Nashville, Miami, Chico, Bucharest and Los Angeles ¿Qué es OpenSky?
  • 8. Symfony @ OpenSky • Usuario temprano de Symfony2 en 2010 (anterior a 2.0 estable) Historia
  • 9. Symfony @ OpenSky • Usuario temprano de Symfony2 en 2010 (anterior a 2.0 estable) • Migración de Magento -> symfony1 -> Symfony2 Historia
  • 10. Symfony @ OpenSky • Usuario temprano de Symfony2 en 2010 (anterior a 2.0 estable) • Migración de Magento -> symfony1 -> Symfony2 • Partes del carrito de Magento usados durante el proceso de migración hasta ser reemplazado completamente Historia
  • 14. Symfony @ OpenSky • Symfony 2.8 • RequireJS + Backbone • PHP 7.0.12 • MySQL 5.6 + MongoDB 3.2 • Redis • Varnish + Nginx • VMWare • Amazon AWS Plataforma Actual
  • 16. Symfony @ OpenSky X Redis Plataforma Actual
  • 18. Symfony @ OpenSky Symfony at OpenSky GitHub Enterprise GitHub Enterprise Flujo de Trabajo
  • 19. Symfony @ OpenSky • Rama production (master) Flujo de Trabajo
  • 20. Symfony @ OpenSky • Rama production (master) • Ramas feature / fix Flujo de Trabajo
  • 21. Symfony @ OpenSky • Rama production (master) • Ramas feature / fix • Pull Requests relacionados con JIRA Flujo de Trabajo
  • 22. Symfony @ OpenSky • Rama production (master) • Ramas feature / fix • Pull Requests relacionados con JIRA • Integración con Jenkins para Tests unitarios y funcionales Flujo de Trabajo
  • 23. Symfony @ OpenSky • Rama production (master) • Ramas feature / fix • Pull Requests relacionados con JIRA • Integración con Jenkins para Tests unitarios y funcionales • Hooks Pre-commit para php-cs-fixer, gulp-jshint, gulp-sass-lint Flujo de Trabajo
  • 24. Symfony @ OpenSky • Symfony Coding Standards Flujo de Trabajo
  • 25. Symfony @ OpenSky • Symfony Coding Standards • Short Array Syntax Flujo de Trabajo
  • 26. Symfony @ OpenSky • Symfony Coding Standards • Short Array Syntax • Declaraciones de Use ordenados Flujo de Trabajo
  • 27. Symfony @ OpenSky • Symfony Coding Standards • Short Array Syntax • Declaraciones de Use ordenados • Asegurar un EOF al final del archivo Flujo de Trabajo
  • 28. Symfony @ OpenSky • PHP7 Type-Hints lo más posible Flujo de Trabajo
  • 29. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad Flujo de Trabajo
  • 30. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class Flujo de Trabajo
  • 31. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class • ‘NamespaceClassName’ Flujo de Trabajo
  • 32. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class • ‘NamespaceClassName’ • Incluidos en los forms Flujo de Trabajo
  • 33. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class • ‘NamespaceClassName’ • Incluidos en los forms • $builder->add('name', TextType::class); Flujo de Trabajo
  • 34. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class • ‘NamespaceClassName’ • Incluidos en los forms • $builder->add('name', TextType::class); • Siempre usar la declaración de ‘use’ Flujo de Trabajo
  • 35. Symfony @ OpenSky • PHP7 Type-Hints lo más posible • DocBlocks sólo cuando agrega valor/claridad • ClassName::class • ‘NamespaceClassName’ • Incluidos en los forms • $builder->add('name', TextType::class); • Siempre usar la declaración de ‘use’ • $time = new DateTime() Flujo de Trabajo
  • 36. Symfony @ OpenSky Antes del deployment de producción: Flujo de Trabajo
  • 37. Symfony @ OpenSky Antes del deployment de producción: • Peer Reviews Flujo de Trabajo
  • 38. Symfony @ OpenSky Antes del deployment de producción: • Peer Reviews • 100% test pass (unit & funcional) Flujo de Trabajo
  • 39. Symfony @ OpenSky Antes del deployment de producción: • Peer Reviews • 100% test pass (unit & funcional) • Deploy y Testing de Integración Flujo de Trabajo
  • 40. Symfony @ OpenSky Antes del deployment de producción: • Peer Reviews • 100% test pass (unit & funcional) • Deploy y Testing de Integración • UA / QA pass (registrado en JIRA) Flujo de Trabajo
  • 42. Symfony @ OpenSky • Separar en bundles generales. No abusar. Bundles de Symfony
  • 43. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle Bundles de Symfony
  • 44. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) Bundles de Symfony
  • 45. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) • APIBundle Bundles de Symfony
  • 46. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) • APIBundle • Bundles de terceros Bundles de Symfony
  • 47. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) • APIBundle • Bundles de terceros • AvalancheImagineBundle Bundles de Symfony
  • 48. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) • APIBundle • Bundles de terceros • AvalancheImagineBundle • FOSUserBundle Bundles de Symfony
  • 49. Symfony @ OpenSky • Separar en bundles generales. No abusar. • MainBundle • AdminBundle (500+ rutas, 300 servicios extra en el container) • APIBundle • Bundles de terceros • AvalancheImagineBundle • FOSUserBundle • Alerta! Usar bundles de terceros puede afectar el mantenimiento a largo plazo Bundles de Symfony
  • 51. Symfony @ OpenSky • 3 Apps Symfony Apps
  • 52. Symfony @ OpenSky • 3 Apps • opensky • admin • api Symfony Apps
  • 53. Symfony @ OpenSky • 3 Apps • opensky • admin • api • Acotar rutas, servicios, bundles Symfony Apps
  • 54. Symfony @ OpenSky • 3 Apps • opensky • admin • api • Acotar rutas, servicios, bundles • opensky -> MainBundle • admin -> MainBundle, AdminBundle • api -> MainBundle, ApiBundle Symfony Apps
  • 56. Symfony @ OpenSky • MongoDB y MySQL juntos Doctrine
  • 57. Symfony @ OpenSky • MongoDB y MySQL juntos • Referencias entre MongoDB y MySQL Doctrine
  • 58. Symfony @ OpenSky • MongoDB y MySQL juntos • Referencias entre MongoDB y MySQL • Usar Doctrine ORM & MongoDB ODM para los modelos de datos entre los dos sistemas, transparente al core Doctrine
  • 59. Symfony @ OpenSky • MongoDB y MySQL juntos • Referencias entre MongoDB y MySQL • Usar Doctrine ORM & MongoDB ODM para los modelos de datos entre los dos sistemas, transparente al core • Nunca borrar datos para evitar problemas de integridad referencial. Usar soft delete (deletedAt) Doctrine
  • 60. Symfony @ OpenSky • MongoDB y MySQL juntos • Referencias entre MongoDB y MySQL • Usar Doctrine ORM & MongoDB ODM para los modelos de datos entre los dos sistemas, transparente al core • Nunca borrar datos para evitar problemas de integridad referencial. Usar soft delete (deletedAt) • Traits para funcionalidad común como createdAt/updatedAt Doctrine
  • 63. Symfony @ OpenSky Algunas consideraciones: Migraciones con Doctrine
  • 64. Symfony @ OpenSky • ¿Cuánto dura ejecutarlas? Migraciones con Doctrine
  • 65. Symfony @ OpenSky • ¿Cuánto dura ejecutarlas? • ¿Es compatible hacia atrás? Migraciones con Doctrine
  • 66. Symfony @ OpenSky • ¿Cuánto dura ejecutarlas? • ¿Es compatible hacia atrás? • Up & Down Migraciones con Doctrine
  • 67. Symfony @ OpenSky • ¿Cuánto dura ejecutarlas? • ¿Es compatible hacia atrás? • Up & Down • schema.sql / data.sql actualizados Migraciones con Doctrine
  • 68. Symfony @ OpenSky • ¿Cuánto dura ejecutarlas? • ¿Es compatible hacia atrás? • Up & Down • schema.sql / data.sql actualizados • Agregar indexes Migraciones con Doctrine
  • 70. Symfony @ OpenSky • Livianos Controladores
  • 71. Symfony @ OpenSky • Livianos • Excluir lógica de negocios Controladores
  • 72. Symfony @ OpenSky • Livianos • Excluir lógica de negocios • Sólo flujo de control Controladores
  • 73. Symfony @ OpenSky • Livianos • Excluir lógica de negocios • Sólo flujo de control • Extender de un BaseController Controladores
  • 74. Symfony @ OpenSky • Dos niveles de autenticación implementado con role voters Seguridad
  • 75. Symfony @ OpenSky • Dos niveles de autenticación implementado con role voters • PartiallyAuthenticatedVoter • AuthenticatedRecentlyVoter Seguridad
  • 76. Symfony @ OpenSky • Dos niveles de autenticación implementado con role voters • PartiallyAuthenticatedVoter • AuthenticatedRecentlyVoter • Cuando un usuario es autenticado recientemente entra en el segundo nivel y tienen acceso a cuenta, checkout, etc. Luego de 15 minutos de inactividad es sacado del segundo nivel Seguridad
  • 77. Symfony @ OpenSky • Dos niveles de autenticación implementado con role voters • PartiallyAuthenticatedVoter • AuthenticatedRecentlyVoter • Cuando un usuario es autenticado recientemente entra en el segundo nivel y tienen acceso a cuenta, checkout, etc. Luego de 15 minutos de inactividad es sacado del segundo nivel • Admin integrado con LDAP (con zendframework/ zend-ldap) Seguridad
  • 78. Symfony @ OpenSky • Dos niveles de autenticación implementado con role voters • PartiallyAuthenticatedVoter • AuthenticatedRecentlyVoter • Cuando un usuario es autenticado recientemente entra en el segundo nivel y tienen acceso a cuenta, checkout, etc. Luego de 15 minutos de inactividad es sacado del segundo nivel • Admin integrado con LDAP (con zendframework/ zend-ldap) • firewalls/authentication providers distintos para consumidores, admin y api Seguridad
  • 79. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml
  • 80. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB
  • 81. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB • Permite cambios de configuración sin deployment
  • 82. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB • Permite cambios de configuración sin deployment • Parámetros pueden tener fecha de comienzo & fin
  • 83. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB • Permite cambios de configuración sin deployment • Parámetros pueden tener fecha de comienzo & fin • Todos los parámetros presentes en cache
  • 84. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB • Permite cambios de configuración sin deployment • Parámetros pueden tener fecha de comienzo & fin • Todos los parámetros presentes en cache • Con cambio de valor, cache es actualizado y procesos de cola reiniciados
  • 85. Symfony @ OpenSky Runtime Settings/Parameters • Parámetros definidos en config/parameters.yml • Cambios guardados en MongoDB • Permite cambios de configuración sin deployment • Parámetros pueden tener fecha de comienzo & fin • Todos los parámetros presentes en cache • Con cambio de valor, cache es actualizado y procesos de cola reiniciados • Muy usado para activar/desactivar nueva/vieja funcionalidad
  • 86. Symfony @ OpenSky Runtime Settings/Parameters
  • 87. Symfony @ OpenSky Runtime Settings/Parameters
  • 88. Symfony @ OpenSky Runtime Settings/Parameters Dev/Testing: production.flag = false Production: production.flag = true
  • 90. Symfony @ OpenSky • Realizar tareas luego de enviar la respuesta al cliente Evento kernel.terminate
  • 91. Symfony @ OpenSky • Realizar tareas luego de enviar la respuesta al cliente • Guardar Request Log en MongoDB Evento kernel.terminate
  • 92. Symfony @ OpenSky • Realizar tareas luego de enviar la respuesta al cliente • Guardar Request Log en MongoDB • Analizar petición para acciones adicionales Evento kernel.terminate
  • 93. Symfony @ OpenSky • Realizar tareas luego de enviar la respuesta al cliente • Guardar Request Log en MongoDB • Analizar petición para acciones adicionales • Sólo efectivo con FastCGI Evento kernel.terminate
  • 94. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona Sistema de Eventos
  • 95. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona • Serializador/Deserializador de eventos Sistema de Eventos
  • 96. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona • Serializador/Deserializador de eventos • Eventos programados a futuro Sistema de Eventos
  • 97. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona • Serializador/Deserializador de eventos • Eventos programados a futuro • Multiples intentos Sistema de Eventos
  • 98. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona • Serializador/Deserializador de eventos • Eventos programados a futuro • Multiples intentos • Una cola por collection de mongodb Sistema de Eventos
  • 99. Symfony @ OpenSky • Encolar eventos para funcionalidad asíncrona • Serializador/Deserializador de eventos • Eventos programados a futuro • Multiples intentos • Una cola por collection de mongodb • Consumidores de cola manejados con Supervisord Sistema de Eventos
  • 106. Symfony @ OpenSky • php-kip usando yabot Integración con Slack
  • 107. Symfony @ OpenSky • php-kip usando yabot • Manejo de línea de deploy de producción Integración con Slack
  • 108. Symfony @ OpenSky • php-kip usando yabot • Manejo de línea de deploy de producción • Reservaciones y deploys de entornos de integración Integración con Slack
  • 109. Symfony @ OpenSky • php-kip usando yabot • Manejo de línea de deploy de producción • Reservaciones y deploys de entornos de integración • Notificaciones desde Symfony Integración con Slack
  • 110. Symfony @ OpenSky Symfony at OpenSky Php-kip using yubot - Production deploy queue/line - Dev environment deploys Integración con Slack
  • 111. Symfony @ OpenSky Symfony at OpenSky Php-kip using yubot - Production deploy queue/line - Dev environment deploys Integración con Slack
  • 112. Symfony @ OpenSky Symfony at OpenSky Php-kip using yubot - Production deploy queue/line - Dev environment deploys Integración con Slack
  • 117. Symfony @ OpenSky Search • Integración con Algolia
  • 118. Symfony @ OpenSky Search • Integración con Algolia • algolia/algoliasearch-client-php
  • 119. Symfony @ OpenSky Search • Integración con Algolia • algolia/algoliasearch-client-php • Actualización de index con Event Listeners
  • 120. Symfony @ OpenSky Pagos • Integración con Braintree Payments • braintree/braintree_php
  • 121. Symfony @ OpenSky • NPM • jQuery • RequireJS • Backbone • TwigJS • Gulp / Less / Sass El Frontend
  • 123. Symfony @ OpenSky • pr-nightmare Testing
  • 124. Symfony @ OpenSky • pr-nightmare • Corre en todos los commits y pull requests Testing
  • 125. Symfony @ OpenSky • pr-nightmare • Corre en todos los commits y pull requests • Usa PHPChunkit para ejecutar 30 minutos de tests en 3 minutos corriendo grupos de tests en paralelo distribuidos en varios servidores
 https://github.com/jwage/phpchunkit Testing
  • 127. Symfony @ OpenSky • Anotación ‘@app admin’ para indicar que app/ kernel usar en el web test case Testing con PHPUnit
  • 128. Symfony @ OpenSky • Anotación ‘@app admin’ para indicar que app/ kernel usar en el web test case • AutoDataCleanupListener automáticamente monitorea las colecciones y tablas donde insertamos datos para luego limpiarlas Testing con PHPUnit
  • 129. Symfony @ OpenSky • Anotación ‘@app admin’ para indicar que app/ kernel usar en el web test case • AutoDataCleanupListener automáticamente monitorea las colecciones y tablas donde insertamos datos para luego limpiarlas • AbstractTwigLintTest: Twig linting. Carga y chequea todos los archivos Twig para errores de sintaxis Testing con PHPUnit
  • 130. Symfony @ OpenSky • Anotación ‘@app admin’ para indicar que app/ kernel usar en el web test case • AutoDataCleanupListener automáticamente monitorea las colecciones y tablas donde insertamos datos para luego limpiarlas • AbstractTwigLintTest: Twig linting. Carga y chequea todos los archivos Twig para errores de sintaxis • Comando para generar archivos de definición de tests basado en las clases PHP Testing con PHPUnit
  • 131. Symfony @ OpenSky • Anotación ‘@app admin’ para indicar que app/ kernel usar en el web test case • AutoDataCleanupListener automáticamente monitorea las colecciones y tablas donde insertamos datos para luego limpiarlas • AbstractTwigLintTest: Twig linting. Carga y chequea todos los archivos Twig para errores de sintaxis • Comando para generar archivos de definición de tests basado en las clases PHP • Comando para PHPUnit watch Testing con PHPUnit
  • 133. Symfony @ OpenSky • Correr con PHP 7 Testing con PHPUnit
  • 134. Symfony @ OpenSky • Correr con PHP 7 • Deshabilitar XDebug Testing con PHPUnit
  • 135. Symfony @ OpenSky • Correr con PHP 7 • Deshabilitar XDebug • Crear Mocks Testing con PHPUnit
  • 140. Symfony @ OpenSky Twig Lint con PHPUnit
  • 141. Symfony @ OpenSky Twig Lint con PHPUnit
  • 142. Symfony @ OpenSky Twig Lint con PHPUnit
  • 144. Symfony @ OpenSky Deployment • Fabric extendido
  • 145. Symfony @ OpenSky Deployment • Fabric extendido • Iniciado manualmente desde Jenkins
  • 146. Symfony @ OpenSky Deployment • Fabric extendido • Iniciado manualmente desde Jenkins • Primera tarea de build
  • 147. Symfony @ OpenSky Deployment • Fabric extendido • Iniciado manualmente desde Jenkins • Primera tarea de build • Merge rama feature/fix a master • Crea Tag
  • 148. Symfony @ OpenSky Deployment • Fabric extendido • Iniciado manualmente desde Jenkins • Primera tarea de build • Merge rama feature/fix a master • Crea Tag • Segunda tarea de build
  • 149. Symfony @ OpenSky Deployment • Fabric extendido • Iniciado manualmente desde Jenkins • Primera tarea de build • Merge rama feature/fix a master • Crea Tag • Segunda tarea de build • git checkout • composer install --no-dev —no-scripts • Genera front controller • Corre gulp, requires, less, sass • Warmup cache para cada app • Assetic dump • Crea archivo de artifacts & distribuye a los servidores • Corre migraciones de MySQL & MongoDB • Rota logs • Reinicia php-fpm • Recarga Varnish and nginx • Reinicia queue workers
  • 151. Symfony @ OpenSky ¿Qué sigue? • Actualizar a Symfony 3
  • 152. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas ¿Qué sigue?
  • 153. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas • Actualizar el frontend utilizando un stack más moderno ¿Qué sigue?
  • 154. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas • Actualizar el frontend utilizando un stack más moderno • Retirar Assetic ¿Qué sigue?
  • 155. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas • Actualizar el frontend utilizando un stack más moderno • Retirar Assetic • Incrementar los tests funcionales ¿Qué sigue?
  • 156. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas • Actualizar el frontend utilizando un stack más moderno • Retirar Assetic • Incrementar los tests funcionales • Usar RabbitMQ ¿Qué sigue?
  • 157. Symfony @ OpenSky • Actualizar a Symfony 3 • Crear aplicaciones adicionales para mejorar rendimiento de areas específicas • Actualizar el frontend utilizando un stack más moderno • Retirar Assetic • Incrementar los tests funcionales • Usar RabbitMQ • Muchas cosas más ¿Qué sigue?
  • 159. Symfony @ OpenSky ¡Muchas gracias! @pgodel http://slideshare.net/pgodel