HazelCast map.get()去哪了?和可伸缩性问题

joh*_*sam 1 scalability hazelcast

根据这个,"每个map.get(k)将是一个远程操作"但遥控器在哪里?例如,我有一个节点用key -k写入IMap.另外50个节点使用map.get(k)从IMap读取.当50个节点调用map.get(k)时会发生什么.每次调用是否都来自执行写操作的节点?如果是这样,这个"远程"节点将在响应这50个呼叫时创建多少个IMap副本?它是多线程的吗?这是IMap单身人士吗?或者每个线程都会创建这样的IMap的深层副本?

小智 5

但遥控器在哪里?

答案在您提供的文档链接的前一句中:"想象一下,您正在多次读取密钥k,并且k由集群中的另一个成员拥有." 每个密钥都经过哈希处理并映射到一个分区,如http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#sharding-in-hazelcast和"数据分区"部分所述.如下.拥有该分区的集群成员是密钥的所有者(或主副本).对该密钥的每次读写都将由该特定成员上的相同线程执行(除非您的配置允许从备份读取).

当50个节点调用map.get(k)时会发生什么.每次调用是否都来自执行写操作的节点?

是的,它始终是对该密钥执行操作的密钥所有者.

如果是这样,这个"远程"节点将在响应这50个呼叫时创建多少个IMap副本?

该成员只有一个IMap实例,没有副本.

它是多线程的吗?

不,涉及相同密钥的所有映射操作k都将在同一成员的同一分区线程上执行,该成员是该密钥的主要副本.您可以在http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#operation-threading中阅读有关线程操作模型的更多信息.