Garnet: 力压Redis的C#高性能分布式存储数据库

💡 原文中文,约5800字,阅读约需14分钟。
📝

内容提要

微软研究院开源了名为Garnet的C#项目,它是一个远程缓存存储系统,实现了Redis协议。Garnet具有极速、可扩展和低延迟的设计目标,支持复制、检查点、故障转移和事务处理功能。它可以在主内存和分层存储上运行,并提供丰富的API接口和可扩展性模型。Garnet在性能、延迟、可扩展性和持久性方面都有显著提升。

🔎

延伸解读

Garnet的定位与成熟度

Garnet是微软研究院的开源研究项目,但已具备生产级质量,微软内部多个一线团队已部署数月。它基于C# .NET 8.0开发,实现了Redis的RESP协议,因此现有Redis客户端无需修改即可连接。其设计目标包括极速、可扩展和低延迟,支持复制、检查点、故障转移和事务,并能在主内存和分层存储上运行。

性能优势与测试条件

在Azure Standard F72s v2虚拟机上,启用加速TCP后,Garnet在GET/SET吞吐量和延迟上优于Redis 7.2、KeyDB 6.3.4和Dragonfly 6.2.11。测试使用均匀随机键,所有数据适合内存。Garnet在99.9百分位延迟常低于300微秒,且随着客户端会话数增加,可扩展性更好。但需注意,这些结果基于特定硬件和配置,实际表现可能因环境而异。

复杂数据结构性能

Garnet支持Hyperloglog、位图、有序集合等复杂数据结构。在Hyperloglog的PFADD操作中,无论高争用还是低争用场景,Garnet的吞吐量均超过对比系统,且随线程数增加扩展性良好。对于位图操作,如GETBIT、SETBIT和BITOP,Garnet利用硬件和SIMD指令加速线性时间操作,在高争用和小批量下仍保持更高吞吐量。

C#在高性能中间件中的潜力

Garnet展示了C# .NET在高性能中间件领域的潜力。.NET提供结构体、内存操作、unsafe代码块、Span<T>和async/await等特性,有助于提升执行效率和开发灵活性。尽管过去用C#构建的中间件产品不常见,但Garnet的性能表现表明,.NET能够胜任高性能场景,并可能推动更多相关创新。

❓

Q&A

Garnet是什么类型的数据库?

Garnet是一个高性能的远程缓存存储系统,基于C#开发,支持Redis协议。

Garnet相比于Redis有哪些优势?

Garnet在性能、延迟、可扩展性和持久性方面显著优于Redis,支持更高的吞吐量和更低的延迟。

Garnet支持哪些功能?

Garnet支持复制、检查点、故障转移、事务处理以及复杂数据结构如Hyperloglog和位图。

Garnet的延迟表现如何?

在标准云端机器上,Garnet的单个操作延迟常常少于300微秒,表现出较低且稳定的延迟。

Garnet如何处理复杂数据结构?

Garnet支持多种复杂数据结构,并在高争用更新和位操作时展现优越性能。

Garnet的性能测试结果如何?

基准测试显示Garnet在GET/SET操作的吞吐量和延迟方面表现优异,吞吐量显著高于其他系统。

🏷️

标签

➡️

继续阅读