【问题标题】:Shared queues VS Actor Model共享队列 VS Actor 模型
【发布时间】:2016-01-13 16:01:08
【问题描述】:

在我的 J2EE Web 应用程序中,我必须将每个 Web API 调用的计数发送到一个隔离线程以计算调用次数。可能性包括:

a) 使用原子长。如果我在一分钟内有数百万个电话,我认为这会引起争用。因为,所有线程都会尝试更新单个变量。

b) 使用共享队列。每个请求处理线程都会插入到队列中,并且专用的计数器线程将从该队列中出列并增加计数。

c) 使用 actor 模型,比如使用 Akka 库。向actor发送一条异步消息,这会将其添加到计数中。

我的问题是方法 (b) 与 (c) 相比如何。优缺点是什么,在低层有什么不同?

【问题讨论】:

  • 你一分钟会有几百万个电话?
  • 目前有 200 万次通话。接下来,可能需要存储除计数之外的更多指标。所以,设计应该是可扩展的。
  • 如果只是计数,请使用 LongAdder。每分钟数百万并不多。
  • 另外,在网络应用程序的性能非常关键的情况下,我可以有很多这样的计数?这不会因为太多的共享变量和线程间的争用而使应用程序混乱吗?

标签: java multithreading asynchronous concurrency actor-model


【解决方案1】:

在您的情况下,我认为 Actor 模型应该是更好的选择。 Akka 的优点-

  • 使用 Akka 的 Actor 模型将负责线程管理,并且易于实现
  • 此外,将来如果您想为不同类型的请求实现计数器,您只需为此添加一个新的 Actor。

有一个类似的问题- When to use actors instead of messaging solutions such as WebSphere MQ or Tibco Rendezvous?

【讨论】:

    猜你喜欢
    • 2019-04-20
    • 1970-01-01
    • 2021-06-28
    • 2016-07-04
    • 2013-04-22
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多