gpt4 book ai didi

java - Hazelcast 分区计数和线程并发

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:55 25 4
gpt4 key购买 nike

Master Hazelcast 电子书的“17.4.1. Partition-aware Operations”下,它指出:

To execute partition-aware operations, an array of operation threads is created.

A single operation thread executes operations for multiple partitions;

Each partition belongs to only 1 operation thread.

假设我在一个 17 节点集群上有默认数量的 271 个分区,每个分区有 16 个分区线程。在集群中分布分区,这意味着所有分区都将有一个线程与之关联,而每个线程将只有 1 个分区(对我来说这似乎是最佳情况)。

忽略备份和近缓存,当我创建一个 IMap 实例时,这是否意味着我只能在集群中的每个映射分区上执行 1 个并发的放置/获取操作?更进一步,如果我附加一个 MapStore,这是否意味着我只能对我的后端数据库运行 271 个并发操作,因为没有办法制作异步 MapStore?

我提出这个问题的原因是我有一个高度并发的 Web 应用程序,并且我最近将数据存储切换为在它前面使用 Hazelcast IMap 运行。该应用程序接受数以千计的并发连接,几乎每个请求都至少执行一次分布式 map 的获取操作。我看到了很多这样的错误:

com.hazelcast.core.OperationTimeoutException:20000 毫秒无响应。中止调用!调用{serviceName='hz:impl:mapService', op=com.hazelcast.map.impl.operation.GetOperation{identityHash=1003806362, serviceName='hz:impl:mapService', partitionId=244, replicaIndex=0, callId= 55212219,invocationTime=1462913274676(UTC 2016 年 5 月 10 日星期二 20:47:54),waitTimeout=-1,callTimeout=10000,name=...,name=...},partitionId=244,replicaIndex=0,tryCount= 250, tryPauseMillis=500, invokeCount=1, callTimeout=10000, target=Address[10.0.2.221]:5701, backupsExpected=0, backupsCompleted=0, 连接=连接[/10.0.2.219:5701 ->/10.0.2.221: 14565], endpoint=Address[10.0.2.221]:5701, alive=true, type=MEMBER} 没有收到回复!备份预期:0 备份完成:0

这会不会仅仅是因为 MapStore 在尝试从数据库中获取数据时阻塞了分区线程?我还应该注意到,虽然它说 No response for 20000 ms,但 20s 还没有过去。

我在 Java 8 上运行 Hazelcast 3.6.2。

最佳答案

gnoring backups and near-caches, when I create an IMap instance, does this mean I can only ever have 1 concurrent put/get operation executing on every map partition across the cluster?

正确。因此可能是映射 a 和映射 b 的分区 25 正忙于处理映射 b 的操作,因此映射 a 的操作需要等待。

Going further, if I attach a MapStore, does this mean I can only ever have 271 concurrent operations running against my backend database, since there is no way of making async MapStores?

对于通过 mapstore 的写入 --> 是的。但我不太熟悉后写(异步)映射存储线程模型。

Could this simply be caused by the MapStore blocking the partition thread while it's trying to fetch from the database? I should also note that while it says No response for 20000 ms, 20s has not elapsed.

这很可能是原因。

关于java - Hazelcast 分区计数和线程并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37152320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com