内存中层概览

内存中层是一项集群级设置,使用专用节点。 在阅读本页内容之前,请先了解 实例、集群和 节点。我们还建议您熟悉相关 限制

Bigtable 内存中层是 Bigtable 节点的一个集成内存层,可根据访问模式和性能需求实现无缝、经济高效的数据分层,所有操作都通过单个 API 完成。Bigtable 内存中层使用远程直接内存访问 (RDMA),可显著缩短响应时间,缓解热点问题,并针对延迟敏感型数据提供高吞吐量保障。如需了解详情,请参阅 了解性能

何时使用内存中层

我们建议您针对以下用例启用内存中层:

  • 亚毫秒级延迟要求:需要读取延迟低于 1 毫秒的工作负载,通常通过在数据库前使用自行管理的缓存解决方案来满足此要求。
  • 高吞吐量点读取:对特定数据子集有高读取流量 吞吐量要求的应用。
  • 缓解热点问题:高吞吐量工作负载,可能包含特定行键上的流量峰值或热点。
  • 费用优化:您希望通过将高读取量分流到更经济高效的内存中层来减少 Bigtable 节点的场景。

内存中层的工作原理

内存中支持由混合存储节点提供。这些专用节点扩展了 Bigtable 的计算和存储分离,以包含具有纵向可伸缩吞吐量的内存层。内存中层最多可能需要 30 分钟才能预配专用节点。在此期间,Bigtable 会继续处理来自永久性存储空间的流量。

您可以在集群级别 启用内存中层。

内存中层的运作方式如下:

  • 将数据放入内存层:内存中层提供直读缓存 行为。通过为内存层配置的应用配置文件执行读取操作时,行会进入内存层。如果行数据已在内存中层中,则来自任何应用配置文件的写入操作都会更新内存层。
  • 逐出和失效政策:内存中层在行级别使用最近最少使用 (LRU) 逐出,并采用 15 分钟的存留时间 (TTL) 失效政策。
  • 负缓存:内存中层会记住资源是否在 一段时间内缺失,以防止后端过载。
  • 安全性:内存中层支持静态加密和传输中加密 (TLS)。
  • 复制:在多集群实例中,不同 集群的内存层不会同步。由于每个内存层都会根据收到的读取流量独立确定要加载到内存中的数据,因此不同集群的内存层中可能包含不同的行键。Bigtable 会将数据从本地集群的 SSD 层加载到内存中。 写入行的操作最终会按照 Bigtable 的最终一致性标准复制模型,在所有包含该行的内存层中更新该行。
  • 纵向自动扩缩:内存中层支持 节点级纵向自动扩缩 ,可与 Bigtable 自动扩缩协同工作。

内存中层针对高性能访问当前数据进行了优化。为了保持此性能,内存层中仅保留行的最新时间戳版本。对较早版本数据的请求(也称为 历史单元格)会自动绕过内存层,并由 永久性存储空间提供服务。

数据一致性

Bigtable 可确保内存中数据与 SSD 或不常访问的存储层上的永久性数据保持一致。借助这种混合架构,Bigtable 可以在所有存储层中提供一致的存储模型,让您可以通过相同的语义接口访问数据,无论数据实际驻留在 RAM 还是永久性存储空间中。启用 Bigtable 内存中层后,您可以在集群级别保留读己所写一致性。

纵向伸缩

启用内存中层后,每个节点都可以使用纵向 伸缩 来修改其内存中吞吐量容量。每个节点都包含 8 GB 的 RAM 用于内存中层,并以每秒 40,000 次读取的基本容量开始。 为了管理点读取流量的激增,节点可以自动以每秒 40,000 次读取的增量进行扩缩,每个节点最多可达到每秒 120,000 次读取。

此纵向伸缩功能与 Bigtable 自动伸缩集成。如果集群中所有节点都达到最大内存中容量,并且自动扩缩处于活跃状态,Bigtable 会自动预配更多节点,以进一步提升内存中吞吐量。

节点上的纵向伸缩仅适用于每秒内存中读取次数,无论是否启用集群级自动伸缩,它都可以正常工作。超出每秒 40,000 次读取的基本容量的纵向伸缩将按节点每小时费用的倍数计费。如需了解详情,请参阅 价格限制

限制

内存中层存在以下限制:

  • 内存中层需要 SSD 存储空间。
  • 内存中层仅支持单行级点读取操作。
  • 内存中层不提供数据扫描服务,也不支持 SQL 查询。
  • 内存中层应用配置文件仅支持单集群路由。
  • 内存中层将行大小限制为每个行键 1 MiB。Bigtable 会从永久性存储空间读取超出此限制的行。
  • 内存中层需要 Java 版 Bigtable 客户端 库 2.77.0 或更高版本,或者 BOM 26.80.0 或更高版本。
  • 客户管理的加密密钥 (CMEK) 集群不支持内存中层。

后续步骤