内存中层概览
内存层级是一项集群级设置,使用专用节点。在阅读本页面内容之前,请先了解实例、集群和节点。我们还建议您熟悉限制。
Bigtable 内存层级是 Bigtable 节点的一部分,是一个集成式内存层级,可根据访问模式和性能需求,通过单个 API 实现无缝、经济实惠的数据分层。Bigtable 内存中层使用远程直接内存访问 (RDMA),可显著缩短响应时间、缓解热点问题,并针对延迟敏感型数据提供高吞吐量保障。如需了解详情,请参阅了解性能。
何时使用内存层级
我们建议您为以下用例启用内存层:
- 亚毫秒级延迟时间要求:要求读取延迟时间小于 1 毫秒的工作负载,通常通过在数据库前端使用自行管理的缓存解决方案来解决。
- 高吞吐量点读取:对特定数据子集有高读取流量吞吐量要求的应用。
- 热点缓解:高吞吐量工作负载,可能包括特定行键上的流量高峰或热点。
- 成本优化:您希望通过将高读取量分流到更具成本效益的内存层来减少 Bigtable 节点数量。
内存中层的工作原理
内存中层支持由混合存储节点提供。这些专用节点扩展了 Bigtable 的计算和存储解耦,纳入了具有可垂直伸缩吞吐量的内存层。Bigtable 最多可能需要 30 分钟才能预配专用内存层级节点。在此期间,Bigtable 会继续处理来自永久性存储的流量。
您可以在集群级层启用内存中层。
内存中层的工作方式如下:
- 获取内存层中的数据:内存层提供直读式缓存行为。通过您为内存层配置的应用配置文件,行会通过读取操作进入内存层。如果行数据已在内存中层,则来自任何应用配置文件的写入操作都会更新内存层。
- 逐出和失效政策:内存层在行级使用最近最少使用 (LRU) 逐出,并应用存留时间 (TTL) 失效政策,以最大限度地提高内存层命中率。
- 负缓存:内存层会记住资源是否在一段时间内缺失,以防止后端过载。
- 安全性:内存层支持静态加密和传输加密 (TLS)。
- 复制:在多集群实例中,不同集群的内存层级不同步。由于每个内存层会根据其接收的读取流量独立确定要加载到内存中的数据,因此不同集群可能会在其内存层中保存不同的行键。Bigtable 会将数据从本地集群的 SSD 层级加载到内存中。对行的写入最终会在其存在的所有内存层级中更新该行,遵循最终一致性的标准 Bigtable 复制模型。
- 纵向自动扩缩:内存层级支持在节点级别进行纵向自动扩缩,可与 Bigtable 自动扩缩功能搭配使用。
内存中层级经过优化,可实现对当前数据的高性能访问。为了保持这种性能,只有带有最新时间戳的行版本才会驻留在内存层中。对早期版本数据(也称为历史单元)的请求会自动绕过内存层,并从永久性存储空间提供。
数据一致性
Bigtable 可确保内存中层数据与 SSD 或非频繁访问存储层上的持久性数据保持一致。这种混合架构使 Bigtable 能够在所有存储层级中提供一致的存储模型,让您能够通过相同的语义接口访问数据,无论数据实际位于 RAM 还是永久性存储中。启用 Bigtable 内存中层后,您可以在集群级层保持“读己之写”一致性。
纵向扩缩
启用内存层后,每个节点都可以使用纵向伸缩来修改其内存层吞吐量。启用内存中层级后,每个节点的初始基本容量为每秒 40,000 次读取。为了应对点读取流量激增,节点可以自动扩缩,每次增加 40,000 次读取/秒,每个节点最多可达到 120,000 次读取/秒。
此纵向伸缩功能与 Bigtable 自动伸缩功能集成。如果集群中所有节点的内存层级容量都达到上限,并且自动扩缩功能处于启用状态,Bigtable 会自动预配更多节点,以进一步提高内存层级吞吐量。
节点上的纵向伸缩仅适用于内存中层每秒读取次数,无论是否启用集群级自动伸缩,纵向伸缩都有效。如果纵向伸缩超出每秒 4 万次读取的基本速率,则会按节点每小时费用的倍数计费。如需了解详情,请参阅价格和限制。
限制
内存层级存在以下限制:
- 内存中层需要使用固态硬盘 (SSD) 存储。
- 内存中层级仅支持单行级点读取操作。
- 内存层级不提供数据扫描服务,也不支持 SQL 查询。
- 内存中层应用配置文件仅支持单集群路由。
- 内存层级会将行大小限制为每个行键 1 MiB。Bigtable 会从永久性存储空间中读取超出此限制的行。
内存层级需要以下版本的 Bigtable 客户端库:
- Java 2.77.0 版或更高版本
- BOM 26.80.0 版或更高版本
- Go 1.52.0 版或更高版本
不支持其他客户端库。
启用了客户管理的加密密钥 (CMEK) 的集群不支持内存层级。
内存中层限制为每个集群最多 10 个节点。
后续步骤
- 了解如何启用内存中层