美文网首页
Akka框架之软件事务内存 (STM)

Akka框架之软件事务内存 (STM)

作者: 夏与清风 | 来源:发表于2019-07-09 14:51 被阅读0次

软件事务内存:它和数据库中的事务类似,具有隔离性、原子性和一致性。区别点是内存事务不具备持久性,因为内存数据不会保存下来。

Actors模型是基于独立程序的前提下,可以隔离更新状态,状态更新只能通过消息传递实现。Actors内部保持住状态,异步消息传递意味着没有可以提供给组件一致性的调用过程。对于交易系统,如银行账户存款和提款的操作过程是需要是原子的,这可能需要跨两个账户调用过程是一个原子过程,软件事务内存(STM)提供了答案。

在很多场景下,一个工作可能由多个Actor协助完成,在这种协助事务中,如果一个Actor处理失败,根据事务的原子性,其他Actor锁进行的操作必须要回滚,要么全部成功,要么全部失败,进而保持数据的正确性。

STM提供了并发访问共享内存的管理控制机制。 STM利用两个概念 - 乐观和交易来管理共享的并发控制。

Akka提供一个结构协调actor之间的事务称为coordinated.coordinated,它是用来定义事务边界在交易事务开始时,coordinated.coordinate的方法被用来增加所有成员将参加同一个事务上下文。

示例:公司给员工发工资业务,公司账户扣钱,员工账户加钱。

定义公司账户CompanyActor和员工账户EmployeeActor main方法 运行结果

CompanyActor和EmployeeActor都加入到同一个协调事务Coordinated中,保证了各账户金额总是一致的,若转账操作失败时就会回滚。

注意:

\bullet scala-library的版本不要使用最新的2.13.0,否则会报异常:NoClassDefFoundError: scala/Serializable,此类并不存在,而在2.12.8版本中是存在的。

\bullet 另外akka的其他依赖包也要和lib版本保持一致,即2.12的大版本,否则又会报其他类不匹配的异常。

\bullet akka事务控制需要引入akka-transactor包。

POM相关依赖包如下:

pom依赖包

--参考文献《实战Java高并发程序设计》

相关文章

  • Akka框架之软件事务内存 (STM)

    软件事务内存:它和数据库中的事务类似,具有隔离性、原子性和一致性。区别点是内存事务不具备持久性,因为内存数据不会保...

  • Haskell的软件事务内存(STM)

    传统的并发变成模型通过Mutex/Conditional Variable/Semaphore的设施来控制对共享资...

  • 【akka】akka框架介绍

    一、背景 大型服务系统由于业务或功能的复杂性,为了维护和升级的便利,往往在架构上按对系统进行拆分,按不同功能拆分成...

  • 软件事务内存

    在解决并发问题方面,数据库可谓成绩斐然,它的事务机制非常简单易用,能甩Java里面的锁,原子类十条街。 很多编程软...

  • Akka框架之消息路由

    Akka提供了灵活的消息发送机制,当使用一组Actor来提供服务时,组中所有的Actor都是平等的,你可以选择任意...

  • Akka框架之监督策略

    如果一个Actor在执行过程中出现某些未处理的异常,系统如何处理? 在Akka框架内,父Actor可以对子Acto...

  • Spark通信框架Spark Network Common

    Spark Network 模块分析 为什么用Netty通信框架代替Akka 一直以来,基于Akka实现的RPC通...

  • PIBOT下位机开发

    1. 概述 2. 软件框架 3. 下位机开发环境3.1 环境搭建ArduinoSTM32F1STM32F43.2 ...

  • Akka框架简介

    Akka是JAVA虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言编写,同时提供...

  • FreeRTOS堆分配大小对任务数的影响

    FreeRTOS堆分配(内存)如果不够大,可能引起FreeRTOS运行异常。 对于STM32芯片, 如果使用STM...

网友评论

      本文标题:Akka框架之软件事务内存 (STM)

      本文链接:https://www.haomeiwen.com/subject/rxynhctx.html