Este documento presenta los conceptos de arquitectura orientada a servicios y cómo se implementan en Symfony2. Explica que la capa de modelo en Symfony2 se compone principalmente de servicios en lugar de clases de modelo, y proporciona ejemplos de cómo crear y configurar servicios, incluida la inyección de dependencias y el uso de etiquetas de servicio. También cubre temas avanzados como servicios abstractos, fábricas de servicios y la arquitectura de servicios para aplicaciones complejas.
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
En esta charla se pretenden tocar todas las cosas que debemos tener en cuenta para sacar el máximo rendimiento y poder escalar usando Symfony2.
Se toca desde parámetros de configuración de PHP y APC, optimización de Composer, dónde optimizar, quick wins varios, cómo hacer profiling correctamente, BBDD NoSQL vs SQL y por supuesto lecciones aprendidas en mis anteriores trabajos
Integrando Redis en aplicaciones Symfony2Ronny López
Sus múltiples casos de usos y su excepcional rendimiento hacen que Redis sea hoy una pieza clave en la arquitectura de aplicaciones altamente dinámicas.
En la charla se expone de forma práctica cómo puede integrarse Redis en una aplicación Symfoy y cómo pueden implementarse varias de las características de las aplicaciones usando Redis, como por ejemplo: Session storage, Monolog logging handlers, Doctrine caching, SwiftMailer spooling, Profiler storage, Data Collector for Symfony2 Profiler.
Además de estos casos de uso generales, se comentan otros casos de usos específicos de aplicaciones que por su naturaleza no pueden beneficiarse de una capa de cache y se requiere por tanto una herramienta eficiente y escalable para resolver ciertos tipos de problemas.
Presentación hecha en el SpringIO 2012 en Madrid España. Donde se muestra un poco de la experiencia adquirida durante el desarrollo y puesta a producción de la plataforma de eCommerce mas grande de LatinoAmerica construida con Grails
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
En esta charla se pretenden tocar todas las cosas que debemos tener en cuenta para sacar el máximo rendimiento y poder escalar usando Symfony2.
Se toca desde parámetros de configuración de PHP y APC, optimización de Composer, dónde optimizar, quick wins varios, cómo hacer profiling correctamente, BBDD NoSQL vs SQL y por supuesto lecciones aprendidas en mis anteriores trabajos
Integrando Redis en aplicaciones Symfony2Ronny López
Sus múltiples casos de usos y su excepcional rendimiento hacen que Redis sea hoy una pieza clave en la arquitectura de aplicaciones altamente dinámicas.
En la charla se expone de forma práctica cómo puede integrarse Redis en una aplicación Symfoy y cómo pueden implementarse varias de las características de las aplicaciones usando Redis, como por ejemplo: Session storage, Monolog logging handlers, Doctrine caching, SwiftMailer spooling, Profiler storage, Data Collector for Symfony2 Profiler.
Además de estos casos de uso generales, se comentan otros casos de usos específicos de aplicaciones que por su naturaleza no pueden beneficiarse de una capa de cache y se requiere por tanto una herramienta eficiente y escalable para resolver ciertos tipos de problemas.
Presentación hecha en el SpringIO 2012 en Madrid España. Donde se muestra un poco de la experiencia adquirida durante el desarrollo y puesta a producción de la plataforma de eCommerce mas grande de LatinoAmerica construida con Grails
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
Platicaremos sobre opciones para la automatización del despliegue de aplicaciones en ambientes multi cloud (AWS, Azure), utilizando herramientas de Infrastructure as Code y configuration management. Primero daremos un panorama teórico de lo que sucede y luego mostraremos ejemplos usando Terraform y Ansible.
En este presentación usada para impartir un webinar, se revisan conceptos de Virtualización y Cloud para explicar que es un Virtual Private Server (VPS) los acalnces y limitaciones de este modelo y sus diferencias con un servidor dedicado y el Hosting compartido.
Introduction to Akamon software arquitecture for MPWAREloi Poch
Technical talk about the architecture used Akamon based on DDD, CQRS, TDD and BDD given as a teacher in a class in the master "High Performance Web Development" at Ramon Llull University.
There is also a GitHub repository to practice this technical solution: https://github.com/eloipoch/mpwar
Derribando la torre de marfil - Plain Concepts Dev DayPlain Concepts
Los microservicios son el nuevo hype del desarrollo pero, ¿seguro que sabemos cómo y cuándo utilizarlos? En esta charla veremos, a través de un ejemplo de un caso de negocio, una breve introducción a los microservicios, ventajas y retos que plantea (no todo va a ser fácil), incluyendo buenas prácticas.
Pues volvemos de nuevo a la carga con un nuevo meetup donde os vamos a contar cómo podeis optimizar al máximo los recursos que CloudHub nos ofrece como por ejemplo:
1.- Saber dimensionar el número de operaciones por API
2.- Aplicar buenas prácticas para no saturar los recursos
3.- Aprovechar al máximo el 0.1 vCore
4.- Cuando escalar vertical y horizontalmente un API
5.- Utilizar herramientas de análisis de código como Sonar
aspectos de las aplicaciones y la configuración son necesarias a verificar para ejecutar cargas de trabajo en un entorno seguro.
Desde el ensamblaje de las imágenes de los contenedores a la seguridad de ETCD y acceso externo a elementos del cluster son importantes a considerar.
Las arquitecturas sin servidores le permiten construir y ejecutar aplicaciones y servicios sin la necesidad de administrar la infraestructura que necesitan. Con las arquitecturas sin servidores en AWS su aplicación si se ejecuta en servidores pero toda la administración de los mismos la hace AWS.
En este webinar, usted aprenderá cómo construir aplicaciones y servicios mediante el uso de una arquitectura sin servidores o "serverless". Discutiremos cómo utilizar AWS Lambda para la ejecución de código para cualquier tipo de aplicación o servicio de backend; utilizar Amazon DynamoDB para almacenar los datos de la misma con una alta escalabilidad y redundancia; y utilizar Amazon API Gateway para crear y administrar puntos de conexión seguros API. También veremos un demo de cómo montar una arquitectura como estas y discutiremos las mejores prácticas y patrones utilizados por nuestros clientes para ejecutar aplicaciones sin servidores.
Objetivos de aprendizaje:
• Entender los conceptos básicos de arquitecturas sin servidores
• Aprender cómo usar Lambda, API Gateway y DynamoDB para ejecutar aplicaciones
¿Quién debería atender?:
• Desarrolladores, desarrolladores Web
Symfony-Community: Introducción a Symfony Frameworkexcedesoft
El seminario está dirigido a aquellos estudiantes, profesionales, universidades y empresas dedicados a la industria de software que deseen aprender sobre la iniciación de una aplicación Symfony. Se demostrá como descargar e instalar el framework, configuración inicial y conceptos necesarios para el desarrollo de una aplicación web simple.
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
Descripción del BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Más información en la web del curso. https://geekshubsacademy.com/producto/devops/
Automatización del despliegue de aplicaciones multi cloudSoftware Guru
Platicaremos sobre opciones para la automatización del despliegue de aplicaciones en ambientes multi cloud (AWS, Azure), utilizando herramientas de Infrastructure as Code y configuration management. Primero daremos un panorama teórico de lo que sucede y luego mostraremos ejemplos usando Terraform y Ansible.
En este presentación usada para impartir un webinar, se revisan conceptos de Virtualización y Cloud para explicar que es un Virtual Private Server (VPS) los acalnces y limitaciones de este modelo y sus diferencias con un servidor dedicado y el Hosting compartido.
Introduction to Akamon software arquitecture for MPWAREloi Poch
Technical talk about the architecture used Akamon based on DDD, CQRS, TDD and BDD given as a teacher in a class in the master "High Performance Web Development" at Ramon Llull University.
There is also a GitHub repository to practice this technical solution: https://github.com/eloipoch/mpwar
Derribando la torre de marfil - Plain Concepts Dev DayPlain Concepts
Los microservicios son el nuevo hype del desarrollo pero, ¿seguro que sabemos cómo y cuándo utilizarlos? En esta charla veremos, a través de un ejemplo de un caso de negocio, una breve introducción a los microservicios, ventajas y retos que plantea (no todo va a ser fácil), incluyendo buenas prácticas.
Pues volvemos de nuevo a la carga con un nuevo meetup donde os vamos a contar cómo podeis optimizar al máximo los recursos que CloudHub nos ofrece como por ejemplo:
1.- Saber dimensionar el número de operaciones por API
2.- Aplicar buenas prácticas para no saturar los recursos
3.- Aprovechar al máximo el 0.1 vCore
4.- Cuando escalar vertical y horizontalmente un API
5.- Utilizar herramientas de análisis de código como Sonar
aspectos de las aplicaciones y la configuración son necesarias a verificar para ejecutar cargas de trabajo en un entorno seguro.
Desde el ensamblaje de las imágenes de los contenedores a la seguridad de ETCD y acceso externo a elementos del cluster son importantes a considerar.
Las arquitecturas sin servidores le permiten construir y ejecutar aplicaciones y servicios sin la necesidad de administrar la infraestructura que necesitan. Con las arquitecturas sin servidores en AWS su aplicación si se ejecuta en servidores pero toda la administración de los mismos la hace AWS.
En este webinar, usted aprenderá cómo construir aplicaciones y servicios mediante el uso de una arquitectura sin servidores o "serverless". Discutiremos cómo utilizar AWS Lambda para la ejecución de código para cualquier tipo de aplicación o servicio de backend; utilizar Amazon DynamoDB para almacenar los datos de la misma con una alta escalabilidad y redundancia; y utilizar Amazon API Gateway para crear y administrar puntos de conexión seguros API. También veremos un demo de cómo montar una arquitectura como estas y discutiremos las mejores prácticas y patrones utilizados por nuestros clientes para ejecutar aplicaciones sin servidores.
Objetivos de aprendizaje:
• Entender los conceptos básicos de arquitecturas sin servidores
• Aprender cómo usar Lambda, API Gateway y DynamoDB para ejecutar aplicaciones
¿Quién debería atender?:
• Desarrolladores, desarrolladores Web
Symfony-Community: Introducción a Symfony Frameworkexcedesoft
El seminario está dirigido a aquellos estudiantes, profesionales, universidades y empresas dedicados a la industria de software que deseen aprender sobre la iniciación de una aplicación Symfony. Se demostrá como descargar e instalar el framework, configuración inicial y conceptos necesarios para el desarrollo de una aplicación web simple.
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
Descripción del BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Más información en la web del curso. https://geekshubsacademy.com/producto/devops/
En este webinar, aprenderá cómo las empresas pueden aprovechar la nube de AWS para automatizar los pipelines de desarrollo de software. Este enfoque permite que su equipo sea más ágil, mejorando su capacidad para entregar aplicaciones y servicios rápidamente.
Mecanismos y patrones para acelerar adopción en arquitecturas de microserviciosSoftware Guru
En esta charla explico tanto los problemas que se presentan asi como el patron y/o mecanismo para resolverlos dentro del contexto de microservicios.
Presentada por Miguel Enriquez en SG Virtual Conference 2020
Symfony2 un framework para maximizar tu productividad en desarrollo webIEBSchool
Presentación del webinar “Symfony2: un framework para maximizar tu productividad en desarrollo web” impartido por Andrés Molina Orero en IEBS Business School. Más info aquí: http://open.iebschool.com/cursos/symfony-2-framework-maximizar-productividad-desarrollo-web/
Una gran parte de las funcionalidades y retos que plantea el desarrollo de una aplicación web son comunes de un proyecto a otro: la creación de un login de usuarios, la seguridad de la aplicación, los formularios o la persistencia de los datos. Estos casos comunes provocan grandes inversiones de desarrollo que podrían solucionarse trabajando con un framework.
Symfony2 es un framework de PHP que permite centrarte en la lógica de tu negocio y te brinda numerosas herramientas para poner solución a los temas frecuentes de forma simple, ágil y robusta. Este framework de desarrollo web permite trabajar en diferentes formatos, usar componentes independientes, además de crear funcionalidades propias a través de los llamados bundles que son fácilmente reutilizables.
En este curso de "Symfony 2: un framework para maximizar tu productividad en desarrollo web" aprenderás a crear un proyecto basado en Symfony2 desde cero; desde su instalación hasta la creación de bundles propios pasando por las utilidades de desarrollo más frecuentemente utilizadas.
Tras muchos años asumiendo problemas ajenos como míos siendo empleado decidí crear una empresa que se dedicara a ello.
A lo largo de mi carrera he visto (y perpetrado) cosas que no creeríais pero, al final, la realidad es que la mayoría de empresas tienen problemas muy similares y se suelen cometen errores muy parecidos en todas partes, independientemente del sector, tamaño o perfiles de los equipos.
En esta charla nos centraremos en los errores más comunes que se cometen al implantar metodologías DevOps y cómo intentar evitarlos. Porque DevOps no es un puesto, ni un equipo, ni un proyecto, ni algo que se pueda comprar e instalar.
Porque no necesitas ser una FAANG para aprovecharte de las muchas cosas positivas de estas filosofías. Y incluso en las FAANG reconocen haber cometido muchos de estos errores.
DevOps & Infraestructura como código: Promesas RotasRicard Clau
Streaming en Youtube at https://www.youtube.com/watch?v=pm7DzYLVgkw hasta el minuto 48
Las metodologías DevOps y herramientas de infraestructura como código prometían simplificar el manejo de nuestros servidores, aumentar nuestro valor a negocio y en general, mejorar nuestra vida como ingenieros.
Pero la realidad es que la complejidad parece seguir en aumento, es cada vez más difícil testear todo correctamente y a veces parece que haciendo las cosas a mano vivíamos mejor.
En esta charla haremos un repaso de estos temas, plantearemos posibles soluciones, comentaremos algunos retos que todavía nos quedan y desde luego espero convencer a la audiencia de que volver atrás no sería una buena solución
Building a bakery of Windows servers with Packer - London WinOpsRicard Clau
Nobody likes patching servers. Specially not Windows servers. And the problem becomes even worse with hybrid infrastructures where you have servers running both in AWS and in a datacenter.
Packer is a tool for creating machine and container images for multiple platforms from a single source configuration.
In this session we will talk about how we are trying to sort this problem at Wonga, using Packer to create a bakery of Windows servers which allows us to build up-to-date AMIs and VMWare templates from the same set of provisioning scripts.
Modern software architectures - PHP UK Conference 2015Ricard Clau
The web has changed. Users demand responsive, real-time interactive applications and companies need to store and analyze tons of data. Some years ago, monolithic code bases with a basic LAMP stack, some caching and perhaps a search engine were enough. These days everybody is talking about micro-services architectures, SOA, Erlang, Golang, message passing, queue systems and many more. PHP seems to not be cool anymore but... is this true? Should we all forget everything we know and just learn these new technologies? Do we really need all these things?
Big Data! Great! Now What? #SymfonyCon 2014Ricard Clau
Big Data is one of the new buzzwords in the industry. Everyone is using NoSQL databases. MySQL is not cool anymore. But... do we really have big data? Where should we store it? Are the traditional RDBMS databases dead? Is NoSQL the solution to our problems? And most importantly, how can PHP and Symfony2 help with it?
Speed up your Symfony2 application and build awesome features with RedisRicard Clau
Redis is an extremely fast data structure server that can be easily added to your existing stack and act like a Swiss army knife to help solve many problems that would be extremely difficult to workaround with the traditional RDBMS. In this session we will focus on what Redis is, how it works, what awesome features we can build with it and how we can use it with PHP and integrate it with Symfony2 applications making them blazing fast.
Charla sobre cómo implantar buenas prácticas en los proyectos tecnológicos y no morir en el intento. Realizada el 25 de Enero de 2013 en Betabeers Barcelona.
3. Hello World
• Ricard Clau Pintado
• Trabajo en SocialPoint
• Antes en Emagister, Ulabox y Privalia
• Fundador Symfony-Barcelona
• Blogger http://www.ricardclau.com
• Twitter @ricardclau
4. ¿Qué vamos a ver?
• Arquitectura orientada a servicios (SOA)
• La capa de modelo en Symfony2
• Servicios en Symfony2
• Componente Configuration
• Inyección de dependencias
• Experiencias en el desarrollo de Ulabox.com
6. El concepto SOA
• Arquitectura Orientada a Servicios
• Los Servicios son clases creadas para desarrollar una
función específica y se pueden utilizar en cualquier punto
de nuestra aplicación.
• Encapsulando la lógica de negocio en servicios podemos
desacoplar las clases de nuestra aplicación, que podrá
crecer “sin problemas”
• Todas las plataformas grandes lo usan (o deberían)
7. No todo es tan fácil
• Es una filosofía entorno al patrón de diseño Service Layer
• Parece que estamos trabajando más
• Es muy importante delimitar la responsabilidad de cada
servicio y no acoplarlos
• Hay que concienciar a todo el equipo, formar a los juniors
y convencer a la gente con malos hábitos
• Puede ser complicado de aplicar en código legado
• Pero... ¡se puede hacer gradualmente!
10. El modelo en Symfony2
Introducción a los servicios
11. La evolución del MVC
• Symfony2 no es un framework MVC estrictamente
• De hecho, la carpeta “Model” no existe por defecto!
• Es tan flexible que nos da la libertad de construir la capa
de Modelo como convenga a nuestra aplicación
• Y eso puede ser peligroso...
12. Y entonces... ¿Doctrine2?
• Doctrine2 abstrae el acceso al sistema de
almacenamiento, tanto SQL como algunos No-SQL
• Las “Entities” mapean tablas (ORM) / documentos (ODM)
• Los “Repositories” permiten encapsular operaciones y
realizar consultas algo más complejas
• Pero ahí no debería ir la lógica de negocio!
13. El modelo en Symfony2
• En Symfony2, más que hablar del modelo, podemos
hablar de la capa de servicios
• Hay que evitar los controllers de 2000 líneas
• En los repositories no deberíamos poner lógica de
negocio, son para querys complejas
• Las vistas deben tener la mínima lógica posible
• Cada servicio debe recibir sólo lo que necesita y exponer
unas interficies claras para su uso. Nunca usar el Request
ni modificar la Response.
15. Servicios en Symfony2
• Muchos de los componentes de Symfony2 están
disponibles como servicios
• Algunos: Doctrine2 Entity Manager, Swiftmailer,
Validator, Translator, Templating, Routing, ...
• Muchos bundles añaden nuevos servicios y podemos
crear nuestros propios servicios!
• Acceso mediante el “Dependency Injection Container”
desde las clases con interface “ContainerAware”
23. Configuraciones en Symfony2
• app/config -> aplicación Resources/config -> Bundles
• Configuración base que extendemos para el resto de
entornos
• Conveniente separarlo en varios archivos
24. [parameters]
• Se suelen definir constantes de configuración
• Permite que cada usuario tenga el setup como quiera
• Los valores bajo la clave [parameters] se inyectan en el
container directamente. Podemos usarlos en otras
secciones con %valor%
• Podemos crear nuestras propias claves para configurar
nuestros bundles, que deberán ser leídas en los archivos
de la carpeta DependencyInjection
35. Config y uso del servicio
• En el config de la aplicación
• Modificamos services.yml en Resources/config
• Y desde el controller
36. Dependencias de un servicio
• Un servicio puede depender de parámetros de
configuración y/o de otros servicios
• Nos referimos a los parámetros con %param% y los
servicios con @nombre_servicio
• Constructor Injection -> arguments:
37. Dependencias opcionales
• Setter Injection y otras inicializaciones -> calls
• Podemos combinarlo todo en servicios complejos
41. Service Factories
• El mejor ejemplo son los repositories
• Pero si hacemos esto
• Los controllers quedan así de limpios!
42. Service Tags (I)
• Agrupación de servicios
• El tag en sí no significa nada pero puede ser útil para
extender componentes con nuevos loaders / adapters.
Suelen procesarse en las CompilerPass
• Lo usamos en Twig para cargar extensiones
43. Service Tags (II)
• El componente Translator lo usa para los loaders
• O cuando necesitamos crear un Event Listener
44. E-commerce con servicios
Web Backoffice API (Iphone, ...)
KernelController Listeners / Before hooks (autenticaciones, ...)
Controllers ligeros que traducen Request a parámetros
Servicios de primer nivel / unidades de negocio M
(Customer, Cart, Order, Catalogue)
O
Servicios auxiliares a modo de Helpers
(Logger, Translator, Validator, Mailer, ...)
D
Interacción Storage / 3rd party
E
(Entities, Repositories, Solarium, PRedis, OpenInviter...) L
BBDD No-SQL / Caches 3rd Party APIs
45. Agradecimientos
• A los Ulaboxers PHPeros: Sergi, Albert, Marc
• Al equipo #rigor de @EmagisterTech
• A la organización y sponsors de DeSymfony
• A todos vosotros :)
46. ¿Preguntas?
• E-mail: ricard.clau@gmail.com
• Twitter: @ricardclau
• Github: https://github.com/ricardclau
• O si os da corte ahora... en otro momento :)