1.持久化

目的:防止数据丢失无法恢复

 Akka持久化使有状态的actor能保留它的内部状态,因此我们不会因为JVM崩溃、监管者引起或集群中迁移导致数据丢失无法恢复而尴尬,Akka持久化可以帮助我们恢复actor。

2.actor如何进行恢复

  通过将保存的变化进行重放使它们可以重建其内部状态。当重放的内容庞大时会需要很多时间,因此Akka提供了快照功能将重放记录分解从而减少恢复时间。

         另外一个重点是Akka持久化也提供了“至少一次消息传递语义”的点对点通信来保证消息不丢失。

3.体系结构(Architecture)

(1) AbstractPersistentActor(持久化actor):是一种特殊的带有内部状态的Actor,既可以执行命令又能以事件来源模式来进行内部状态持久化的。若因系统崩溃、人为终结等,系统在重启后Actor通过之前持久化的信息可以恢复之前的状态。

(2) AbstractAtLeastOnceDelivery(至少一次传递):消息传递的机制,意味着每条应用了这种机制的消息潜在的存在多次投递尝试并保证 至少会成功一次。就是说这条消息可能 会重复但是不会丢失。

(3) AsyncWriteJournal(异步存储日志): 将发送给持久化Actor的消息序列异步存储到日志中。日志为每条消息维护一个不断增加的序列号。日志存储的底层实现是可插拔的。Akka的持久化扩展自带一个叫做"leveldb",向本地文件系统写入的日志插件。 ​​Akka社区​​里还有更多日志存储插件提供。

(4) Snapshot store(快照存储):对持久化Actor或持久化视图的内部状态的快照进行持久化。快照用于优化回复的时间。快照存储的底层是可插拔的。Akka持久化扩展自带一个向本地文件系统写入的“本地”快照存储插件。 ​​Akka社区​​里还有更多快照存储插件提供。

(5)  Event sourcing (事件来源):把使状态产生变化的事件按发生时间顺序持久化,而不是把当前整个状态存储起来。在恢复状态时把日志中这些事件按原来的时间顺序重演一遍回到原来的状态。