我们目前有一个5节点的infinispan服务器集群在生产中运行,它每秒最多可处理2 000个请求。我们的愿望是使缓存比例线性增加10倍或更多。在我们的压力测试中,我们的应用服务器在计划的未来负载下30分钟后开始从infinspan获取SocketTimeoutExceptions。 我们最活跃的缓存以分布式模式运行,拥有2个所有者和20个细分。其中一个瓶颈似乎是我们的pub / sub系统使用远程事件监听器。基本上每当修改缓存条目时,我们的远程事件侦听器都会收到通知,然后他们会响应长轮询请求。远程事件侦听器在tomcat上的Java servlet中运行。
大约一个月前,我们遇到了HERE发现的问题 并且在使用增加的事件队列大小(现在为1百万)修补infinispan服务器之后,我们能够扩展到相当远的距离,而不是我们想要的那么多。
就服务器上的实际错误而言,我们看到的是: ERROR [org.infinispan.interceptors.InvocationContextInterceptor](pool-6-thread-1)ISPN000136:执行命令RemoveExpiredCommand时出错,写入密钥[[B0x033e183537626430 .. [27]]:org.infinispan.util.concurrent.TimeoutExcepti on:ISPN000299:30秒后无法锁定密钥[B0x033e183537626430 .. [27]和请求者CommandUUID {address = XYZ,id = 851936}。锁由CommandUUID {address = XYZ,id = 851819}
保存以下是缓存配置:
<subsystem xmlns="urn:infinispan:server:core:8.2" default-cache-container="clustered">
<cache-container name="clustered" default-cache="default" statistics="true">
<transport lock-timeout="60000" />
<distributed-cache name="default" mode="SYNC" segments="20" owners="2" remote-timeout="30000" start="EAGER">
<locking acquire-timeout="30000" concurrency-level="10000" striping="false"/>
<transaction mode="NONE"/>
<expiration lifespan="86400000" max-idle="900000" interval="60000"/>
<eviction strategy="LIRS" size="1000000"/>
</distributed-cache>
<distributed-cache name="gameStateCache" mode="SYNC" remote-timeout="30000" start="EAGER">
<locking acquire-timeout="30000" concurrency-level="10000" striping="false"/>
<expiration lifespan="86400000" max-idle="900000" interval="60000"/>
<eviction strategy="LIRS" size="1000000"/>
</distributed-cache>
</cache-container>
</subsystem>
是否有人了解远程事件监听系统的高负载问题,或者可能建议其他配置?
干杯, 布赖恩