近日,微软正式开源缓存存储系统Garnet,能更大限度发挥硬件功能,帮助开发人员更快地运行应用程序。
微软研究院数据库小组高级首席研究员Badrish Chandramouli介绍,Garnet项目是基于C# .NET8.0从零开始构建而成,且以性能为核心考量。它实现了Redis协议,可以直接将Redis替换为Garnet,客户端不需要任何修改。
Garnet使用Redis的RESP协议作为其主要通信协议,因此可以使用大多数编程语言中现成的Redis客户端,例如C#中的StackExchange.Redis。与其他开源缓存存储相比,Garnet在性能、延迟、可扩展性和持久性方面都有显著提升。
Garnet 使用名为 Tsavorite 的线程可扩展存储层,并通过分层存储支持提供缓存友好的共享内存可扩展性。Garnet 支持集群模式(分片和复制)。它具有快速可插拔网络设计,可以获得较高的端到端性能(吞吐量和 99% 延迟)。Garnet可以降低大型服务的成本。
Garnet 使用流行的 RESP 有线协议,允许它与任何语言的未经修改的 Redis 客户端一起使用。Garnet 支持 Redis API 的大部分表面,包括原始字符串和复杂的数据结构,例如排序集、位图和 HyperLogLog。Garnet 还具有可扩展性和事务性存储过程功能。
Garnet 服务器是用流行的 .NET C# 编写的,几乎可以在任何平台上高效运行。它在 Windows 和 Linux 上同样运行良好,并且被设计为不会产生垃圾收集开销。您还可以使用新的 .NET 数据结构来扩展 Garnet 的功能,以超越核心 API。最后,Garnet 具有开箱即用的高效 TLS 支持。
相对于同类开源缓存存储,小批量和许多客户端会话的服务器吞吐量(操作/秒)提高了几个数量级。
在 Windows 和 Linux 上启用加速 TCP 的商品云 (Azure) 计算机上,单次操作延迟极低(在 99.9% 时通常小于 300 微秒)。
随着客户端数量的增加,无论有或没有客户端批处理,都可以实现更好的可扩展性。
能够通过单个共享内存服务器实例使用服务器计算机的所有 CPU/内存资源(无需节点内集群)。
支持大于内存的数据集,溢出到本地和云存储设备。
数据库功能,例如快速检查点和恢复以及发布/订阅。
支持多节点分片哈希分区(Redis“集群”模式)、状态迁移和复制。
通过全面的测试套件进行了良好的测试(针对 Garnet 及其存储层 Tsavorite 进行了数千次单元测试)。
易于演变和扩展的 C# 代码库。
实验一:不同数量客户端会话的吞吐量比较
如果您的应用程序或服务需要一个具有大量实用功能、高性能以及基于最先进的 Microsoft Research 技术的现代设计的缓存存储,那么 Garnet 就是适合您的系统。