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发送消息即可进行通信。
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没有差别。
对比
Akka HTTP | Akka TCP | Akka Remote |
---|---|---|
HTTP | TCP | TCP |
比较稳定 | 需要自己开发协议,出错可能性大 | 系统自带功能,比较稳定 |
依赖库多 | 依赖少,代码量多 | 依赖较少,代码量少 |