{"id":4431,"date":"2018-01-16T01:10:02","date_gmt":"2018-01-16T09:10:02","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4431"},"modified":"2023-06-23T09:28:37","modified_gmt":"2023-06-23T16:28:37","slug":"saga-pattern-implement-business-transactions-using-microservices-part-2","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/","title":{"rendered":"Saga Pattern | C\u00f3mo implementar transacciones de negocio utilizando microservicios - Parte II"},"content":{"rendered":"<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/distributed-multi-document-acid-transactions-in-couchbase\/\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7564\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/Couchbase-transaction.png\" alt=\"\" width=\"993\" height=\"120\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Couchbase-transaction.png 704w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Couchbase-transaction-300x36.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Couchbase-transaction-20x2.png 20w\" sizes=\"auto, (max-width: 993px) 100vw, 993px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part\/\">En el post anterior<\/a>, vimos algunos de los retos de implementar transacciones distribuidas y c\u00f3mo implementar el patr\u00f3n de Saga utilizando el enfoque Evento\/Coreograf\u00eda. En este art\u00edculo, vamos a hablar de c\u00f3mo abordar algunos de sus problemas como transacciones complejas o dependencias c\u00edclicas de eventos utilizando otro tipo de implementaci\u00f3n de Saga llamado Comando u Orquestaci\u00f3n.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>L\u00f3gica de secuenciaci\u00f3n de comandos y orquestaci\u00f3n de Saga<\/b><\/h3>\n<p><span style=\"font-weight: 400\">En el enfoque de orquestaci\u00f3n, definimos un nuevo servicio con la \u00fanica responsabilidad de decir a cada participante qu\u00e9 hacer y cu\u00e1ndo. El sitio <a href=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part\/\">patr\u00f3n de la saga<\/a> El orquestador se comunica con cada servicio en un estilo comando\/respuesta indic\u00e1ndoles qu\u00e9 operaci\u00f3n debe realizarse.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Veamos c\u00f3mo queda utilizando nuestro ejemplo anterior de comercio electr\u00f3nico:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4432 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-1024x627.png\" alt=\"Command\/Orchestration flow\" width=\"712\" height=\"436\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-1024x627.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-300x184.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-768x470.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-1536x941.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM-1320x809.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.40.54-PM.png 1564w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"><em>Servicio de pedidos<\/em> guarda una orden pendiente y pide a Order Saga Orchestrator (OSO) que inicie un <em>crear transacci\u00f3n de pedido<\/em>.<\/span><\/li>\n<li><em>OSO<\/em> env\u00eda un <em><strong>Ejecutar el pago<\/strong><\/em> comando para <em>Servicio de pago<\/em>y responde con un <em><strong>Pago ejecutado<\/strong><\/em> mensaje<\/li>\n<li><em>OSO<\/em> env\u00eda un <em><strong>Preparar pedido<\/strong><\/em> a Stock Service, y \u00e9ste responde con un comando <em><strong>Pedido preparado<\/strong><\/em> mensaje<\/li>\n<li><em>OSO<\/em> env\u00eda un <em><strong>Entregar pedido<\/strong><\/em> a Delivery Service, y \u00e9ste responde con un <em><strong>Pedido entregado<\/strong><\/em> mensaje<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">En el caso anterior, Order Saga Orchestrator conoce cu\u00e1l es el flujo necesario para ejecutar una transacci\u00f3n de \"crear orden\". Si algo falla, tambi\u00e9n se encarga de coordinar la reversi\u00f3n enviando \u00f3rdenes a cada participante para deshacer la operaci\u00f3n anterior.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Una forma est\u00e1ndar de modelar un orquestador saga es una M\u00e1quina de Estado donde cada transformaci\u00f3n corresponde a un comando o mensaje. Las m\u00e1quinas de estado son un patr\u00f3n excelente para estructurar un comportamiento bien definido, ya que son f\u00e1ciles de implementar y particularmente grandes para las pruebas.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><b>Retroceso en el Mando\/Orquestaci\u00f3n de Saga<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Las reversiones son mucho m\u00e1s f\u00e1ciles cuando se dispone de un orquestador que coordina todo:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4433\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-1024x652.png\" alt=\"\" width=\"664\" height=\"423\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-1024x652.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-300x191.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-768x489.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM-1320x840.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-11-at-7.41.06-PM.png 1486w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/><\/p>\n<ol>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">Servicio de existencias<\/span><\/i><span style=\"font-weight: 400\"> responde a OSO con un <\/span><b><i>Agotado<\/i><\/b><span style=\"font-weight: 400\"> mensaje;<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">OSO reconoce que la transacci\u00f3n ha fallado e inicia el rollback<\/span>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">En este caso, s\u00f3lo se ejecut\u00f3 con \u00e9xito una operaci\u00f3n antes del fallo, por lo que <\/span><i><span style=\"font-weight: 400\">OSO<\/span><\/i><span style=\"font-weight: 400\"> env\u00eda un <\/span><b><i>Reembolso Cliente<\/i><\/b><span style=\"font-weight: 400\"> comando para <\/span><i><span style=\"font-weight: 400\">Servicio de pago<\/span><\/i><span style=\"font-weight: 400\"> y establecer el estado del pedido como fallido<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h3><b>Ventajas e inconvenientes del uso de Saga <\/b><b>Mando\/Dise\u00f1o de orquestaci\u00f3n<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Las sagas basadas en la orquestaci\u00f3n tienen varias ventajas: \u00a0<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">Evitar dependencias c\u00edclicas entre servicios, ya que la <\/span><span style=\"font-weight: 400\">el orquestador de la saga invoca a los participantes de la saga, pero los participantes no invocan al orquestador<\/span><\/li>\n<li><span style=\"font-weight: 400\">Centralizar la orquestaci\u00f3n de la transacci\u00f3n distribuida<\/span><\/li>\n<li><span style=\"font-weight: 400\">Reducir la complejidad de los participantes, ya que s\u00f3lo tienen que ejecutar\/responder \u00f3rdenes.<\/span><\/li>\n<li><span style=\"font-weight: 400\">M\u00e1s f\u00e1cil de implantar y probar<\/span><\/li>\n<li><span style=\"font-weight: 400\">La complejidad de la transacci\u00f3n sigue siendo lineal cuando se a\u00f1aden nuevos pasos<\/span><\/li>\n<li>Las retrocesiones son m\u00e1s f\u00e1ciles de gestionar<\/li>\n<li>Si tiene una segunda transacci\u00f3n que desea cambiar el mismo objeto de destino, puede ponerla f\u00e1cilmente en espera en el orquestador hasta que finalice la primera transacci\u00f3n.<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Sin embargo, este enfoque sigue teniendo algunos inconvenientes, uno de ellos es el riesgo de concentrar demasiada l\u00f3gica en el orquestador y acabar con una arquitectura en la que el orquestador inteligente dice a los servicios tontos lo que tienen que hacer.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Otro inconveniente de la orquestaci\u00f3n basada en Saga es que aumenta ligeramente la complejidad de su infraestructura, ya que tendr\u00e1 que gestionar un servicio adicional.<\/span><\/p>\n<h3><\/h3>\n<h3><\/h3>\n<h3><\/h3>\n<h3><b>Saga Patr\u00f3n Consejos<\/b><\/h3>\n<h4><b>Crear un Id \u00fanico por transacci\u00f3n<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Disponer de un identificador \u00fanico para cada transacci\u00f3n es una t\u00e9cnica habitual para la trazabilidad, pero tambi\u00e9n ayuda a los participantes a disponer de una forma est\u00e1ndar de solicitarse datos mutuamente. Utilizando un Id de transacci\u00f3n, por ejemplo, el Servicio de Entrega podr\u00eda preguntar al Servicio de Existencias d\u00f3nde recoger los productos y comprobar con el Servicio de Pagos si el pedido se ha pagado.<\/span><\/p>\n<h4><b>A\u00f1adir la direcci\u00f3n de respuesta dentro del comando<\/b><\/h4>\n<p><span style=\"font-weight: 400\">En lugar de dise\u00f1ar a sus participantes para que respondan a una direcci\u00f3n fija, considere la posibilidad de enviar la direcci\u00f3n de respuesta dentro del mensaje, de esta forma permitir\u00e1 a sus participantes responder a m\u00faltiples orquestadores.<\/span><\/p>\n<h4><b>Operaciones idempotentes<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Si est\u00e1s utilizando colas para la comunicaci\u00f3n entre servicios (como SQS, Kafka, RabbitMQ, etc.), personalmente te recomiendo que hagas tus operaciones Idempotentes. La mayor\u00eda de esas colas podr\u00edan entregar el mismo mensaje dos veces.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Tambi\u00e9n puede aumentar la tolerancia a fallos de su servicio. A menudo, un error en un cliente puede desencadenar\/reproducir mensajes no deseados y estropear la base de datos.<\/span><\/p>\n<h4><b>Evitar las comunicaciones s\u00edncronas<\/b><\/h4>\n<p><span style=\"font-weight: 400\">A medida que avanza la transacci\u00f3n, no olvides a\u00f1adir en el mensaje todos los datos necesarios para la ejecuci\u00f3n de cada operaci\u00f3n. El objetivo es evitar llamadas s\u00edncronas entre los servicios s\u00f3lo para solicitar m\u00e1s datos. Esto permitir\u00e1 a tus servicios ejecutar sus transacciones locales incluso cuando otros servicios est\u00e9n desconectados.<\/span><\/p>\n<p><span style=\"font-weight: 400\">La desventaja es que su orquestador ser\u00e1 ligeramente m\u00e1s complejo, ya que tendr\u00e1 que manipular las solicitudes\/respuestas de cada paso, as\u00ed que sea consciente de las ventajas y desventajas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Si tiene alguna pregunta, no dude en hac\u00e9rmela en <a href=\"https:\/\/twitter.com\/deniswsrosa\">@deniswsrosa<\/a><\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>In the previous post, we saw some of the challenges of implementing distributed transactions and how to implement Saga\u2019s pattern using the Event\/Choreography approach. In this article, let\u2019s talk about how to address some of its problems like complex transactions [&hellip;]<\/p>","protected":false},"author":8754,"featured_media":7566,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814],"tags":[],"ppma_author":[9059],"class_list":["post-4431","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II\" \/>\n<meta property=\"og:description\" content=\"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-16T09:10:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-23T16:28:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/saga2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"728\" \/>\n\t<meta property=\"og:image:height\" content=\"210\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@deniswsrosa\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Denis Rosa, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\"},\"author\":{\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\"},\"headline\":\"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II\",\"datePublished\":\"2018-01-16T09:10:02+00:00\",\"dateModified\":\"2023-06-23T16:28:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\"},\"wordCount\":788,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png\",\"articleSection\":[\"Application Design\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\",\"name\":\"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png\",\"datePublished\":\"2018-01-16T09:10:02+00:00\",\"dateModified\":\"2023-06-23T16:28:37+00:00\",\"description\":\"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png\",\"width\":728,\"height\":210},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257\",\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g\",\"caption\":\"Denis Rosa, Developer Advocate, Couchbase\"},\"description\":\"Denis Rosa is a Developer Advocate for Couchbase and lives in Munich - Germany. He has a solid experience as a software engineer and speaks fluently Java, Python, Scala and Javascript. Denis likes to write about search, Big Data, AI, Microservices and everything else that would help developers to make a beautiful, faster, stable and scalable app.\",\"sameAs\":[\"https:\/\/x.com\/deniswsrosa\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/denis-rosa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II - The Couchbase Blog","description":"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/","og_locale":"es_MX","og_type":"article","og_title":"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II","og_description":"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-01-16T09:10:02+00:00","article_modified_time":"2023-06-23T16:28:37+00:00","og_image":[{"width":728,"height":210,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/saga2.png","type":"image\/png"}],"author":"Denis Rosa, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@deniswsrosa","twitter_misc":{"Written by":"Denis Rosa, Developer Advocate, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/"},"author":{"name":"Denis Rosa, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257"},"headline":"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II","datePublished":"2018-01-16T09:10:02+00:00","dateModified":"2023-06-23T16:28:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/"},"wordCount":788,"commentCount":4,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png","articleSection":["Application Design"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/","url":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/","name":"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png","datePublished":"2018-01-16T09:10:02+00:00","dateModified":"2023-06-23T16:28:37+00:00","description":"Learn how to address some of problems like cyclic dependencies of events by using another type of Saga\u2019s implementation called Command or Orchestration.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga2.png","width":728,"height":210},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Saga Pattern | How to Implement Business Transactions Using Microservices \u2013 Part II"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257","name":"Denis Rosa, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/be0716f6199cfb09417c92cf7a8fa8d6","url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","caption":"Denis Rosa, Developer Advocate, Couchbase"},"description":"Denis Rosa es un Developer Advocate para Couchbase y vive en Munich - Alemania. Tiene una s\u00f3lida experiencia como ingeniero de software y habla con fluidez Java, Python, Scala y Javascript. A Denis le gusta escribir sobre b\u00fasqueda, Big Data, AI, Microservicios y todo lo que pueda ayudar a los desarrolladores a hacer una aplicaci\u00f3n hermosa, m\u00e1s r\u00e1pida, estable y escalable.","sameAs":["https:\/\/x.com\/deniswsrosa"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/denis-rosa\/"}]}},"authors":[{"term_id":9059,"user_id":8754,"is_guest":0,"slug":"denis-rosa","display_name":"Denis Rosa, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=g","author_category":"","last_name":"Rosa, Developer Advocate, Couchbase","first_name":"Denis","job_title":"","user_url":"","description":"Denis Rosa es un Developer Advocate para Couchbase y vive en Munich - Alemania. Tiene una s\u00f3lida experiencia como ingeniero de software y habla con fluidez Java, Python, Scala y Javascript. A Denis le gusta escribir sobre b\u00fasqueda, Big Data, AI, Microservicios y todo lo que pueda ayudar a los desarrolladores a hacer una aplicaci\u00f3n hermosa, m\u00e1s r\u00e1pida, estable y escalable."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/8754"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4431"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4431\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7566"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4431"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}