0

我们在 Java servlet 容器中运行的 Web 后端中使用 Hazelcast (2.3) 在集群中分发数据。Hazelcast 地图使用 MapStore 接口保存在 MySQL 数据库中。现在,我们正在使用 Java 本地客户端接口,我想知道“本地”客户端和嵌入式版本在性能方面有什么区别。

  1. “本机”客户端可能连接到任何集群节点并且针对每个请求再次做出此决定是否正确?

  2. 当使用嵌入式版本时,避免在本机客户端中通过 TCP 套接字发送所有请求和响应的开销是否正确?

  3. 是否可以得出嵌入式版本通常比“本机”客户端更快的结论?

  4. 如果是“本地”客户端:MapStore 实现是 Hazelcast 服务器的一部分(作为运行时的类)是否正确?还是它是“本机”客户端的一部分,以便所有必须持久化的数据首先通过 TCP 套接字发送?

4

1 回答 1

3
  1. 您为本地客户端提供一组节点以进行连接。一旦它连接了一个,它将使用这个节点与集群进行通信,直到它死亡。当它死亡时,客户端将连接到其他节点以继续通信。

  2. 对于本机客户端,有两跳,一跳从客户端到节点,一跳从节点到目标节点。(目标节点是目标数据所在的节点)对于嵌入式客户端,只有单跳,因为它已经知道所需数据的位置(目标节点)

  3. 一般是的,但请参阅:(来自hazelcast 文档

LiteMember 是集群的成员,它与集群中的每个成员都有套接字连接,并且它知道数据在哪里,因此它可以更快地获取数据。但是 LiteMember 有集群开销,即使在同一个 RAC 上,它也必须在同一个数据中心。但是,本机客户端不是成员,并且依赖于集群成员之一。本机客户端可以位于 LAN 或 WAN 中的任何位置。它的扩展性更好,开销也更少。因此,如果您的客户端少于 Hazelcast 节点,则可以选择 LiteMember;否则一定要试试 Native Client。作为经验法则:首先尝试 Native 客户端,如果它对您来说性能不够好,那么请考虑 LiteMember。

4- Store operations are executed in hazelcast server. The object sent from client is persisted to centralized datastore by the target node which also stores the object in its memory.

于 2012-12-19T08:06:16.283 回答