MinIO Enterprise Cache:实现超性能的分布式 DRAM 缓存

news2025/1/12 6:01:24

随着计算世界的发展和 DRAM 价格的暴跌,我们发现服务器配置通常配备 500GB 或更多的 DRAM。当您处理大型部署时,即使是那些具有超高密度 NVMe 驱动器的部署,这些服务器上的服务器数量乘以 DRAM 也会迅速增加,通常达到几 TB。该 DRAM 池可以配置为分布式共享内存池,非常适合需要大量 IOPS 和吞吐量性能的工作负载。

因此,我们为 Enterprise Plus 和 Enterprise Lite 客户构建了 MinIO Enterprise Object Store Cache 功能。MinIO Enterprise Cache 允许我们的客户通过缓存经常访问的对象来利用此共享内存池。MinIO Enterprise Cache 将进一步提高核心 AI 工作负载的性能。

差异化点

MinIO Enterprise Cache 与通用缓存服务的区别在于它了解数据源(即 MinIO Enterprise Object Store)。

通用缓存旨在与任何数据源一起使用。因此,如果在缓存中找不到项目,他们能做的最好的事情就是返回“未找到”响应。从那里,调用方必须提取数据并将其提交到通用缓存服务进行缓存。

另一方面,MinIO 的企业缓存功能是专门为缓存 MinIO 对象而构建的。如果在对象的现有缓存中找不到对象,则它将自动检索该对象,缓存该对象以供将来的请求使用,并将该对象返回给调用方。

另一个区别点是 MinIO Enterprise Cache 使用一致哈希算法将缓存的对象数据分散到缓存节点集群(称为对等节点)中。一致的哈希可确保对象可以根据其密钥轻松定位。它还确保节点包含相同数量的数据,以便在其他节点空闲时不会过载。然而,更重要的是,它以这样一种方式将对象分散开来,如果添加或删除节点,则只需进行最小的洗牌即可使系统对齐。这会导致对象的键值与保存缓存对象的节点之间建立一对一关系。

在本文后面,我将更深入地介绍这两个差异化功能。现在,让我们更好地了解 MinIO 的企业缓存中可用的选项,以及它如何与 MinIO 企业对象存储集成。

设置 MinIO Enterprise 缓存

设置 MinIO Enterprise Cache 非常简单,只需在 MinIO Enterprise Object Store 控制台中启用服务并指定需要缓存的存储桶即可。如果之前未配置缓存,则控制台中的“缓存”对话框将类似于下面的屏幕截图。要激活缓存服务,请单击“激活缓存”按钮。

启用缓存服务后,您需要指定将使用缓存的存储桶。如下面的屏幕截图所示。首先,指定最大内存设置。这是将用于跨所有存储桶进行缓存的最大内存量。接下来,指定每个需要缓存的存储桶以及每个存储桶要使用的内存量。如果希望缓存终结点使用 TLS,请指定 CA 路径、公钥路径和私钥路径。

让我们仔细看看将 MinIO Enterprise Cache 服务与其他缓存服务区分开来的功能。

为 MinIO 构建的缓存

如果通用缓存服务要与 MinIO Enterprise Object Store 一起使用,则请求对象的应用程序需要先检查缓存服务,然后再调用 MinIO。由于 MinIO 缓存是专门为 MinIO 企业对象存储构建的,因此它在后台工作。应用程序和服务在不了解 MinIO 缓存的情况下调用 MinIO。如果请求的对象被缓存,则 MinIO 将从缓存中检索该对象。如果它没有被缓存,而它应该被缓存,那么 MinIO 将检索对象,缓存它,并将其返回到调用服务。

当缓存作为存储解决方案的扩展构建时,缓存维护会更有效。例如,如果更新了缓存的对象,则 MinIO Enterprise Object Store 可以使缓存中的对象失效或更新缓存。此外,MinIO 缓存使用滚动缓存将缓存的总大小保持在 MinIO 缓存配置中指定的限制内。如果添加新对象将导致缓存大小超过指定的限制,则将根据指示上次请求对象的时间戳删除一个或多个对象。

要了解 MinIO 缓存对需要对象存储的应用程序或服务的好处,让我们考虑一下将通用缓存服务与 MinIO 一起使用时将发生的流程。如下所示。所有网络请求都用红色箭头表示,进程间调用用黑色箭头表示。

现在考虑 MinIO 缓存使用的流。如下图所示。对于请求对象数据的应用程序,MinIO Cache 实现的逻辑更易于使用。使用任何 MinIO SDK 的应用程序发出请求的方式与完全未设置缓存时相同。缓存是一项幕后操作 - 不需要协调对第三方缓存服务的调用。

当需要填充缓存时,使用 MinIO 缓存还可以减少网络跃点。(4 个网络调用。当缓存服务(如 MinIO 缓存)了解数据源时,它可以在之前未缓存数据的情况下代表请求者检索数据。这导致网络利用率降低 20%(4 个网络调用对 5 个)。这也意味着对象始终返回到请求应用程序。

最后,MinIO 缓存利用控制器中的热内存缓存来处理频繁请求的对象,因此无需为这些对象向节点发出网络请求。

一致的哈希处理,实现复原能力

一致哈希是一种算法,用于根据对象的名称(或键)确定哪个节点包含(或应该包含)缓存对象,该名称(或密钥)随每个请求传递给 MinIO 缓存。这样做的优点是,无需使用必须与每个请求一起搜索的大型查找表。一致哈希还以这样一种方式将对象分散到节点集群中,从而最大限度地减少在节点发生故障或添加节点(集群横向扩展)时移动对象的需要。

让我们通过一致哈希算法的简单应用来了解它的工作原理和它提供的价值。使用可以将字符串转换为数字的哈希算法,在不维护表的情况下确定对象应驻留的节点非常简单。创建此数字后,Consistent Hashing 会获取它并将其映射到圆的边缘。最简单的方法是使用 360 通过模运算符运行哈希数。示例:370 模 360 等于 10。模运算返回除法运算的余数和另一个数字。最小可能值 0 对应于零的角度,最大可能值对应于近 360 度的角度(或 2π 弧度),所有其他哈希值将线性拟合介于两者之间。当对三个对象完成时,圆可能如下所示:

现在我们对节点做同样的事情。我们通过对它们的 IP 地址或 URL 应用相同的算法将它们放在圆圈的边缘。现在,我们的圈子看起来像这样:

要确定对象应驻留在哪个节点上,请从圆上的对象开始,逆时针行进,直到到达节点。

现在,作为一个思想实验,假设一个节点失败了,其他节点必须吸收额外的工作。您会注意到,不需要移动现有对象,并且最接近故障节点的节点将获得额外的工作,直到故障节点恢复。接下来,假装添加了一个额外的节点。结果是相似的。新节点将缓慢获取对象,从而减少最近对象的负载。这个简单的例子说明了一致哈希的效率。实际上,这种算法更复杂;如果您感兴趣,请在此处内容。

一致哈希是一种分布式哈希方案,它通过在抽象圆上为它们分配一个位置来独立于参与算法的服务器或对象的数量来运行。这允许服务器和对象在不影响整个系统的情况下进行扩展。

总结

MinIO Cache 是一种缓存服务,它使用内存来缓存经常访问的对象。MinIO Cache 专为 MinIO 企业对象存储构建,是 MinIO 的最佳缓存服务,与不了解 MinIO 对象存储的通用缓存服务不同。如果从 MinIO 缓存请求对象,并且缓存中不存在该对象,则 MinIO 缓存将为您获取该对象并将其放入缓存中以供后续请求使用。

此外,MinIO 缓存利用“一致哈希”方案在节点横向扩展操作和节点故障期间进行高效的对象管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IO系列(十) -TCP 滑动窗口原理介绍(上)

一、摘要 之前在上分享网络编程知识文章的时候,有网友写下一条留言:“可以写写一篇关于 TCP 滑动窗口原理的文章吗?”。 当时没有立即回复,经过查询多方资料,发现这个 TCP 真的非常非常的复杂,就像一个清…

3D Gaussian Splatting Windows安装

1.下载源码 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 2.安装cuda NVIDIA GPU Computing Toolkit CUDA Toolkit Archive | NVIDIA Developer 3.安装COLMAP https://github.com/colmap/colmap/releases/tag/3.9.1 下载完成需要添加环…

pycharm git配置

PyCharm 是一个强大的集成开发环境(IDE),它内置了 Git 集成,使得版本控制变得非常方便。以下是 PyCharm 中配置 Git 的基本步骤: 安装Git: 在开始之前,请确保已经在您的系统上安装了 Git。您可以通过官方网…

小规模自建 Elasticsearch 的部署及优化

本文将详细介绍如何在 CentOS 7 操作系统上部署并优化 Elasticsearch 5.3.0,以承载千万级后端服务的数据采集。要使用Elasticsearch至少需要三台独立的服务器,本文所用服务器配置为4核8G的ECS云服务器,其中一台作为 master + data 节点、一台作为 client + data 节点、最后一…

绕过网页的阻止复制

绕过网页的阻止复制 一、问题的提出二、绕过技巧一三、绕过技巧二四、绕过技巧三五、总结说明 一、问题的提出 也是很久没有写文章了,今天突发奇想写一篇文章。首先你有没有被网页中的一些阻止你复制的页面所困扰。就是那种,你突然找到一篇文章&#xf…

mac如何检测硬盘损坏 常用mac硬盘检测坏道工具推荐

mac有时候也出现一些问题,比如硬盘损坏。硬盘损坏会导致数据丢失、系统崩溃、性能下降等严重的后果,所以及时检测和修复硬盘损坏是非常必要的。那么,mac如何检测硬盘损坏呢?有哪些常用的mac硬盘检测坏道工具呢? 一、m…

Redis常见数据类型及其常用命令详解

文章目录 一、Redis概述二、Redis常用命令1.通用命令1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5…

触控MCU芯片(1):英飞凌PSoC第6代第7代

前言: 说到触摸MCU芯片,这个历史也是很久了,比如日常经常接触到的洗衣机、电冰箱、小家电,隔着一层玻璃,轻轻一按就能识别按键,感觉比过去纯机械式的按键更高级更美观,不仅白电,现在很多汽车也都在进行触摸按键的改版,不再使用笨重的机械按键,比如空调调温按键、档位…

SpringBoot3整合SpringDoc实现在线接口文档

写在前面 在现目前项目开发中,一般都是前后端分离项目。前端小姐姐负责开发前端,苦逼的我们负责后端开发 事实是一个人全干,在这过程中编写接口文档就显得尤为重要了。然而作为一个程序员,最怕的莫过于自己写文档和别人不写文档…

ES 8.14 向量搜索优化

参考:https://blog.csdn.net/UbuntuTouch/article/details/139502650 检索器(standard、kNN 和 RRF) 检索器(retrievers)是搜索 API 中的一种新抽象概念,用于描述如何检索一组顶级文档。检索器被设计为可以…

深度學習筆記12-優化器對比(Tensorflow)

🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、我的環境 電腦系統:Windows 10 顯卡:NVIDIA Quadro P620 語言環境:Python 3.7.0 開發工具&…

白蚁监测装置:支持北斗定位

TH-BY2白蚁监测控制管理系统原理 采用白蚁喜欢吃的食物做诱饵,吸引白蚁取食,取食过程中触动报警装置。报警装置发出信号,通过物联网传输到监控系统,经过数据处理,监测结果呈现给用户。用户通知白蚁防治专业人员&#x…

部署远程控制台访问服务Rttys,第三部分服务端(安装Rttys)

安装服务端Rttys之前可选先在客户端安装rtty。服务端采用GO语言实现,前端界面采用vue实现。 CMAKE的安装和客户端RTTY的安装请参考前两篇文章: Linux远程连接程序工具选型 Webssh与Rtty 部署远程控制台访问服务Rttys,第一部分客户端&#…

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法

常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 1. 累加 #include <stdio.h>int main() {…

怎么把网页上的接口信息导入postman

第一步 打开f12&#xff0c;右键选中需要的接口。选择copy-copy as cURL 第二步 打开postman&#xff0c;选择"Raw Text"&#xff0c; 把刚才复制的curl粘贴到空白位置&#xff0c;点击Continue - 最后的效果。导入的接口自带cookie&#xff0c;不用再输入cookie&a…

Cosmopolitan:一次构建,多平台原生运行的C语言库行!

Cosmopolitan&#xff1a;C语言的跨平台革命&#xff0c;无需虚拟机&#xff0c;直接运行于任何环境。- 精选真开源&#xff0c;释放新价值。 概览 Cosmopolitan是一个创新的C语言库&#xff0c;旨在实现C程序的"一次编写&#xff0c;多处运行"&#xff0c;类似于Ja…

【深度学习驱动流体力学】配置安装 OpenFOAM 及其所需的ThirdParty-10与QT5工具

本文以ThirdParty-10 为例,ThirdParty-10 是 OpenFOAM 软件包中的一个重要组件目录&#xff0c;包含了一系列外部的第三方库和工具&#xff0c;这些库和工具对于 OpenFOAM 的编译和运行至关重要。该目录提供了各种脚本和配置文件&#xff0c;用于简化这些第三方库的下载、编译和…

文生视频开源产品的一些调研(一)

笔者尝试AI视频生成的几个特点&#xff1a; 玄学prompt&#xff0c;每个视频的prompt可能也需要微调很多次&#xff0c;需要找到使用模型的最佳prompt词组合&#xff0c;不恰当的比喻&#xff0c;骑自行车&#xff0c;座位高度等都是人与车彼此熟悉玄学生成&#xff0c;因为需…

Ubuntu与RedHat Linux的不同

部署Ubuntu 安装在服务器上的系统一般追求极致的稳定&#xff0c;所以安装系统时为了避免潜在的问题&#xff0c;所以选的时候应该往后推选几个版本 首先因为现在使用的电脑是MacBook&#xff0c;还是最新的Mac所以在部署的时候要注意其安装的支持芯片架构&#xff08;最新的…