Akka TCP/Akka HTTP/Akka Remote 对比

Akka TCP/Akka HTTP/Akka Remote 对比

马草原 415 2021-08-20

Akka TCP/Akka HTTP/Akka Remote 对比

Akka HTTP

Akka Http是基于Akka与Akka stream实现的Http协议栈,可以看做是提供Http服务端与Http客户端的工具库。

  • Http服务器本身就很多,项目自己用的就是tomcat,提供了http接口,再加入akka http就多此一举。性能主要是服务端决定的,Akka Http Client也没有太大左右
  • Akka Http需要加入额外的依赖,它属于akka的独立模块与akka的关系不大,版本发布也是独立的。
  • 依赖多
  • 性能,基于Http
  • 对本项目要改动东西多

Akka TCP

Akka Tcp是Akka IO的功能,在Akka核心包中有提供,主要是封装了部分底层IO的操作,让Akka的TcpManager来帮助我们处理Tcp相关通信。在建立连接的时候,TcpManager创建一个connection actor作为tcp客户端与服务端的桥梁,tcp客户端与服务端只需要向connection actor发送消息即可进行通信。

image-1692779240869

Akka TCP:https://www.mcaoyuan.com/archives/akka-zhi-tcp

  • 需要自己定义通信格式
  • 需要自己处理读写拥塞控制
  • 需要监听新的Tcp端口,目前通信性能稳定性尚未验证
  • 依赖少
  • 性能高
  • 实现复杂,容易出错

Akka集群是基于TCP协议的,而且提供了很多额外的功能,因此使用Akka集群,也是间接的采用Akka TCP

Akka Remote

官方建议使用Akka Cluster而不是直接使用Akka Remote,因为在使用Akka Cluster是基于Akka Remote的,并且做了很多封装,提供了额外的功能。Akka天生就是用于构建分布式高性能的框架。(Build powerful reactive, concurrent, and distributed applications more easily)。借助Akka Cluster:

Akka 集群:https://www.mcaoyuan.com/archives/akka-remote

  • 集群节点自动加入,自动发现
  • 集群进行metric监控
  • 集群节点分配role,不同的role做不同的功能。上层节点用于业务处理,下层节点进行通信。
  • 集群间相互调用简单,操作另外一个节点的actor与操作本地actor没有差别。

image-1692779392740

对比

Akka HTTP Akka TCP Akka Remote
HTTP TCP TCP
比较稳定 需要自己开发协议,出错可能性大 系统自带功能,比较稳定
依赖库多 依赖少,代码量多 依赖较少,代码量少