考虑一下问题:
我有许多Tomcat节点,其中Web应用程序提供一些无状态内容.例如,1000个第一次请求申请必须用’a’回答,对于下一个10000用’b’回答,其余用’c’回答.
我首先考虑了消息:应用程序从某个存储中获取总服务数 – >如果它小于n,则提供内容’a’ – >一旦提供了内容,应用程序就会发送一条消息 – >消息被消耗 – >总服务计数在某些存储上递增 – > …但是在这种情况下,由于消息服务事件和存储器上的计数器增量之间的轻微(或大量的窥视加载时间)延迟,因此超调的可能性非常大.
然后我考虑设置memcached-session-manager来将计数器存储在共享会话中.但对于我的简单案例,这看起来很重要.
有人可以建议是否有多种直接的方式可以让多个JVM实例相互通信(适用于我的情况)?
最佳答案 如果它绝对必须是正确的,你不想要延迟比我认为Redis或Hazlecast是你最好的选择.
Particularly Redis as it has atomic count like operations.虽然理论上你可以用memcache做同样的事情,但Redis是为这个确切的用例(统计计数器)而设计的.
您也可以使用像H2这样的内存数据库,或者只是将Postgres表设置为unlogged或者适用于您的RDBMS的任何内容,以便在伪内存表中保持不那么安全.关于RDBMS的令人讨厌的事情是,所有RDBMS都不一致地支持upserting aka MERGE.