我虽然没有在实践中使用过Finagle或Akka,但我一直在阅读与它们相关的内容。
虽然Finagle是一个RPC系统,而Akka是一个用于高并发应用程序的工具包,但为什么很多人将它们比较为两个不能一起使用的可能解决方案?我做的所有搜索都建议使用其中之一,没有人建议同时使用它们。
例如,Finagle有一种非常有趣的通过thrift和其IDL定义端点的方式。通过这个IDL,我们可以定义一个自定义的端点,并且通过scooge或任何代码生成工具,就可以轻松地拥有一个服务。还可以创建一个连接到该服务的客户端,自动解决许多常见客户端问题(重新连接、超时、重试、负载平衡、连接池等)。
相反,Akka解决了许多并发问题,并且它能够非常好地扩展而不需要手动控制线程。
总之,为什么不同时使用它们呢?:
- Finagle + Thrift(以及其IDL):它可以简化服务的设计和开发,以及部署(包括易于扩展)。
- Akka:通过其Actor系统使用所有服务器性能,并且如果更改服务器属性(例如,如果它部署在EC2上并将节点从m1.small转换为m1.large),它可以非常好地扩展。
你认为呢?
注意:假设已解决映射Futures和Promises之间的问题,以及FuturePools和ExecutionContexts之间的不匹配。模式是将Finagle转换为使用Futures的Scala方式。