Akka框架简单介绍

Akka是Java虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka使用Scala语言编写同时提供了Scala和Java的开发接口,Akka处理并发的方法基于Actor模型,Actor之间通信的唯一机制就是消息传递。

Akka特点:

  • 对并发模型进行了更高的抽象
  • 异步、非阻、高性能的事件驱动编程模型
  • 轻量级事件处理(1GB内存可以容纳百万级别个Actor)
  • 提供了一种称为Actor的并发模型,粒度比线程更小,可以在系统中启用大量的Actor
  • 提供了一套容错机制,允许在Actor出现异常时进行一些恢复或重置操作
  • 既可以在单机上构建高并发程序,也可以在网络中构建分布式程序并提供位置透明的Actor定位服务

消息投递

Akka应用是由消息驱动的,消息是除Actor之外最重要的核心组件,在Actor之间传递的消息应该满足不变性即不变模式,可变的消息无法高效的在并发环境中使用。在Akka中推荐使用不可变对象,代码中使用final声明在消息构建完成后就不能在发生改变了。

消息投递策略

  • 至多一次投递

此策略中每一条消息最多会被投递一次,可能会偶尔出现投递失败的情况从而导致消息丢失,这种策略是高性能的。

  • 至少一次投递

此策略中每一条消息至少会被投递一次直至成功。在一些偶然情况下接收者可能会收到重复消息但是消息不会丢失,此策略需要保存消息投递的状态并不断重试。

  • 精确投递

所有消息保证被精确投递并成功接收一次既不会丢失也不会重复,这种策略成本最高且不容易实现。

关于消息的可靠性:没有必要在Akka层保证消息的可靠性,这样做成本太高且无必要。消息可靠性应该在应用的业务层进行保证,有时丢失一些消息是符合应用要求的。

消息投递的顺序性:Akka可以保证在一定程度上的投递顺序性。如Actor A1向A2顺序发送了M1、M2、M3三条消息,Actor A3向A2顺序发送了M4、M5、M6三条消息,则系统可以保证:

  • 如果M1无丢失、一定先于M2、M3被A2收到;
  • 如果M2无丢失,一定先于M3被A2收到;
  • 如果M4无丢失,一定先于M5、M6被A2收到;
  • 如果M5无丢失,一定先于M6被A2收到;
  • 对于A2来说,来自A1向A3的消息并没有顺序性保证。
    在这里插入图片描述
    另外这种消息投递规则不具备可传递性,如下图:
    在这里插入图片描述
发布了242 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44240370/article/details/103738017