【发布时间】:2015-05-27 14:55:55
【问题描述】:
我已经测试了一个基于 Akka 的应用程序一个多月了。但是,如果我反思一下,我有以下结论:
- 单独的 Akka Actor 可以实现大量并发。我已经达到了超过 100,000 条消息/秒。这很好,只是消息传递。
- 现在,如果一端有用于连接的 netty 层,或者您最终让 akka actor 最终执行 DB 调用、REST 调用、写入文件,那么整个系统就不再有意义了。演员的邮箱已满,他们的吞吐量(这里是每秒接收消息的能力)变慢。
- 从 QA 的角度来看,这就像有一个巨大的管道,您可以在其中强行抽取大量水并且它可以处理。但是,如果输入软管不好,或者端点无法承受压力,那么这个巨大的管道就没有用了。
我需要以下问题的答案,以便在系统中提出建议或验证:
- 像 DB 调用、REST 调用这样的阻塞调用应该由参与者处理吗?还是它们只适用于消息传递?
- 可以这样说,假设您需要将数百万个 android/ios 设备持久连接到您的 akka 系统。代替套接字(如此不可靠)等,远程参与者可以实现为持久连接吗?
- 可以在演员的
handleMessage()中进行任何类型的计算吗?比如数据库调用等。
我会要求编辑通过这篇文章。我不能单独问所有这些。
【问题讨论】:
-
我认为你应该认真看看 netflix 的 hystrix 库。您不必使用该库,但可以使用它的技术。但是我相信你可以将这个库与 akka 结合起来,但考虑到两者都想管理线程,它可能会很混乱。
标签: java scala concurrency akka distributed-computing