Redis开源协议变更!Garnet:微软开源代替方案?

Garnet:微软开源的高性能替代方案,秉承兼容 RESP 协议的同时,以卓越性能和无缝迁移能力重新定义分布式缓存存储! - 精选真开源,释放新价值。

概览

最近,Redis修改了开源协议,从BSD变成了 SSPLv1和 RSALv2 的双重许可,而RSALv2 和 SSPLv1,都并未被 OSI 正式认可。OSI 认为,这两种协议包含了一些限制性条款,这些条款与开源定义(OSD)不完全兼容。因此可以认为 Redis 在修改许可证后,已经不再是开源软件(OSS)。Redis 的官网已经修改为“Redis is source-available software”。现在,云服务商已经不能再免费使用redis的源代码了,这可能会影响到云redis的定价,当前阿里云和腾讯云都是有云redis服务的。

微软研究院近期宣布推出一款名为Garnet的创新开源分布式缓存存储系统,致力于解决现代应用程序在处理大规模数据时对于高吞吐量、低延迟及卓越可扩展性的严苛要求。它是一个远程缓存存储,提供了一系列独特的优势。这款基于C# .NET 8.0构建的新型系统,充分利用了现代硬件能力,为应用程序开发人员提供了加速数据访问与处理的强大工具。

Garnet采用了Redis的RESP协议作为起点,这使得开发者可以使用大多数编程语言中现成的Redis客户端,例如 .NET 中的StackExchange.Redis,来使用Garnet。

相比于其他开源缓存存储,Garnet在性能、延迟、可扩展性和持久性方面有显著的提升。Garnet 通过许多客户端连接和小批量提供更好的吞吐量和可扩展性,从而节省大型应用程序和服务的成本。

Garnet 使用启用了加速 TCP 的商品云 (Azure) VM 展示了极低的客户端延迟(在 99.9% 时通常低于 300 微秒),这对于现实场景至关重要。

截至发稿概况如下:

  • 软件地址:GitHub - microsoft/garnet: Garnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.

  • 软件协议:MIT

  • 编程语言:

语言

占比

C#

97.9%

C++

1.5%

PowerShell

0.5%

JavaScript

0.1%

  • 收藏数量:7.3K


特性

Garnet的核心设计理念在于实现极致性能和弹性扩展。以下是Garnet系统的主要技术特性:

  • 高性能与低延迟

Garnet通过高度优化的内存管理机制和高效的并发处理架构,在单个节点内部署多线程处理,显著提升了数据的读写速度。支持在主内存中进行高速缓存,确保了极低的访问延迟,尤其适用于需要快速响应的应用场景。

  • 分布式与可扩展性

Garnet采用了分片集群架构,使得系统能够轻松横向扩展,每个节点都能独立处理一部分数据,从而支持海量数据的存储和检索。内置的自动分片与负载均衡机制,让系统可以根据业务需求动态调整资源分配,确保整体性能保持稳定。

  • 容错与持久化

提供了数据复制功能,以保证在单点故障发生时,数据能够迅速切换至备份节点,确保服务连续性。集成了检查点机制和故障转移功能,允许系统定期保存关键状态并在必要时恢复服务。支持将数据持久化存储在诸如SSD或Azure等分层存储介质上,既保证了数据的安全性又维持了较高的I/O效率。

  • 事务支持与API丰富

Garnet实现了事务处理能力,保证了在分布式环境下的数据一致性,这对于涉及多个操作的复杂业务逻辑至关重要。提供了丰富的API接口,使开发者可以便捷地集成Garnet到现有应用和服务中,同时也便于定制高级功能和扩展系统。

性能

  • 吞吐量 GET

在图1所示的实验中,工程人员使用了大批量的GET操作(每批4096个请求)和小负载(8字节的键和值)来最小化网络开销。随着客户端会话数的增加,工程人员观察到Garnet的可扩展性比Redis或KeyDB更好。Dragonfly展示了类似的扩展性,尽管只能达到16个线程。还要注意,DragonFly是一个纯内存系统。总的来说,即使数据库大小(即预加载的不同键的数量)更大(达到2.56亿个键)超过了处理器缓存的大小,Garnet的吞吐量相对于其他系统始终更高。

图1:在数据库大小为(a) 1024个键,和(b) 2.56亿个键的情况下,随着客户端会话数的变化,吞吐量(对数尺度)。

  • 延迟 GET/SET

接下来,工程人员通过发出80%的GET和20%的SET请求的混合体,来测量各种系统的客户端延迟,并将其与Garnet进行比较。因为工程人员关心的是延迟,所以工程人员保持数据库大小较小,同时变化工作负载的其他参数,如客户端线程数、批量大小和负载大小。

图3展示了随着客户端会话数的增加,Garnet的延迟(以微秒计)在各个百分位数上都一直较低且更稳定,与其他系统相比。请注意,这个实验不使用批处理。

Garnet的延迟经过了精细调整,以适应客户端的批处理和高效处理查询系统的多个会话。在工程人员的下一组实验中,工程人员将批量大小从1增加到64,并在下面的图中以128个活跃客户端连接绘制不同百分位数的延迟。如图4所示,当批量大小增加时,Garnet保持稳定性并实现了比其他系统更低的整体延迟。

  • 更多性能测试

参考网站:Evaluating Garnet's Performance Benefits | Garnet

部署

参考网站:Welcome to Garnet | Garnet

克隆项目

git clone https://github.com/microsoft/garnet

安装dotnet 8的SDK后,使用以下命令进行编译

dotnet build -c release

进入garnet文件夹下的main文件夹,点击GarnetServer文件夹,一直进入发布版本(net8.0),然后找到GarnetServer.exe双击运行即可。

终端出现以上界面即代表启动成功。你可以使用redis的连接客户端连接上Garnet。


遐想

Garnet作为微软开源的一款高性能分布式缓存存储系统,凭借其卓越的性能、可扩展性以及全面的功能特性,为数据密集型应用场景带来了新的解决方案。Garnet并非是要取代Redis,而是提供了一个与Redis兼容的、具有一些独特优势的选择。任何技术产品都有其适用范围和限制,用户在选择采用时需结合自身项目的具体需求和环境来权衡其优缺点。并且Redis毕竟是经历过十数年工业验证,无数双眼睛盯着这个开源项目,不可能一上来就被某神秘力量以数量级的性能优势超越,到底怎么样,需要交给时间、交给市场检验!

热烈欢迎各位在评论区分享交流心得与见解!!!


声明:本文为辣码甄源原创,转载请标注"辣码甄源原创首发"并附带原文链接。

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

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

相关文章

虚拟机-从头配置Ubuntu18.04(包括anaconda,cuda,cudnn,pycharm,ros,vscode)

最好先安装anaconda后cuda和cudnn,因为配置环境的时候可能conda会覆盖cuda的路径(不确定这种说法对不对,这里只是给大家的建议) 准备工作: 1.Ubuntu18.04,x86_64,amd64 虚拟机下载和虚拟机Ubu…

|行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》

报告的主要内容解读: 居民收入提高推动旅游业发展:报告指出,随着人均GDP的提升,居民的消费能力增强,旅游需求从传统的观光游向休闲、度假游转变,国内人均旅游消费持续增加。 政府政策促进旅游市场复苏&…

SlerfTools:简化操作,激发Solana生态创新潜能

在区块链世界的快速演变中,Solana生态系统以其独特的高性能吸引了全球的目光。然而,随着生态系统的蓬勃发展,用户和开发者面临的挑战也日渐增多。正是在这样的背景下,一个名为SlerfTools的新星项目应运而生,它承诺将为Solana带来一场革命性的变革。 项目的诞生 SlerfTools并非…

计算机网络——30SDN控制平面

SDN控制平面 SDN架构 数据平面交换机 快速、简单,商业化交换设备采用硬件实现通用转发功能流表被控制器计算和安装基于南向API,SDN控制器访问基于流的交换机 定义了哪些可以被控制哪些不能 也定义了和控制器的协议 SDN控制器(网络OS&#…

CDH集群hive初始化元数据库失败

oracle数据库操作: 报错如下:命令 (Validate Hive Metastore schema (237)) 已失败 截图如下: 后台日志部分摘录: WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

PHP开发全新29网课交单平台源码修复全开源版本,支持聚合登陆易支付

这是一套最新版本的PHP开发的网课交单平台源代码,已进行全开源修复,支持聚合登录和易支付功能。 项目 地 址 : runruncode.com/php/19721.html 以下是对该套代码的主要更新和修复: 1. 移除了论文编辑功能。 2. 移除了强国接码…

定时器的原理和应用

#include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char count0,num0; void inittimer() {TMOD0x01;//0000 0001TH0(65536-50000)/256; //定时50ms50000us 2562^8 初值向右边移动8位TL0(65536-50000)%256;ET01;//开启定…

星光/宝骏/缤果/长安 车机CarPlay手机操作破解教程V2.0版本(无需笔记本、无需笔记本、无需笔记本)

之前写了个1.0版本&#xff0c;由于太局限&#xff0c;需要用到笔记本才能操作&#xff0c;很多车友反馈不方便。特此出个手机版教程&#xff0c;简单easy&#xff0c;妈妈再也不用担心我搞不定啦 一、准备工作 先卸载车机上的autokit 或者 智能互联 app&#xff0c;这步很关…

Avue-crud表格操作栏不显示修改、删除按钮

2024-03-28 奇了怪了&#xff0c;CSDN自动把我之前的文章设置为VIP了&#xff0c;怪不得有时候搜东西看着看着要收费&#xff0c;现在找东西都不好找&#xff0c;我已经反馈不同意了&#xff0c;看看能不能给我取消吧 今天用Avue的时候发现操作栏的按钮没了&#xff0c;按照文…

win10+cuda11.8+cudnn8.6.0安装

目录 一、NVIDIA 驱动程序下载 二、cuda11.8下载 三、cudnn8.6.0下载 四、确认cuda和cudnn是否安装成功 一、NVIDIA 驱动程序下载 1、查看显卡类型&#xff1a;连续按下CTRLALTDELETE -> 选择任务管理器 -> 性能 -> GPU -> 右上角 2、下载地址&#xff1a;官方…

生成式 AI 学习资源大汇总

这里汇聚了该领域的海量学习资源&#xff0c;从研究更新到面试技巧&#xff0c;从课程材料到免费课程&#xff0c;还有实用代码&#xff0c;一应俱全&#xff0c;是你工作流程中的得力助手&#xff01; 前沿研究&#xff1a;每月精心筛选的最佳生成式 AI 论文列表&#xff0c;让…

pandas数据保存与加载

安装操作Excel模拟数据写入编辑读取切片操作 统计 安装 pip install pandas pip install numpyExcel环境安装 pip install xlrd pip install xlwt pip install openpyxi操作Excel import pandas as pd 模拟数据 写入 import pandas as pd# 模拟需要写入的数据 dic{name:[…

Pytorch的hook函数

hook函数是勾子函数&#xff0c;用于在不改变原始模型结构的情况下&#xff0c;注入一些新的代码用于调试和检验模型&#xff0c;常见的用法有保留非叶子结点的梯度数据&#xff08;Pytorch的非叶子节点的梯度数据在计算完毕之后就会被删除&#xff0c;访问的时候会显示为None&…

JAVAEE——线程池

文章目录 线程池的概念什么是线程池&#xff1f; 标准库中的线程池线程池的创建工厂模式工厂模式的用途线程池涉及到的类有哪些Executor接口ExecutorService接口Executors工厂类AbstractExecutorService虚类ThreadPoolExecutor普通类ThreadPoolExecutor内部的实现4个拒绝策略 线…

(C++) 属性说明符-语法

文章目录 前言语法&#x1f3f7;️非标准语法⭐GCC⭐MSVC &#x1f3f7;️[[ 属性列表 ]] (C11 起)⭐标识符⭐属性命名空间::标识符⭐标识符(实参列表 &#xfeff;(可选) )⭐同时多个属性 &#x1f3f7;️[[ using 属性命名空间 : 属性列表 ]] (C17 起)&#x1f3f7;️解释⭐…

图解Dijkstra和Bellman-Ford的流程以及证明

说到寻路&#xff0c;在游戏里面应用最多的自然还是A寻路&#xff0c;但是这篇文章不讨论A寻路&#xff0c;主要是介绍Dijkstra和Bellman-Ford&#xff0c;因为这两个寻路核心代码少&#xff0c;但是正确性却不容易直接看出来&#xff0c;网上的博客也基本都是画步骤告诉大家怎…

Linux内核之最核心数据结构之一:struct file(三十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

产品SDK化转型:标准化与机构个性化定制解决方案

一、背景 在互联网行业中&#xff0c;企业通常可分为两大类别&#xff1a;2C和2B。对于2B企业而言&#xff0c;它们的产品往往以产品的形式提供给各个合作机构。以金融领域为例&#xff0c;一家2B金融公司通常将产品销售给各个银行和证券公司&#xff0c;这是2B领域常见的做法…

2.11 Python关键字(保留字)

Python关键字&#xff08;保留字&#xff09;一览表 保留字是Python 语言中一些已经被赋予特定意义的单词&#xff0c;这就要求开发者在开发程序时&#xff0c;不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行…

企业网站建设的方法的相关问题的解决办法的问题

现在市场上比较大的公司都建立了自己的企业网站&#xff0c;比如华为、小米等&#xff0c;在他们的企业网站中&#xff0c;可以充分展示自己产品的优势&#xff0c;介绍公司的优质服务。 这都是让顾客改变购买想法的重要因素。 现在互联网发达了&#xff0c;很多人在购买产品的…