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

随着计算世界的发展和 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 缓存利用“一致哈希”方案在节点横向扩展操作和节点故障期间进行高效的对象管理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代,从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而,由于缺乏全局场景布局先验,导致输出结果存在重复对象(如卧室中的多张床&#xff0…

Android网络性能监控方案 android线上性能监测

1 Handler消息机制 这里我不会完整的从Handler源码来分析Android的消息体系,而是从Handler自身的特性引申出线上卡顿监控的策略方案。 1.1 方案确认 首先当我们启动一个App的时候,是由AMS通知zygote进程fork出主进程,其中主进程的入口就是Ac…

.Net OpenCVSharp生成灰度图和二值图

文章目录 前言一、灰度图二、二值图 前言 使用OpenCVSharp生成图片的灰度图和二值图 .Net 8.0版本,依赖OpenCvSharp4和OpenCvSharp4.runtime.win组件。 原图: 提示:以下是本篇文章正文内容,下面案例可供参考 一、灰度图 /// &…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 内存访问热度分析(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

Proteus8.13安装及使用

Proteus安装包下载地址 具体安装方法如下: 退出所有杀毒软件,右键以管理员身份运行 如果缺插件安装插件然后点击安装 如果遇到这种需要勾选的都勾选 安装插件完成 安装过程: 安装完成后桌面会自动出现图标 注意这个安装包是免破解的, 安装好以后可以直接使用 打…

竞赛选题 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

React+TS前台项目实战(十一)-- 全局常用组件提示语可复制Link组件封装

文章目录 前言HighLightLink组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇讲的这个组件,是一个用于高亮显示文本并添加可选的跳转链接,提示文本,复制文本的 React 组件 HighLightLink组件 1. 功能分析 &#x…

SmartEDA、Multisim、Proteus大比拼:电路设计王者之争?

在电路设计领域,SmartEDA、Multisim和Proteus无疑是三款备受瞩目的软件工具。它们各自拥有独特的功能和优势,但在这场电路设计王者的竞争中,谁才是真正的领跑者?让我们深入探究这三款软件的异同,揭示它们各自的魅力所在…

【ComfyUI】Stable Diffusion 3 加Controlnet

基于 instantX-research/diffusers_sd3_control: 🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX. (github.com) 和 ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers: ComfyUI SD3-Medium ControlNet&#…

JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users\中文用户名-完美解决

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 热部署下载参考博客解决第一步第二步第三步:第四步: 热部署下载 下载后启动报错:JRebel-JVMTI [FATAL] Couldn’t write to C:\…

WebSocket实现消息实时通知

参考文档:万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践、WebSocket 教程 1 背景 有一个需求,需要实现实时通信的功能,如果有新消息,后端会主动发送请求告知前端有新消息,需要前…

git Fork或者git clone克隆别人的项目到自己的仓库如何保持原仓库同步

一、问题描述 有时候我们会clone别人的项目到自己的仓库来进行二次开发,开发好之后提交到自己的仓库,如有原仓库有更新了,可以选择性的进行同步 二、解决方法 这里以ruoyi-vue-pro得前端项目来进行演示,创建一个目录,在目录下随便创建一个文…

入门Rabbitmq

1、什么是消息队列 消息队列:应用之间传递消息的方式,允许应用程序异步发送和接收消息,不需要连接对方 消息:文本字符串,对象.... 队列:存储数据。先进先出 2、应用场景 ①库存系统挂掉之后 MQ会等待&…

Ubuntuwin11双系统

一、准备工作 win11与ubuntu20.4双系统安装案例教程,先查看引导模式参数不服则不要安装否则会报异常 查看BIOS引导模式 查看磁盘分区格式 下载Ubuntu镜像 所有版本下载地址,我的华为云镜像ubuntu20.4这个版本地址

Hi3861 OpenHarmony嵌入式应用入门--启动流程

目录 BootLoader的启动与运行 Hi3861 RiSC-V boot 启动文件介绍 Loaderboot 启动过程 Flashboot代码介绍 printf串口配置 内核启动任务 BootLoader的启动与运行 Hi3861 RiSC-V boot 启动文件介绍 - Hi3861 的引导程序分为两部分,一部分是在芯片出厂时已经固…

服务器新硬盘分区、格式化和挂载

文章目录 参考文献查看了一下起点现状分区(base) ~ sudo parted /dev/sdcmklabel gpt(设置分区类型)增加分区 格式化需要先退出quit(可以)(base) / sudo mkfs.xfs /dev/sdc/sdc1(失败)sudo mkfs.xfs /dev/s…

Java基础学习-数组

目录 数组定义 注意点: 地址值是数组在内存中实际存储的地址。 案例遍历:遍历数组得到每一个元素,求数组里面所有数据和 案例:定义数组,遍历能被3整除的数字 案例:遍历一个数组,奇数将当前…

基于CentOS的全新Linux机器安装Jenkins并生成Allure报告

目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 一、安装Docker 在CentOS上,首先更新包管理工具并安装所需的包。 sudo yum update…

C++实现简单日历(win11日历)

📇文章目录 🚀实现目标🚀效果🚀计算上一个月的最后一天是周几🚀打印日历函数🚀完整代码 🚀实现目标 我们想要的效果: 1.布局类似 2.键盘按下←或者→会切换到下一个月(这…

Coursera耶鲁大学金融课程:Financial Markets 笔记Week 02

Financial Markets 本文是学习 https://www.coursera.org/learn/financial-markets-global这门课的学习笔记 这门课的老师是耶鲁大学的Robert Shiller https://en.wikipedia.org/wiki/Robert_J._Shiller Robert James Shiller (born March 29, 1946)[4] is an American econom…