{"id":4424,"date":"2018-01-10T21:21:37","date_gmt":"2018-01-11T05:21:37","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=4424"},"modified":"2023-06-23T09:00:33","modified_gmt":"2023-06-23T16:00:33","slug":"saga-pattern-implement-business-transactions-using-microservices-part","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part\/","title":{"rendered":"Saga Pattern | Transacciones de aplicaciones utilizando microservicios - Parte I"},"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=\"1110\" height=\"134\" 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: 1110px) 100vw, 1110px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Las transacciones son una parte esencial de las aplicaciones. Sin ellas, ser\u00eda imposible mantener la coherencia de los datos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Uno de los tipos de transacciones m\u00e1s potentes es el llamado Two-Phase Commit, que se resume cuando <\/span><span style=\"font-weight: 400\">el commit de una primera transacci\u00f3n depende de la finalizaci\u00f3n de una segunda.<\/span><span style=\"font-weight: 400\"> Es \u00fatil sobre todo cuando hay que actualizar varias entidades al mismo tiempo, como confirmar un pedido y actualizar las existencias a la vez. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Sin embargo, cuando realizas orquestaci\u00f3n de microservicios, por ejemplo, las cosas se complican. Cada servicio es un sistema aparte con su propia base de datos, y ya no puedes aprovechar la simplicidad de los two-phase-commits locales para mantener la consistencia de todo tu sistema.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Cuando se pierde esta capacidad, RDBMS se convierte en una opci\u00f3n bastante mala para el almacenamiento, ya que se podr\u00eda lograr la misma \"transacci\u00f3n at\u00f3mica de entidad \u00fanica\" pero docenas de veces m\u00e1s r\u00e1pido con s\u00f3lo usar un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\">Base de datos NoSQL<\/a> como Couchbase. Por eso, la mayor\u00eda de las empresas que trabajan con microservicios tambi\u00e9n utilizan NoSQL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para ejemplificar este problema, considere la siguiente arquitectura de Microservicios de alto nivel de un sistema de comercio electr\u00f3nico:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4425\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/e-commerce-architecture-1024x693.png\" alt=\"\" width=\"573\" height=\"388\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture-1024x693.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture-300x203.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture-768x520.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture-235x160.png 235w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/e-commerce-architecture.png 1176w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/p>\n<p><span style=\"font-weight: 400\">En el ejemplo anterior, no se puede hacer un pedido, cobrar al cliente, actualizar el stock y enviarlo a reparto todo en una \u00fanica transacci\u00f3n ACID. Para ejecutar todo este flujo de forma coherente, ser\u00eda necesario crear una transacci\u00f3n distribuida.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Todos sabemos lo dif\u00edcil que es implementar cualquier cosa distribuida, y las transacciones, por desgracia, no son una excepci\u00f3n. Tratar con estados transitorios, consistencia eventual entre servicios, aislamientos y reversiones son escenarios que deben ser considerados durante la fase de dise\u00f1o.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Afortunadamente<\/span> ya<span style=\"font-weight: 400\"> se nos ocurrieron algunos buenos patrones para ello, ya que llevamos m\u00e1s de 20 a\u00f1os implementando transacciones distribuidas. El que me gustar\u00eda hablar hoy se llama patr\u00f3n Saga.<\/span><\/p>\n<h2><b>El patr\u00f3n SAGA<\/b><\/h2>\n<p>A <strong>patr\u00f3n de la saga<\/strong> es una secuencia de transacciones locales en la que cada transacci\u00f3n actualiza datos dentro de un \u00fanico servicio. La primera transacci\u00f3n de una saga se inicia mediante una solicitud externa correspondiente a la operaci\u00f3n del sistema y, a continuaci\u00f3n, cada paso posterior se desencadena por la finalizaci\u00f3n del anterior.<\/p>\n<p><span style=\"font-weight: 400\">Uno de los patrones m\u00e1s conocidos para las transacciones distribuidas se llama Saga. El primer art\u00edculo al respecto<\/span><a href=\"https:\/\/www.cs.cornell.edu\/andru\/cs711\/2002fa\/reading\/sagas.pdf\"> <span style=\"font-weight: 400\">se public\u00f3 en 1987<\/span><\/a><span style=\"font-weight: 400\"> y las sagas han sido un<\/span> soluci\u00f3n<span style=\"font-weight: 400\"> desde entonces.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Utilizando nuestro ejemplo anterior de comercio electr\u00f3nico, en un dise\u00f1o de muy alto nivel una implementaci\u00f3n del patr\u00f3n saga tendr\u00eda el siguiente aspecto:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10012\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/saga-pattern-sequence.png\" alt=\"saga implementation\" width=\"1024\" height=\"627\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-sequence.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-sequence-300x184.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-sequence-768x470.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-sequence-20x12.png 20w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Hay un par de maneras diferentes de implementar una transacci\u00f3n saga, pero los dos m\u00e1s populares son:<\/span><\/p>\n<ul>\n<li><b>Eventos\/Coreograf\u00eda:<\/b><span style=\"font-weight: 400\"> Cuando no existe una coordinaci\u00f3n central, cada servicio produce y escucha los eventos de otros servicios y decide si se debe emprender una acci\u00f3n o no.<\/span><\/li>\n<li><b>Mando\/Orquestaci\u00f3n<\/b><span style=\"font-weight: 400\">: cuando un servicio coordinador se encarga de centralizar la toma de decisiones de la saga y secuenciar la l\u00f3gica empresarial.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Profundicemos un poco m\u00e1s en cada aplicaci\u00f3n para entender c\u00f3mo funcionan las sagas.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Eventos\/Coreograf\u00eda<\/b><\/h4>\n<p><span style=\"font-weight: 400\">En el enfoque Eventos\/Choreography, el primer servicio ejecuta una transacci\u00f3n y luego publica un evento. Este evento es escuchado por uno o varios servicios que ejecutan transacciones locales y publican (o no) nuevos eventos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">La transacci\u00f3n distribuida finaliza cuando el \u00faltimo servicio ejecuta su transacci\u00f3n local y no publica ning\u00fan evento o el evento publicado no es escuchado por ninguno de los participantes de la saga.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Veamos c\u00f3mo ser\u00eda el patr\u00f3n de la saga en nuestro ejemplo de comercio electr\u00f3nico:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4427\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM.png\" alt=\"\" width=\"476\" height=\"506\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM.png 936w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM-282x300.png 282w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM-768x817.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM-300x319.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.13.39-PM-20x20.png 20w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"><em>Servicio de pedidos<\/em> guarda un nuevo pedido, establece el estado como <em>pendiente<\/em> y publicar un evento llamado <em><strong>EVENTO_CREADO_PEDIDO<\/strong><\/em>.<\/span><\/li>\n<li>En <em>Servicio de pago<\/em> escucha <em><strong>EVENTO_CREADO_PEDIDO<\/strong><\/em>cobrar al cliente y publicar el evento <strong><em>EVENTO_PEDIDO_FACTURADO<\/em><\/strong>.<\/li>\n<li>En <em>Servicio de existencias<\/em> escucha <em><strong>EVENTO_PEDIDO_FACTURADO<\/strong><\/em>actualizar el stock, preparar los productos comprados en el pedido y publicar <em><strong>EVENTO_PEDIDO_PREPARADO<\/strong><\/em>.<\/li>\n<li><em>Servicio de entrega<\/em> escucha <em><strong>EVENTO_PEDIDO_PREPARADO<\/strong><\/em> y luego recoge y entrega el producto. Al final, publica un <em><strong>PEDIDO_ENTREGADO_EVENTO<\/strong><\/em><\/li>\n<li>\u00a0Por fin, <em>Servicio de pedidos<\/em> escucha <em><strong>PEDIDO_ENTREGADO_EVENTO<\/strong><\/em> y establecer el estado de la orden como concluida.<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">En el caso anterior, si se necesita hacer un seguimiento del estado del pedido, Order Service podr\u00eda simplemente escuchar todos los eventos y actualizar su estado.<\/span><\/p>\n<h4><\/h4>\n<p>&nbsp;<\/p>\n<h4><b>Retrocesos en transacciones distribuidas<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Revertir una transacci\u00f3n distribuida no sale gratis. Normalmente hay que implementar otra transacci\u00f3n compensatoria por lo que se ha hecho antes.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Supongamos que Stock Service ha fallado durante una transacci\u00f3n. Veamos c\u00f3mo ser\u00eda la reversi\u00f3n:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4428\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-1024x702.png\" alt=\"\" width=\"567\" height=\"389\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-1024x702.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-300x206.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-768x526.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-235x160.png 235w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/Screen-Shot-2018-01-09-at-6.36.17-PM.png 1074w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"><em>Servicio de existencias<\/em> produce <strong><em>EVENTO_FALTA_DE_EXISTENCIAS_DE_PRODUCTOS<\/em><\/strong>;<\/span><\/li>\n<li>Ambos <em>Servicio de pedidos<\/em> y <em>Servicio de pagos<\/em>e escuchar el mensaje anterior:\n<ol>\n<li><span style=\"font-weight: 400\">P<em>Servicio de pago<\/em> reembolsar al cliente<\/span><\/li>\n<li><span style=\"font-weight: 400\"><em>Servicio de pedidos<\/em> establecer el estado del pedido como fallido \u00a0\u00a0\u00a0\u00a0<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Tenga en cuenta que es crucial definir un ID compartido com\u00fan para cada transacci\u00f3n, de modo que cada vez que lance un evento, todos los oyentes puedan saber de inmediato a qu\u00e9 transacci\u00f3n se refiere.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Ventajas e inconvenientes de utilizar el patr\u00f3n de dise\u00f1o Evento\/Coreograf\u00eda de Saga<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Events\/Choreography es una forma natural de implementar un patr\u00f3n de orquestaci\u00f3n Saga. Es simple, f\u00e1cil de entender, no requiere mucho esfuerzo para construir, y todo <\/span><span style=\"font-weight: 400\">los participantes est\u00e1n poco acoplados, ya que no tienen conocimiento directo unos de otros<\/span><span style=\"font-weight: 400\">.<\/span><span style=\"font-weight: 400\"> Si su transacci\u00f3n implica de 2 a 4 pasos, puede ser una muy buena opci\u00f3n.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Sin embargo, este enfoque puede volverse confuso r\u00e1pidamente si sigues a\u00f1adiendo pasos adicionales en tu transacci\u00f3n, ya que es dif\u00edcil rastrear qu\u00e9 servicios escuchan qu\u00e9 eventos. Adem\u00e1s, tambi\u00e9n podr\u00eda a\u00f1adir una dependencia c\u00edclica entre servicios<\/span> <span style=\"font-weight: 400\">ya que tienen que suscribirse unos a otros<\/span> <span style=\"font-weight: 400\">eventos<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Por \u00faltimo, las pruebas ser\u00edan dif\u00edciles de implementar utilizando este dise\u00f1o, para simular el patr\u00f3n de transacci\u00f3n debe tener todos los servicios en ejecuci\u00f3n.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part-2\/\">En la pr\u00f3xima entrada<\/a>explicar\u00e9 c\u00f3mo solucionar la mayor\u00eda de los problemas de la Saga de <\/span><span style=\"font-weight: 400\">Enfoque de eventos\/coreograf\u00eda utilizando otra implementaci\u00f3n de Saga llamada <\/span><b>Mando\/Orquestaci\u00f3n<\/b>.<\/p>\n<p><span style=\"font-weight: 400\">Mientras tanto, si tienes alguna pregunta sobre el Saga Design Pattern sobre Microservicios, la arquitectura Saga, o aplicaciones Saga no dudes en preguntarme en <a href=\"https:\/\/twitter.com\/deniswsrosa\">@deniswsrosa<\/a><\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Transactions are an essential part of applications. Without them, it would be impossible to maintain data consistency. One of the most powerful types of transactions is called a Two-Phase Commit, which is in summary when the commit of a first [&hellip;]<\/p>\n","protected":false},"author":8754,"featured_media":9925,"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-4424","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Saga Pattern: Microservices Design Examples | Couchbase<\/title>\n<meta name=\"description\" content=\"A saga pattern is a sequence of local transactions where each transaction updates data within a single service. Check out design examples at Couchbase.\" \/>\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\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Saga Pattern | Application Transactions Using Microservices \u2013 Part I\" \/>\n<meta property=\"og:description\" content=\"A saga pattern is a sequence of local transactions where each transaction updates data within a single service. Check out design examples at Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-11T05:21:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-23T16:00:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/saga-pattern-blogbanner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1575\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"6 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\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/\"},\"author\":{\"name\":\"Denis Rosa, Developer Advocate, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/fe3c5273e805e72a5294611a48f62257\"},\"headline\":\"Saga Pattern | Application Transactions Using Microservices \u2013 Part I\",\"datePublished\":\"2018-01-11T05:21:37+00:00\",\"dateModified\":\"2023-06-23T16:00:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/\"},\"wordCount\":998,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/01\\\/saga-pattern-blogbanner.jpg\",\"articleSection\":[\"Application Design\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/\",\"name\":\"Saga Pattern: Microservices Design Examples | Couchbase\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/01\\\/saga-pattern-blogbanner.jpg\",\"datePublished\":\"2018-01-11T05:21:37+00:00\",\"dateModified\":\"2023-06-23T16:00:33+00:00\",\"description\":\"A saga pattern is a sequence of local transactions where each transaction updates data within a single service. Check out design examples at Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/01\\\/saga-pattern-blogbanner.jpg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2018\\\/01\\\/saga-pattern-blogbanner.jpg\",\"width\":1575,\"height\":628,\"caption\":\"A developer holding a smartphone and a credit card checks the saga pattern on visible on the device.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/saga-pattern-implement-business-transactions-using-microservices-part\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Saga Pattern | Application Transactions Using Microservices \u2013 Part I\"}]},{\"@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:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=gbe0716f6199cfb09417c92cf7a8fa8d6\",\"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: Microservices Design Examples | Couchbase","description":"Un patr\u00f3n de saga es una secuencia de transacciones locales en la que cada transacci\u00f3n actualiza datos dentro de un \u00fanico servicio. Consulte ejemplos de dise\u00f1o en Couchbase.","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\/","og_locale":"es_MX","og_type":"article","og_title":"Saga Pattern | Application Transactions Using Microservices \u2013 Part I","og_description":"A saga pattern is a sequence of local transactions where each transaction updates data within a single service. Check out design examples at Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/saga-pattern-implement-business-transactions-using-microservices-part\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-01-11T05:21:37+00:00","article_modified_time":"2023-06-23T16:00:33+00:00","og_image":[{"width":1575,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/01\/saga-pattern-blogbanner.jpg","type":"image\/jpeg"}],"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":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/"},"author":{"name":"Denis Rosa, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/fe3c5273e805e72a5294611a48f62257"},"headline":"Saga Pattern | Application Transactions Using Microservices \u2013 Part I","datePublished":"2018-01-11T05:21:37+00:00","dateModified":"2023-06-23T16:00:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/"},"wordCount":998,"commentCount":2,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-blogbanner.jpg","articleSection":["Application Design"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/","url":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/","name":"Saga Pattern: Microservices Design Examples | Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-blogbanner.jpg","datePublished":"2018-01-11T05:21:37+00:00","dateModified":"2023-06-23T16:00:33+00:00","description":"Un patr\u00f3n de saga es una secuencia de transacciones locales en la que cada transacci\u00f3n actualiza datos dentro de un \u00fanico servicio. Consulte ejemplos de dise\u00f1o en Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-blogbanner.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/saga-pattern-blogbanner.jpg","width":1575,"height":628,"caption":"A developer holding a smartphone and a credit card checks the saga pattern on visible on the device."},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/saga-pattern-implement-business-transactions-using-microservices-part\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Saga Pattern | Application Transactions Using Microservices \u2013 Part I"}]},{"@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:\/\/secure.gravatar.com\/avatar\/f8d1f5c13115122cab89d0f229b904480bfe20d3dfbb093fe9734cda5235d419?s=96&d=mm&r=gbe0716f6199cfb09417c92cf7a8fa8d6","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\/"}]}},"acf":[],"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","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4424","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=4424"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4424\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/9925"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4424"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}