Realicé una gran cantidad de codificación de autoaprendizaje, obtuve algo de experiencia con modelos de programación paralela: actores, memoria transaccional de software, flujo de datos.
Cuando trato de aplicar estas arquitecturas a la vida real, en aplicaciones web de alta carga, cualquier modelo no admite durabilidad y persistencia para los datos. Las tareas de la vida real requieren guardar datos al final. Esto significa que aún tengo que usar DB y capturar sincronizaciones de DB, posibles cuellos de botella de escalabilidad, etc.
¿Alguien conoce un buen ejemplo de arquitectura (src o texto o diagrama o planos) que use Akka Actors o Software Transaction Memory e implemente la persistencia al final?
Cualquier buen ejemplo / idea para memoria transaccional, actores, flujo de datos, espacios de tupla en aplicaciones de la vida real es bienvenido.
fuente
Respuestas:
Los modelos de actor / STM y la persistencia de la base de datos son algo ortogonales: puede tener fácilmente uno sin el otro, y creo que existe el peligro de confundirlos.
Lograr durabilidad (la D en ACID) es extremadamente complejo en un entorno transaccional, y particularmente en un entorno distribuido donde hay actores / procesos que se coordinan mediante el paso de mensajes. Te metes en problemas espinosos como el problema de los generales bizantinos .
Como resultado, creo que siempre habrá algún grado de adaptación de la solución para cumplir con sus requisitos específicos de persistencia. No hay soluciones de "talla única".
Vale la pena mirar (perspectiva Clojure):
fuente
El modelo de actor funciona bastante bien con la segregación de responsabilidad de comando / consulta (CQRS) , ya que los mensajes a los actores que realizan la manipulación de datos se pueden usar como equivalentes de "comando".
Entonces, ¿qué tiene que ver eso con su problema de persistencia? Bueno, trabajas en la memoria y escribes todos los comandos en un registro, que es una operación más barata porque es solo para agregar, y vuelcas instantáneas de vez en cuando para reducir el tiempo requerido para volver a cargar la base de datos si es necesario (además de que es posible recuperar el espacio utilizado por el registro).
Esta es una técnica bastante común. Mire a VoltDB y Redis para obtener más inspiración.
fuente
Rich Hickey tiene una nueva creación llamada Datomic. Es un nuevo enfoque para la persistencia, el desacoplamiento del almacenamiento, la gestión de transacciones y las consultas. Se basa en registros inmutables y utiliza un lenguaje de consulta llamado Datalog (comparte características con Prolog). El objetivo clave era permitir una distribución fácil y la implementación en la nube. Se basa en el almacenamiento como un servicio (por lo tanto, no es una implementación concreta, sino que se acopla libremente a través de una API over-the-wire).
En Clojure tenemos STM que nos da ACI, falta la D. Datomic agrega la D.
fuente