Skip to content

概述

Ignite 3 的客户端通过标准套接字连接接入集群。与 Ignite 2 不同,Ignite 3 中没有单独的胖和瘦客户端,只有客户端。

客户端不会成为集群拓扑的一部分,不保存任何数据,也不会用来承载计算任务。

1.客户端连接器配置

客户端连接参数由客户端连接器配置控制。Ignite 默认接受端口 10800 上的客户端连接,可以随时使用命令行工具更改节点的配置。

在 Ignite 3 中,配置文件可以使用 HOCONJSON 格式。配置文件有一个名为ignite根节点,所有配置部分都是该节点的子节点、孙节点等,配置如下所示:

json
{
  "ignite" : {
    "clientConnector" : {
      "connectTimeout" : 5000,
      "idleTimeout" : 0,
      "listenAddresses" : "",
      "metricsEnabled" : false,
      "port" : 10800,
      "sendServerExceptionStackTraceToClient" : false,
      "ssl" : {
        "ciphers" : "",
        "clientAuth" : "none",
        "enabled" : false,
          "keyStore" : {
            "password" : "********",
            "path" : "",
            "type" : "PKCS12"
        },
        "trustStore" : {
          "password" : "********",
          "path" : "",
          "type" : "PKCS12"
        }
      }
    }
  }
}
属性默认值描述可修改需要重启可选值
connectTimeout5000连接超时(毫秒)。0 - inf
idleTimeout0在断开连接之前,客户端可以处于空闲状态的时间(毫秒),默认没有限制(0)。0-2147483647
listenAddresses""要监听的地址(IP 或主机名)。如果为空,则监听所有地址。合法的地址或主机名
metricsEnabledfalse是否收集客户端指标。true, false
port10800客户端连接器监听的端口。1024-65535
sendServerExceptionStackTraceToClientfalse默认仅将异常消息和代码发送回客户端。如果为true则会包含完整的异常堆栈,然后作为客户端异常的一部分。不建议用于生产,堆栈溢出是一个安全漏洞true, false
ssl.ciphers""要启用的密码列表,逗号分隔,如果为空则自动选择密码列表。TLS_AES_256_GCM_SHA384等标准密码ID
ssl.clientAuthnone是否启用SSL客户端认证以及是否为强制性身份认证。none, optional, require
ssl.enabledfalse是否启用SSL。true, false
ssl.keyStore.password""SSL密钥库密码。合法的密码
ssl.keyStore.pathSSL密钥库路径。合法的路径
ssl.keyStore.typePKCS12SSL密钥库类型。PKCS12, JKS
ssl.trustStore.password""SSL信任库密码。合法的密码
ssl.trustStore.pathSSL信任库路径。合法的路径
ssl.trustStore.typePKCS12SSL信任库类型。PKCS12, JKS

下面是修改参数的方法:

node config update clientConnector.port=10469

2.客户端连接

当 Ignite 客户端启动时(调用build()buildAsync()方法时),它会尝试按指定顺序逐个接入所有已配置的端点,并在建立一个连接后立即返回。如果客户端无法连接到任何节点,则初始化失败。

客户端接入集群后,它会继续尝试在后台接入所有其他的指定节点,并在与主节点的连接中断时将它们用作故障转移。客户端不直接接入其配置中未指定的节点,而是通过集群拓扑感知它们,并且可以发送间接写入或读取请求。

非活动客户端会定期向集群发送心跳消息,以确认它仍然处于在线状态并正在运行。如果在idleTimeout配置中指定的期间内未收到心跳消息,则客户端将断开连接。心跳间隔默认等于空闲超时的一半或 30 秒,以较短者为准。

3.分区感知

由于集群中的数据在节点之间分布,因此客户端可以通过直接向持有数据的节点发送更新和读取请求来提高吞吐量。 对于每个需要更新的键,客户端将获取持有其主分区的节点的名称,然后直接向此节点发送更新。如果存在与此节点的活动连接,则更新将直接发送到该节点。否则更新将发送到列表中的随机节点,然后重定向到目标节点。因此,建议在客户端配置中列出所有集群节点,以减少不必要的网络负载。

提示

分区感知假定集群是稳定的。客户端在后台接收有关集群数据分布的信息,在发送更新时,该信息可能已过时。如果是,节点会自动将请求重定向到正确的节点,直到客户端上的数据更新。

4.客户端特性

下表概述了每个客户端支持的功能。

特性Java.NETC++
二进制记录视图
二进制键-值视图
记录视图
键-值视图
SQL API
分区感知
事务
计算 API
重试策略
心跳
数据流

18624049226