Tu servicio de órdenes hace dos cosas cuando se crea una orden: guarda la orden en la base de datos, y publica un evento OrderCreated a Kafka para que el servicio de inventario y el de facturación se enteren. Código simple: ¿Qué pasa si el servidor se cae justo entre la línea 1 y la…
All posts in Diseño
Patrón Bulkhead
Tu aplicación tiene un endpoint de checkout que llama a tres servicios: pagos, envíos y notificaciones. Un día, el servicio de notificaciones — el menos crítico de los tres, el que manda el correo de “tu orden fue recibida” — empieza a responder lento. Nada grave, pensarías. Pero a los cinco minutos, el checkout completo…
Event Sourcing vs CRUD: ¿cuándo usar cada uno?
Un cliente de una fintech (empresa de tecnología financiera) llama a soporte: “Mi saldo dice $500 pero yo tenía $800 la semana pasada. ¿Qué pasó?”. El agente de soporte abre el sistema y encuentra… una fila en la base de datos que dice balance = 500. Nada más. La historia de cómo se llegó a…
SOLID en la práctica – más allá de las definiciones
Preguntale a cualquier desarrollador qué significa SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion — Responsabilidad Única, Abierto/Cerrado, Sustitución de Liskov, Segregación de Interfaces e Inversión de Dependencias) y probablemente te recite las cinco definiciones sin problema. Ahora pedile que te muestre su último pull request… y ahí es donde la historia cambia.…
Patrones de Resiliencia: Circuit Breaker y Retry
Tenés un servicio que consulta la API (Interfaz de Programación de Aplicaciones) de un proveedor de pagos externo. Todo funciona perfecto durante semanas. Un día, ese proveedor empieza a tener problemas: algunas llamadas tardan 30 segundos en responder, otras simplemente no responden. En cuestión de minutos, los hilos de tu aplicación se saturan esperando respuestas…
Patrón Saga: cómo manejar transacciones distribuidas
Imaginá este escenario: tenés un e-commerce y un cliente acaba de hacer una orden. Tu sistema necesita ejecutar tres pasos en secuencia: En una aplicación monolítica con una sola base de datos, esto era sencillo. Abrías una transacción, ejecutabas los tres pasos, y si algo fallaba, hacías un rollback. Todo o nada. ACID (Atomicity, Consistency,…
Antipatrones
Ya hemos analizado múltiples patrones en post anteriores. Hemos revisado las buenas prácticas y principios de desarrollo orientado a objetos. Sin embargo, también existe un lado oscuro del diseño de software, ciertas prácticas a las que llamamos antipatrones. Los patrones de diseño se definen como, soluciones generales a problemas recurrentes en un contexto particular. ¿Cómo…
Patrón Modelo-Vista-Controlador
El patrón modelo-vista-controlador es uno de los patrones más utilizados hoy en día. En realidad este patrón, es un conjunto de 3 patrones. Cuando hay dos o más patrones juntos se les llama patrones compuestos. Este es el caso del patrón modelo-vista-controlador (MVC), ya que, se compone de 3 patrones principalmente: Estrategia. Compuesto. Observador. Algunas…
Patrón Proxy Protegido
Es el momento de revisar el siguiente tipo de Proxy, el cual llamamos Patrón Proxy Protegido, ya que, por medio de un Proxy, podemos determinar si un cliente puede o no realizar una acción sobre un objeto. Para este patrón podemos hacer uso de clases utilitarias dentro de JAVA, en específico las del paquete java.lang.reflect.…
Patrón Proxy Virtual
En el post anterior discutimos cómo implementar un Proxy Remoto utilizando JAVA RMI para acceder a los objetos que están en otra maquina virtual. El patrón Proxy también puede implementarse de manera virtual (Patrón Proxy Virtual), es decir, dentro de la misma aplicación, vamos a utilizar un objeto que va a sustituir al elemento que…