微软开源Garnet高性能缓存服务安装

Garnet介绍

Garnet是一款微软研究院基于C#开发而开源的高性能缓存服务,支持Windows、Linux多平台部署,Garnet兼容Redis服务API,在性能和使用架构上较Redis有很大提升(官方说法),并提供与Redis一样的命令操作存储数据,因此可以在不更换现有Redis客户端与库的情况下,即可无缝使用Garnet,从而降低开发难度与使用成本;

官方介绍(机翻)

Garnet 是 Microsoft Research 推出的一种新型远程缓存存储,其设计速度极快、可扩展且延迟低。Garnet 在单个节点内是线程可扩展的。它还支持分片集群执行、复制、检查点、故障转移和事务。它可以在主内存以及分层存储(例如 SSD 和 Azure 存储)上运行。Garnet支持丰富的API接口和强大的可扩展性模型。

Garnet 使用 Redis 的 RESP 作为其主要线路协议。因此,人们可以将 Garnet 与 大多数编程语言中可用的未经修改的 Redis 客户端一起使用,例如C# 中的StackExchange.Redis 。与其他开源缓存存储相比,您可以获得更好的性能、延迟、可扩展性和耐用性功能。

请注意,Garnet 是 Microsoft Research 的一个研究项目,该项目也应如此对待。也就是说,我们是一群充满热情的研究人员和开发人员,目前正在全职研究它,以使其尽可能稳定和高效。我们的目标是围绕Garnet创建一个充满活力的社区。事实上,Garnet 的质量已经足够高,以至于 Microsoft 的多个第一方和平台团队已经在内部部署了 Garnet 版本好几个月了。

Garnet具有以下主要优点:

  • 相对于同类开源缓存存储,小批量和许多客户端会话的服务器吞吐量(操作/秒)提高了几个数量级。
  • 在 Windows 和 Linux 上启用加速 TCP 的商品云 (Azure) 计算机上,单次操作延迟极低(在 99.9% 时通常小于 300 微秒)。
  • 随着客户端数量的增加,无论有或没有客户端批处理,都可以实现更好的可扩展性。
  • 能够通过单个共享内存服务器实例使用服务器计算机的所有 CPU/内存资源(无需节点内集群)。
  • 支持大于内存的数据集,溢出到本地和云存储设备。
  • 数据库功能,例如快速检查点和恢复以及发布/订阅。
  • 支持多节点分片哈希分区(Redis“集群”模式)、状态迁移和复制。
  • 通过全面的测试套件进行了良好的测试(针对 Garnet 及其存储层 Tsavorite 进行了数千次单元测试)。
  • 易于演变和扩展的 C# 代码库。

如果您的应用程序或服务需要一个具有大量实用功能、高性能以及基于最先进的 Microsoft Research 技术的现代设计的缓存存储,那么 Garnet 就是适合您的系统。在此处查看有关Garnet性能优势的更多详细信息。

Garnet整体架构

官方文档

Welcome to Garnet | Garnet

github

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.

性能预览

微软官方将 Garnet 与领先的开源缓存存储进行比较,参与评测的同类开源服务:Garnet、Redis、KeyDB、Dragonfly;

在相同配置环境下,分别基于:

  • 实验 1:不同数量的客户端会话的吞吐量
  • 实验 2:不同批量大小的吞吐量
  • 实验 3:不同数量的客户端会话的延迟
  • 实验 4:不同批量大小的延迟

四个维度进行性能比较;从性能评测结果上来看,Garnet各项性能测试指标,均优于同类产品;

评测结果参见:

Introducing Garnet – an open-source, next-generation, faster cache-store for accelerating applications and services - Microsoft Research

Garnet安装

此项目开源源码,但官方并未提供已编译的二进制安装包,需要自行下载源码编译成可运行应用服务,此处参考官方教程,进行编译、安装;

参考官方入门Build教程:Build and Test | Garnet

注:根据官方文档显示,提供了dockerfile配置,可参考文档尝试docker部署;

安装环境

操作系统:Windows 8+

环境依赖: .Net 8

github下载

微软官方将源码开源放到了github上,本地如有安装Git命令行工具,则在任意文件夹内右键打开“Git Bash Here”窗口,输入如下git命令:

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

$ git clone https://github.com/microsoft/garnet.git
Cloning into 'garnet'...
remote: Enumerating objects: 10055, done.
remote: Counting objects: 100% (1629/1629), done.
remote: Compressing objects: 100% (848/848), done.
remote: Total 10055 (delta 846), reused 1000 (delta 759), pack-reused 8426
Receiving objects: 100% (10055/10055), 14.51 MiB | 1.47 MiB/s, done.
Resolving deltas: 100% (7168/7168), done.

通过git命令将工程版本切换到v1.0.0(当前最新版本)

git checkout v1.0.0

$ git checkout v1.0.0
Note: switching to 'v1.0.0'.You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:git switch -c <new-branch-name>Or undo this operation with:git switch -Turn off this advice by setting config variable advice.detachedHead to falseHEAD is now at 1e5c7ad Initial commit

安装.Net8 SDK

检查Windows环境是否已安装.Net 8可运行环境,如果没有安装,请先从微软官方网站下载安装;此环境是.net应用必需使用的可运行时核心库与环境,用来支持C#和ASP.NET开发与运行。

进入已克隆的本地garnet工程根目录,检查本地是否安装.net 8

cd garnet/

dotnet test -c Release -f net8.0 -l "console;verbosity=detailed"

$ cd garnet/
$ dotnet test -c Release -f net8.0 -l "console;verbosity=detailed"正在确定要还原的项目…
C:\Program Files\dotnet\sdk\7.0.203\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: 当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 7.0 或更低版本设置为目标,或使用支持 .NET 8.0 的 .NET SDK 版本。 [D:\Workspaces\idea_2\garnet\samples\GarnetClientSample\GarnetClientSample.csproj]
C:\Program Files\dotnet\sdk\7.0.203\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(144,5): error NETSDK1045: 当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 7.0 或更低版本设置为目标,或使用支持 .NET 8.0 的 .NET SDK 版本。 [D:\Workspaces\idea_2\garnet\playground\GarnetClientStress\GarnetClientStress.csproj]

此处检查为缺少.Net8 SDK运行环境,从微软官方下载套件

.Net8.0 SDK主页:下载 .NET 8.0 (Linux、macOS 和 Windows)

.Net8.0 SDK下载页:下载 .NET 8.0 SDK (v8.0.203) - Windows x64 Installer

打开页面会自动下载dotnet-sdk-8.0.203-win-x64.exe安装程序,待下载完毕后,双击默认安装即可;

安装后,再一次检测.net8可运行环境,根据电脑硬件情况,可能需要执行几分钟。

dotnet test -c Release -f net8.0 -l "console;verbosity=detailed"

$ dotnet test -c Release -f net8.0 -l "console;verbosity=detailed"欢迎使用 .NET 8.0!
---------------------
SDK 版本: 8.0.203遥测
---------
.NET 工具会收集用法数据,帮助我们改善你的体验。它由 Microsoft 收集并与社区共享。你可通过使用喜欢的 shell 将 DOTNET_CLI_TELEMETRY_OPTOUT 环境变量设置为 "1" 或 "true" 来选择退出遥测。阅读有关 .NET CLI 工具遥测的更多信息: https://aka.ms/dotnet-cli-telemetry----------------
已安装 ASP.NET Core HTTPS 开发证书。
若要信任该证书,请运行 "dotnet dev-certs https --trust"
了解 HTTPS: https://aka.ms/dotnet-https----------------
编写第一个应用: https://aka.ms/dotnet-hello-world
了解新增功能: https://aka.ms/dotnet-whats-new
浏览文档: https://aka.ms/dotnet-docs
报告问题并在 GitHub 上查找来源: https://github.com/dotnet/core
使用 "dotnet --help" 查看可用命令或访问: https://aka.ms/dotnet-cli
--------------------------------------------------------------------------------------正在确定要还原的项目…已还原 D:\Workspaces\garnet\libs\storage\Tsavorite\cs\src\core\Tsavorite.core.csproj (用时 53.98 sec)。已还原 D:\Workspaces\garnet\libs\storage\Tsavorite\cs\src\devices\AzureStorageDevice\Tsavorite.devices.AzureStorageDevice.csproj (用时 53.98 sec)。... 略 (一大堆过程打印)已通过 ClusterTLSRPrimaryRestart(False,False) [1 s]已通过 ClusterTLSRRedirectWrites [1 s]
NUnit Adapter 4.5.0.0: Test execution complete已通过 ClusterTLSRReplicaOfTest(True) [652 ms]已通过 ClusterTLSRReplicaOfTest(False) [321 ms]测试运行成功。
测试总数: 206通过数: 206
总时间: 9.0286 分钟

构建工程

通过命令行对工程源码进行构建,从而编译与生成可运行程序;

第一步:dotnet restore

 dotnet restore正在确定要还原的项目…已还原 D:\Workspaces\garnet\playground\ClusterStress\ClusterStress.csproj (用时 1.35 sec)。已还原 D:\Workspaces\garnet\samples\MetricsMonitor\MetricsMonitor.csproj (用时 1.35 sec)。... 略已还原 D:\Workspaces\garnet\playground\Embedded.perftest\Embedded.perftest.csproj (用时 129 ms)。1 个项目(共 19 个)是最新的,无法还原。

第二步:dotnet build -c Release

$ dotnet build -c Release
适用于 .NET MSBuild 版本 17.9.6+a4ecab324正在确定要还原的项目…所有项目均是最新的,无法还原。Garnet.common -> D:\Workspaces\garnet\libs\common\bin\AnyCPU\Release\net7.0\Garnet.common.dllGarnet.common -> D:\Workspaces\garnet\libs\common\bin\AnyCPU\Release\net6.0\Garnet.common.dll... 略Garnet.test.cluster -> D:\Workspaces\garnet\test\Garnet.test.cluster\bin\AnyCPU\Release\net8.0\Garnet.test.cluster.dllGarnet.test.cluster -> D:\Workspaces\garnet\test\Garnet.test.cluster\bin\AnyCPU\Release\net6.0\Garnet.test.cluster.dll已成功生成。0 个警告0 个错误已用时间 00:01:08.00

执行构建成功后,会在garnet\main\GarnetServer\bin\AnyCPU\Release目录下生成多个.net版本(如果本机有装多个.net版本)的运行程序;

进入其中目录查看,已构建生成Garnet应用的dll库和GarnetServer.exe运行程序;可双击单独运行GarnetServer.exe,即可启动Garnet服务;

注:此net8.0文件夹下,实际就是我们已经编译后的可分发运行的exe程序和相关依赖库,理论上复制完整的net8.0文件夹在任意有安装.Net 8.0 SDK对应版本Windows操作系统电脑上,直接双击GarnetServer.exe运行服务(暂未在其它Windows电脑上验证测试,待测试后,上传到GitCode上供下载);

本文参考官方文档,继续持行后续步骤;

运行服务

完成上述两步后,即已编译好Garnet服务,可直接部署运行Garnet服务;如下操作

进入garnet/main/GarnetServer/目录

$ cd main/GarnetServer/

运行Garnet服务

dotnet run -c Release -f net8.0

Garnet可以配置索引大小、内存大小、页面大小、数据文件路径、检查点路径、IP、端口等启动参数;如下,指定索引大小为为512M;

dotnet run -c Release -f net8.0 -- -i 512m

$ dotnet run -c Release -f net8.0 -- -i 512m_________/_||___||_\      Garnet 1.0.0 64 bit; standalone mode'. \   / .'      Port: 3278'.\ /.'        https://aka.ms/GetGarnet'.'* Ready to accept connections

到此服务已正常启动,Garnet默认情况下,监听服务TCP端口为3278,可通过Redis客户端工具进行远程或本地访问,如访问不通,排查防火墙是否限制端口访问;

如果想了解更多Garnet服务启动命令配置,可通过--help查看配置参数帮助详情

dotnet run -c Release -f net8.0 -- --help

$ dotnet run -c Release -f net8.0 -- --help
GarnetServer
Copyright (c) Microsoft Corporation--port                                   (Default: 3278) Port to run server on--bind                                   IP address to bind server to(default: any)-m, --memory                             (Default: "16g") Total log memory used in bytes(rounds down to power of 2)-p, --page                               (Default: "32m") Size of each page in bytes (roundsdown to power of 2)-s, --segment                            (Default: "1g") Size of each log segment in bytes ondisk (rounds down to power of 2)-i, --index                              (Default: "8g") Size of hash index in bytes (roundsdown to power of 2)--index-max-size                         Max size of hash index in bytes(rounds down to power of 2)...略

客户端访问

RedisInsight

本地有安装RedisInsight客户端工具,该工具用于Redis服务访问使用,该工具UI美观,使用方便,因此本处以该工具做为演示;

配置连接信息

Host:127.0.0.1
Port:3278
Database Alias:本地-Garnet服务

点击"Test Connection" 进行连接测试,提示测试成功后,点击“Add Redis Database”按钮保存配置即可;

通过主界面,打开配置的“本地-Garnet服务”访问Garnet服务,Garnet高度兼容Redis命令与接口,使用上和Redis操作相同,因此可以根据需要,添加与查询各种Key/Value键值;

redis-cli

也可通过CMD命令行窗口调用redis-cli客户端工具直接访问;

redis-cli.exe -h 127.0.0.1 -p 3278

结尾

到此Garnet服务安装与运行成功,更多特性与玩法,可自行参考官方文档深入摸索;

因微软刚将Garnet开源,此项目还处于持续研发与验证中,除了微软内部有使用经验外,外部企业与项目应用理因较少(未知),属于面向大众使用比较新的项目,除官方文档外,缺乏足够的社区信息和企业应用经验,来提供借鉴;

如要在项目上调研使用,需要考虑Garnet服务落地使用风险,因此尝试生产应用或大规模投产,请三思而后行;

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

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

相关文章

Rust egui(3) 增加多个tab

话说不知道咋写&#xff0c;要不直接上git patch吧。代码都是移植的官方demo&#xff0c;核心改动就是把原来的line_demo换成了plot_demo&#xff0c;里面实现多个ui&#xff0c;然后点击tab标题会切换不同的ui。 如下图&#xff0c;Lines和Markers两个不同的标签对应不同的ui。…

力扣HOT100 - 11. 盛最多水的容器

解题思路&#xff1a; 双指针&#xff0c;从左右两边往内侧夹逼&#xff0c;遍历后得到最大值 class Solution {public int maxArea(int[] height) {int i 0, j height.length - 1, res 0;while(i < j) {res height[i] < height[j] ? Math.max(res, (j - i) * heig…

【C++】关联式容器——map和set

1 关联式容器 STL中我们常用的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 那什么是关联式容器呢&#xff1f;它与序…

qt Qt Remote Object(QtRO)实现进程间通信

简介 Qt Remote Object简称QtRO&#xff0c;这是Qt5.9以后官方推出来的新模块&#xff0c;专门用于进程间通信&#xff08;IPC&#xff09;。是基于Socket来封装的&#xff0c;兼容LPC和RPC。LPC即Local Process Communication&#xff0c;而RPC是指Remote Process Communicat…

Camera入门基础知识

一、camera介绍 1.1 camera硬件组成 camera一般由Lens、VCM音圈马达、底座支架、Sensor、Driver IC、output interface组成。如下图: 这里面要注意的是有些摄像头模组有VCM,有些则没有,有些output interface输出的是CSI信号,有的输出的是串行信号,需要接解串器。…

全新的分布式锁,功能简单且强大

分布式锁是分布式系统中一个极为重要的工具。 目前有多种分布式锁的设计方案&#xff0c;比如借助 redis&#xff0c;mq&#xff0c;数据库&#xff0c;zookeeper 等第三方服务系统来设计分布式锁。 tldb 提供的分布式锁&#xff0c;主要是要简化这个设计的过程&#xff0c;提…

面向对象-继承-使用细节

面向对象-继承-使用细节 1、子类继承了父类所有的属性和方法&#xff0c;非私有的属性和方法可以在子类中直接访问&#xff0c;但是私有的属性和方法不能在子类中直接访问&#xff0c;要通过父类提供公共的方法去访问。 2、子类必须调用父类的构造器&#xff0c;完成对父类的初…

PCB布线中晶振电容、电源大小电容、电源电容的设计细节

嵌入式软硬件爱好者 一张手册走天下。嵌入式单片机/Linux/Openwrt/电子电路技术交流分享。//主打一个技术层面的剑走偏锋&#xff0c;直击众人重视和不重视的重点//专注基础&#xff0c;才能走的更远 晶振电容 晶振旁边的电容在电路设计中不是用于滤波的。实际上&#xff0c;…

RIP,EIGRP,OSPF的区别

1.路由协议 能否选择出最优路径 2.路由协议 是否能够完成故障切换/多久能够完成故障切换 3.路由协议 是否会占用过大硬件资源 -- RIP -- 路由信息协议 跳数:一次三层设备的转发算一跳 中间隔的设备数量 不按照链路带宽来算 Rip认为路径一样,这个时候。 下面这个跳数不…

每日一题 --- 反转链表[力扣][Go]

反转链表 题目&#xff1a;206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&a…

阿里云服务器价格购买价格表,2024新版报价查询

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

(Linux 学习十二)文件查找和文件压缩

一.文件查找 which 命令查找 也可以用 whereis find 文件查找&#xff0c;针对文件名 locate 文件查找&#xff0c;依赖数据库alias 别名 alias yyy ls --colorauto -l yyy //相当于别名 查看文件which ls //查找ls 命令位置 whereis vim //也是查找命令locate …

Jackson 2.x 系列【2】生成器 JsonGenerator

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 案例演示2.1 创建 JsonFactory2.2 创建 JsonGenerator2.3 写入操作2.4 查…

pta-洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时&#xff0c;大气开始被木星吸走&#xff0c;而随着不断接近地木“刚体洛希极限”&#xff0c;地球面临被彻底撕碎的危险。但实际上&#xff0c;这个计算是错误的。 洛希极限&#xff08;Roche limit&#xff09;是一…

javase day11笔记

第十一天课堂笔记 构造代码块 { } 给 所有对象 共性特点 进行初始化操作 创建对象时在堆区对象中存放实例变量,同时执行构造代码块 执行顺序:静态代码块—>非静态代码块—>构造方法 继承★★★ 将多个类中相同的实例变量和实例方法 , 单独存放到一个类中,成为父类…

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

云计算安全分析

目录 一、概述 二、《云计算服务安全指南》的云安全风险分析 2.1 客户对数据和业务系统的控制能力减弱 2.2 客户与云服务商之间的责任难以界定 2.3 可能产生司法管辖权问题 2.4 数据所有权保障面临风险 2.5 数据保护更加困难 2.6 数据残留 2.7 容易产生对云服务商的过度…

[AIGC] SQL中的数据添加和操作:数据类型介绍

SQL&#xff08;结构化查询语言&#xff09;作为一种强大的数据库查询和操作工具&#xff0c;它能够完成从简单查询到复杂数据操作的各种任务。在这篇文章中&#xff0c;我们主要讨论如何在SQL中添加&#xff08;插入&#xff09;数据&#xff0c;以及在数据操作过程中&#xf…

2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题

“2021年XX省赛职业院校技能大赛”高职组 计算机网络应用赛项 网络构建模块竞赛真题 目录 一&#xff0e;考试说明 1 二&#xff0e;模块B网络构建 2 &#xff08;一&#xff09;任务描述 2 &#xff08;二&#xff09;任务清单 9 一&#xff0e;考试说明 本模块比赛时间为…

使用pandas进行数据清洗

采集到原始的数据中会存在一些噪点数据&#xff0c;噪点数据是对分析无意义或者对分析起到偏执作用的数据。如何清洗&#xff1a; 清洗空值/缺失值清洗重复值清洗异常值 import pandas as pd from pandas import DataFrame,Series import numpy as np pandas处理空值操作 i…