理论教育 Scala语言基础:Akka事务实战

Scala语言基础:Akka事务实战

时间:2023-11-24 理论教育 版权反馈
【摘要】:为此,Akka中引入了事务的概念。事务的这些特点被称为事务的ACID特性,事务的目的是保持共享状态的一致性。Akka中的Agent和Actor为了保证共享状态的一致性也需要实现事务,为了实现这样的功能,Akka使用了STM软件事务内存的概念。下面就来看看Akka中的STM。

Scala语言基础:Akka事务实战

虽然Akka中的Actor基于“Let It Crash”的原理和supervisor监管的模型,并且基于这种原理和监管模型的Actor可以很好地工作,但是当一个Actor要处理一个请求的几个任务的时候,这种“Let It Crash”的模型很可能会使结果偏离初衷。例如,从一个账户转钱到另外一个账户,为了完成这个任务,要做两个动作。首先要从一个账户取出金额,然后存入另外一个账户,但是如果在存入账户正确完成之前,发生了不可预知的异常且允许“Let It Crash”,那么这样做就会使一个账户丢失,而另一个账户却没有存入钱。为了解决这个问题必须确保这两个动作要么全部成功,要么全部失败。为此,Akka中引入了事务(transac⁃tion)的概念。在一个transaction中,可以包含多个action,并且从整体来看,它们一起的表现就跟一个action的表现一样,要么全部成功,要么全部失败,这就是transaction的概念。一个transaction必须具有以下特点:

原子性:所有的action要么全部成功,要么全部失败。一个transaction中的所有action

在整体上的表现就跟一个action的表现一样。

●一致性:在transaction结束后,系统必须保持一致性的状态。例如银行转款,在转款

前两个账户的总金额应该和转款后两个账户的总金额一样。(www.daowen.com)

●隔离性:在一个transaction成功或失败之前,产生的中间数据对于系统中的其他

transaction不可见。

●持久性:transaction操作的结果持久化保存。

事务的这些特点被称为事务的ACID特性,事务的目的是保持共享状态的一致性。Akka中的Agent和Actor为了保证共享状态的一致性也需要实现事务,为了实现这样的功能,Akka使用了STM(Software Transactional Memory)软件事务内存的概念。STM实现了ACID中的原子性、一致性和隔离性三个特性,并且提供了比传统锁机制更好的性能。下面就来看看Akka中的STM。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈