微软开源Garnet存储兼容Redis

微软开源了NoSQL系统Garnet,旨在创建缓存存储并与现有的Redis存储客户端库兼容。 Garnet 支持创建可扩展的数据缓存集群,可以使用跨集群节点的复制、密钥迁移和数据分片。该项目采用 C# 编写,存储核心采用 C++,在 MIT 许可证下开放,可以在 .NET 支持的所有平台上运行(主要平台是 Linux 和 Windows)。

为了存储数据,使用了 Tsavorite 引擎(Microsoft FASTER 存储的一个分支),它支持多线程查询处理、事务、以非阻塞模式修复更改(检查点)、从故障中恢复、保存冗余副本以及维护操作日志。 Garnet 中的网络引擎是使用 ShadowFax 研究项目提出的共享内存架构构建的。 TLS 处理和与存储的交互在单个线程中执行,这使得可以避免切换线程的开销,并在通过网络传输数据时更有效地使用 CPU 缓存。

Garnet架构将解析和处理请求的逻辑与存储操作分开。数据使用两个基于 Tsavorite 库的键值存储进行存储。第一个“主”存储针对快速字符串操作进行了优化,第二个“对象”存储针对复杂对象和高级数据类型(例如哈希和列表)进行了优化。第二个存储中的数据类型是使用.NET 库实现的。数据存储在堆(C# 堆)上,这使得数据可以高效更新,并以序列化形式存储在磁盘上。

微软开源Garnet存储兼容Redis

石榴石的特点:

  • 可以部署多层存储,涵盖 RAM、SSD 驱动器和云存储,其中需求较少的数据被推送到慢速存储中,以创建大于 RAM 的缓存。
  • 可扩展的设备支持,允许创建针对不同设备进行优化的层,例如,有用于 SDD、硬盘驱动器和 Azure 存储云存储的层。
  • 一种重用 RAM 中释放空间、防止碎片的有效机制。
  • 对用于索引、日志和对象存储的内存大小的可配置限制。
  • RESP 协议用于访问存储,这使得 Garnet 可以与未经修改的 Redis 客户端一起使用。
  • 支持存储字符串值和复杂的数据结构,例如列表、哈希、集合、排序列表和地理位置数据。能够确定密钥的生命周期。
  • 用于执行分析查询(HLL/Hyperloglog、位图)、事务(MULTI/EXEC)和使用发布/订阅范例的 API 的可用性。
  • 通过 ACL 进行灵活访问控制的方法的可用性。
  • 能够以 JSON 或 redis.conf 格式定义配置。
  • 支持连接附加网络处理程序。能够使用 TLS 加密流量(基于 SslStream)。
  • 能够在 C# 中创建扩展,以使用字符串和对象实现其他操作。
  • 支持跨多个键的事务存储过程。
  • 能够从先前保存的位置恢复状态(检查点恢复)。存在仅附加文件模式(AOF,仅附加文件),其中所有旧数据仍然可用并且不会被替换。
  • 支持创建具有复制、分片、节点间动态密钥迁移以及故障节点恢复的存储集群。
  • 执行查询时具有高性能和低延迟。通过大量客户端会话高效处理小批量请求,使您能够实现比竞争解决方案高出一个数量级的吞吐量(每秒处理的请求数)。在 Azure 云中的虚拟机中运行时,大多数情况下,客户端延迟不超过 300 微秒。在我们的测试中,Garnet 在性能和响应能力方面明显领先于 Redis、Dragonfly 和 KeyDB。在某些测试中,Garnet 的性能比竞争系统高出十倍之多。
    微软开源Garnet存储兼容Redis
    微软开源Garnet存储兼容Redis
    微软开源Garnet存储兼容Redis
    微软开源Garnet存储兼容Redis

来源: opennet.ru

添加评论