微软开源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 false

HEAD 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]

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

.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.dll
  Garnet.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.dll
  Garnet.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服务,可直接部署运行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 (rounds
                                           down to power of 2)

  -s, --segment                            (Default: "1g") Size of each log segment in bytes on
                                           disk (rounds down to power of 2)

  -i, --index                              (Default: "8g") Size of hash index in bytes (rounds
                                           down 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服务落地使用风险,因此尝试生产应用或大规模投产,请三思而后行;

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

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

相关文章

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录 1、扫雷&#xff08;Google Kickstart2014 Round C Problem A&#xff09; 2、动态网格&#xff08;Google Kickstart2015 Round D Problem A&#xff09; 3、走迷宫&#xff08;模板&#xff09; 4、画图&#xff08;第六次CCF计算机软件能力认证&#xff09; 5、山…

mybatis-plus BaseMapper<T>不生效问题的解决方案

一、情景引入 MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC开发。官网&#xff1a;http://mybatis.org/mybatis-3/zh/index.html mybatis-plus更是为我们集成实现了一些基本的CRUD方法&#xff0c;为我们省去了许多重复的工作。然而&#xff0c;很多时候一些不正确…

用python的pandas读取excel文件中的数据

一、读取Excel文件 使用pandas的read_excel()方法&#xff0c;可通过文件路径直接读取。注意到&#xff0c;在一个excel文件中有多个sheet&#xff0c;因此&#xff0c;对excel文件的读取实际上是读取指定文件、并同时指定sheet下的数据。可以一次读取一个sheet&#xff0c;也可…

Appium+python自动化怎么查看程序所占端口号和IP

简介 这篇博文和分类看似没有多大关系&#xff0c;但是也是从上一篇衍生出来的产物&#xff0c;因为涉及到 FQ工具 Lantern &#xff0c;就算是给关注和支持的小伙伴们拓展一下眼界和知识面。而且好多人都阅读了上一篇没发现那个参考博客点不开吗&#xff1f;那是因为还没来的…

泛微OA常用的接口或方法(不公开)

泛微OA常用的接口或方法 记录一些平时工作用到的方法或属性&#xff0c;不公开&#xff0c;防忘记。 文章目录 泛微OA常用的接口或方法1 获取当前操作者2 根据人员id获取人员卡片信息3 获取浏览按钮的文本值4 插入 js 发送 post 请求5 插入 js 配合建模、后端接口实现发送 post…

如何在 Odoo 17 中为自定义模块添加设置菜单

Odoo 是一款极具影响力的开源企业资源规划和业务管理软件&#xff0c;用户可利用自定义模块灵活定制和增强其功能。在定制模块开发中&#xff0c;一个重要的方面是纳入设置菜单&#xff0c;使用户能够根据自己的独特需求对多个选项进行微调。 本文将引导您逐步了解如何在 Odoo…

Android Launcher开发注意事项

在开发Android Launcher时&#xff0c;需要关注性能、用户体验、权限管理、兼容性等方面&#xff0c;同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

『Mysql』Mysql四种分区方式及组合分区落地实现

&#x1f4e3;读完这篇文章里你能收获到 Mysql分区的概念Mysql分区四种分区方式的落地及案例Mysql分区的管理 文章目录 一、概念篇 1 分区是什么2 Mysql中分区原理3 Mysql中分区局限二、落地篇 1 Range分区2 Hash分区3 Key分区4 List分区5 组合分区三、Mysql如何管理分区 1 删…

【LAMMPS学习】三、构建LAMMPS(5)可选的构建设置

3、构建LAMMPS 3.5.可选的构建设置 LAMMPS 可以通过多种可选设置来构建。每个小节都解释了如何使用 CMake 和 make 进行构建。 3.5.1. C11 标准合规性 编译 LAMMPS 需要 C11 标准兼容编译器。 LAMMPS 2020 年 3 月 3 版是核心代码和大多数软件包与之前的 C98 标准兼容的最…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

oracle设置主键自增步骤

设置主键自增步骤&#xff1a; 每一张表都要设置序列&#xff0c;然后设置触发器。比mysql繁琐。 一、设置序列 选中表后&#xff0c;—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字&#xff0c;一定要全大写字母。 二、设置触发器…

摘录笔记——2024年3月20日

这位大佬介绍的技术PM方面心得&#xff0c;有一定的启发意义&#xff08;虽说我现在只是搬砖的&#xff0c;跟PM还有一定差距&#xff09;&#xff0c;现在摘录出来作为记录&#xff1a; 一文聊聊我理解的技术PM作为技术同学&#xff0c;不仅要写好自己的代码&#xff0c;做好…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…

Halcon 路标牌识别

文章目录 gray_closing_shape 使用选定的掩码执行灰度值关闭create_planar_uncalib_deformable_model 为未校准的透视匹配创建一个可变形的模型get_deformable_model_params 返回可变形模型的参数find_planar_uncalib_deformable_model 在图像中寻找平面投影不变变形模型的最佳…

详细剖析多线程(更新中...)

文章目录 前言一、认识线程1.1线程概念1.2为什么要有线程1.3线程和进程的区别&#xff08;经典面试题&#xff09; 二、创建线程2.1继承 Thread 类,重写run2.2实现 Runnable 接口,重写run2.3继承 Thread 类,重写run&#xff0c;匿名内部类2.4实现 Runnable 接口,重写run&#x…

电脑维修的相关资料,有需要的自取

电脑维修的相关资料&#xff0c;有需要的自取。 链接&#xff1a;https://pan.baidu.com/s/1X81sBNAOmomFvug6mK56Bw 提取码&#xff1a;52pj 爆笑幽默段子&#xff1a;电脑出故障了&#xff0c;准备拿去修&#xff0c;结果被女朋 友拦住了。女朋友&#xff1a;“你们男人一定…

登录与注册功能(简单版)(3)登录时使用Cookie增加记住我功能

目录 1、实现分析 2、步骤 1&#xff09;新建login.jsp 2&#xff09;修改LoginServlet&#xff1a; 3&#xff09;启动访问&#xff1a; 3、安全性考虑 4、最佳实践思路 1&#xff09;选择安全的认证机制 2&#xff09;强化会话管理 3&#xff09;安全地存储用户凭证…

数字化战略失配企业现状,可惜了!

尽管大部分的企业领导者已经意识到数字化转型对于企业革新业务模式、提升运营效率、抢占市场先机的关键作用&#xff0c;但是&#xff0c;认知上的转变并不等同于成功的实践。在实际操作中&#xff0c;往往出现战略与企业现状不符的现象&#xff0c;这无疑会使得所有的努力付诸…

矩形总面积(第十四届蓝桥杯JavaB组省赛真题)

测试用例范围比较大&#xff0c;所以全部用long类型&#xff0c;如果用int类型只能通过60%&#xff0c;建议在内存和运行时间允许的情况下&#xff0c;比赛题都用long。 重点在于计算相交的面积&#xff0c;这里找的两个相交点是左上角&#xff08;m1,n1&#xff09;和右下角&a…