Finagle和Akka,为什么不能一起使用?

18

我虽然没有在实践中使用过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方式。


我认为询问这样的问题更好的地方是在这里:https://groups.google.com/forum/?hl=zh-CN#!forum/finaglers - zsxwing
Gorka,感谢你提出这个问题。我对Akka和Finagle也有类似的想法。虽然我没有使用过Akka,但我使用Finagle来构建我的服务。我认为Akka(或由Spring团队发布的Reactor)可以用于处理服务内的并发问题。很高兴知道有志同道合的人。 - IceMan
1个回答

13

你说得没错,服务发现和服务实现是两个不同的问题,我能够理解你关于使用Finagle处理前者以及使用Akka处理后者的论点。原则上,你可以将它们结合在一起而不寻求未来的大一统,因为你只需要将服务的回复作为消息发送给请求Actor即可。也就是说,你需要在Twitter futures之上添加自己的“pipeTo”模式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接