分布式缓存客户端
指某东西的用途 NCache 涵盖各种用例,从简单的键值存储到高级 SQL 搜索 和 发布/订阅。 客户端应用程序包括但不限于控制台应用程序、Windows 服务、Web 应用程序和 Web 服务。 客户端库 (SDK) 包括 .NET、Java 和 NodeJS。 此外,还提供了对Python和Scala的支持。 使用相关的 SDK,客户端应用程序可以连接一个或多个缓存。
备注
此功能也可用于 NCache Professional.
分布式缓存客户端的通信方法
Google Protobuf作为数据交换格式: 客户端通过持久 TCP 套接字与分布式缓存进行通信。 NCache 客户使用 谷歌协议缓冲区 (Protobuf)作为与缓存服务器通信的协议。 Protobuf 的使用为旧客户端版本提供了灵活性 NCache,与新的缓存服务器版本进行通信。
基于请求-响应的并行请求执行: NCache 客户端支持多线程。 这些应用程序可以向缓存发出并行请求。 NCache 在客户端-服务器通信中遵循基于RequestId的请求-响应协议,其中每个请求都被分配一个唯一的RequestId。 尽管缓存客户端和缓存服务器之间只有一个 TCP 连接,但客户端可以使用其唯一的 RequestId 向缓存服务器发送多个请求,而无需等待已发送请求的响应。 因此,每个请求都是真正独立的。 NCache 服务器还支持并行请求执行。 这种架构使应用程序能够执行从客户端到缓存服务器的多个并行操作,而无需操作相互等待,从而提供最大的性能和可扩展性。
请求流水线: 流水线 指在单个套接字 (I/O) 操作中组合并发送多个请求。 每当应用程序执行 I/O 操作时,就会发生用户到内核模式的切换,这是一个代价高昂的操作。 流水线 通过减少 I/O 操作执行相同任务的次数来避免这种成本。 流水线 成倍提高应用程序性能。 NCache 支持客户端和服务器端的流水线。
缓存拓扑感知: NCache 客户端是缓存拓扑感知的。 当缓存客户端连接到第一个缓存服务器时,它会检索缓存元数据,包括其拓扑。 客户端应如何与缓存服务器建立连接以及应如何执行客户端操作取决于缓存的底层拓扑。 例如,数据分布在不同的缓存服务器中 分区的 和 分区副本 拓扑。 因此,客户端与缓存集群中的每个服务器建立TCP连接并获取最新的数据分布图。 客户端直接对包含相关数据的分区进行读写操作。 同样,每个服务器中 已复制 拓扑包含相同的数据集。 因此,客户端仅与单个缓存服务器连接。
以无缝方式处理连接失败: NCache 客户端与缓存服务器保持持久连接。 如果此连接因网络故障而中断,则 NCache 客户端设有后台连接重建机制。 一旦客户端和服务器之间的网络连接恢复,此机制就会自动与发生故障的服务器建立连接。 所有这一切都是无缝发生的,无需客户端应用程序干预。
数据序列化: 应用程序数据在进入缓存服务器之前要经过序列化过程。 NCache 同时支持 二进制和 JSON 序列化。 您可以在配置缓存时选择任一序列化格式。 缓存客户端在连接到缓存时从缓存服务器获取序列化格式。 然后根据序列化格式序列化应用程序数据。
数据加密: 应用程序数据加密是您可以启用的可选功能。 如果 加密 配置后,客户端在应用程序数据被序列化后对其进行加密。 客户端在连接到缓存时从缓存服务器获取与加密相关的配置。
数据压缩: 压缩 如果数据真的很大,应用程序数据的数量可以帮助减少缓存大小。 数据首先被序列化,然后加密(如果启用了加密),最后在被分派到缓存之前由缓存客户端压缩。 缓存客户端在连接到缓存时从缓存服务器获取与压缩相关的配置。
与缓存连接
缓存客户端需要服务器信息才能与缓存连接。 服务器信息可以通过客户端配置文件提供(客户端.ncconf ) 或通过 缓存连接选项. 客户端遍历提供的缓存服务器列表并尝试连接服务器上运行的缓存。 如果缓存实例未在给定服务器上运行,它会移动到列表中提供的下一个服务器。 客户端连接通常经过以下步骤:
客户端首先建立一个 TCP 连接 NCache 服务结束 端口 9800.
然后客户端请求配置缓存服务器的完整列表。 这样,它就有一个更新的缓存服务器列表。
客户端然后向缓存发送初始化请求到服务器,其中包括缓存名称和安全凭证,以防万一 缓存安全已启用. 每个缓存都在一个单独的进程中运行。 如果你有 .NET Framework 基于安装 NCache 在服务器端,则服务将客户端连接无缝移交给缓存进程,客户端成功连接缓存。 在 .NET Core 或 .NET 6 及更高版本的安装,该服务与缓存正在侦听连接的客户端共享端口信息。 然后客户端与缓存进程建立直接连接并发送初始化请求。
备注
NCache 自动配置防火墙以打开 Windows 上所有需要的端口。 但是,您需要打开 NCache Linux 上的端口 配置防火墙.
如果客户端正在连接 复制缓存 并且启用了客户端负载平衡,然后客户端请求连接到它的客户端数量最少的服务器。 然后它连接到负载最少的服务器。
如果客户端正在连接 分区的 或者 分区副本 缓存,然后它请求服务器的分布图。 在接收到地图后,它会与分布地图中的缓存服务器建立连接。
客户端还请求不同的缓存配置,例如