Skip to the content.

Durable Execution: A revolutionary abstraction for building resilient applications


Autor

Maxim Fateev CTO/Cofounder @ Temporal.io

Linkedin: https://www.linkedin.com/in/fateev


Introducción

Representación del sistema solar, trajectoria de los planetas:

500x400


Abstracciones

Nosotros trabajamos con abstracciones, pero hay niveles de abstracción. El problema aparece cuando se modelas las abstracciones equivocadas o de manera equivocada.

800x400


Complejidad de los sistemas

700x500


Propiedad de un sistema monolito

700x500


Concepto de Transaccionalidad

700x500


Consistencia Eventual

Un sistema monolítico es transaccional y las transacciones no permiten "fallas parciales".

Pero cuando el monolito es muy grande, la estrategia es separarlo en microservicios. Y cuando los pasos de un determinado proceso está separado y toma más tiempo completarlo, las transacciones no sirven. Entonces apare: Event-Driven.


Fuente: https://pivovarit.github.io/talks/embracing-microservices/


Event-Driven Architecture al rescate

Ref. https://en.wikipedia.org/wiki/Event-driven_architecture


Abstracciones y sus complejidades


Abstracciones y sus complejidades

Eventos => son variables globales en sistemas distribuidos. ATENCION.



Durable Execution

=> ejecución que no crashea por causas de fallas a nivel sistema.

La principal idea es: recuperar el estado de una transacción distribuida, pese a la falla de una parte o todo el sistema.


Caracteristicas:

  1. Estado totalmente persistente.
  2. Duración ilimitada
  3. Duración ilimiatda de llamadas a API
  4. Logica de Retry
  5. Comunicación asincronica
  6. Times Durables.


Demo: Implementación


Armar ambiente dev

Paso #01. Instalar el CLI de temporal.io para comenzar a desarrollar:

Link: [Set up a local development environment for Temporal and Java Learn Temporal](https://learn.temporal.io/getting_started/java/dev_environment/)

Luego de bajar el CLI, se puede ejecutar:


$ temporal server start-dev
CLI 1.0.0 (Server 1.24.2, UI 2.28.0)

Server:  localhost:7233
UI:      http://localhost:8233
Metrics: http://localhost:63504/metrics


Servidor local en localhost

Link: Workflows default


Proyecto de ejemplo: money-transfer

 git clone https://github.com/temporalio/money-transfer-project-java

Básicamente la aplicación es lo siguiente:


1) Iniciar: TransferApp 2) Ver en la UI el workflow en progreso 3) Iniciar un worker: MoneyTransferWorker (hace el Withdraw y el Deposit ) 4)


Video Tutorial


Temporal.io Durable Execution platform

Web: https://temporal.io Github original: https://github.com/temporalio/money-transfer-project-java