5

我想知道建议使用哪种模式与表示已处理消息数量的计数器一起使用应该是无状态的应用程序。

例如,在应用程序部署在多个服务器上的架构中,数据库用于存储持久信息(会话等)。但是,此类信息不会像消息计数器那样暴露于并发更新。在单实例应用程序中,我们可以使用单例,但这里不是这种情况。

您对实施这样的计数器有何建议?使用计数器是一个糟糕的设计吗?

4

3 回答 3

1

我可能不会直接回答你的问题,但我可以给你一个可用的计数器服务的参考,它是多线程的、多节点的、可扩展的,同时考虑了可用性场景。检查 jgroups 计数器服务http://jgroups.org/manual/index.html#CounterService

这可以指导您解决分布式计数器场景中的一组问题,也可以作为实时工作参考。

于 2015-07-02T09:45:03.183 回答
0

我不认为有一些模式可以完成这个非常抽象的任务。还:

在单实例应用程序中,我们可以使用单例,但这里不是这种情况。

使用单例并不能保证多线程系统中的数据安全。您需要一些同步原语。非常简单的是临界区。

如果您的所有应用程序都应该更新一些计数器,那么将这个......“计数器”管理重构为微服务并使用微服务中的关键部分来更新资源看起来是合理的。在这种情况下,在每个给定时刻,您都保证只有一个线程更新计数器。

于 2015-07-01T14:58:38.103 回答
0

使用数据库的可能解决方案:

  • 例如,在 Oracle 中创建一个将更新计数器并返回新值 (UPDATE ... RETURNING ... INTO) 的存储过程
  • 例如在 mongodb 中的 $inc

计数器将存储在数据库中,并将在将连接到该数据库的每个应用程序实例上可用

于 2015-12-11T22:52:22.023 回答