본문으로 건너뛰기
로그인 둘러보기
개발·코딩·데이터베이스 · 윈도우즈 유틸

Garnet (.NET 8.0)

0

Garnet은 Microsoft Research에서 개발한 .NET 8.0 기반 원격 캐시 스토어입니다.

동시 처리원격 캐시저지연지속성캐시클러스터키-값 저장소해시 테이블

소개

Garnet은 Microsoft Research에서 개발한 .NET 8.0 기반 원격 캐시 스토어입니다. RESP 와이어 프로토콜을 채택해 C#의 StackExchange.Redis 등 기존 Redis 클라이언트를 수정 없이 그대로 사용할 수 있으며, 높은 처리량·낮은 지연 시간·확장 가능한 저장소·복구·클러스터 샤딩과 동적 키 마이그레이션을 지원하도록 설계된 오픈소스 프로젝트입니다.

상세정보

고성능 스토리지 엔진 Tsavorite

Garnet은 자체 개발한 Tsavorite 저장소 계층을 사용하며, 스레드 확장성, 계층적 저장(메모리·SSD·클라우드 스토리지), 빠른 논블로킹 체크포인팅, 복구, 영속성을 위한 작업 로그, 멀티키 트랜잭션 지원, 개선된 메모리 관리와 재사용을 제공합니다. .NET 런타임의 신중한 활용을 통해 Linux와 Windows 모두에서 state-of-the-art 성능을 달성하도록 설계되었습니다.

풍부한 RESP API와 객체 타입

Garnet은 원시 문자열(get, set, 키 만료 등), 분석(HyperLogLog, Bitmap), 객체(정렬 집합, 리스트 등) 등 폭넓은 API를 구현합니다. 클라이언트 측 RESP 트랜잭션과 서버 측 C# 저장 프로시저·모듈을 통한 멀티키 트랜잭션을 지원하며, Lua 스크립트도 사용할 수 있습니다. 객체 저장소에서는 Sorted Set, Set, Hash, List, Geo 등 복합 객체 타입과 .NET 데이터 구조를 통한 확장이 가능합니다.

플러그형 네트워크 계층과 보안

빠르고 플러그 가능한 네트워크 계층은 향후 커널 바이패스 스택 활용을 포함한 확장을 염두에 두고 설계되었습니다. .NET의 SslStream 라이브러리를 이용한 TLS 통신과 기본 접근 제어(ACL)를 지원하며, 이름별 ACL을 사용자 지정 확장 명령에 적용하는 기능도 추가되었습니다.

클러스터 모드와 키 마이그레이션

단일 노드뿐 아니라 완전한 기능을 갖춘 클러스터 모드에서 샤딩과 레플리케이션 구성을 생성·관리할 수 있고, 효율적인 동적 키 마이그레이션으로 샤드를 재조정할 수 있습니다. 표준 Redis 클러스터 명령으로 클러스터를 생성·관리하며 노드 간 gossip을 통해 클러스터 상태를 공유·발전시킵니다. 현재 클러스터 모드 설계는 수동적(passive)이며, 리더 선출을 직접 수행하지 않고 사용자가 제공하는 컨트롤 플레인이 내린 명령에 응답하는 형태입니다.

새로운 미리보기 기능

  • Vector Sets(미리보기): DiskANN 알고리즘과 Tsavorite 저장 엔진을 활용한 근사 최근접 이웃 검색을 제공합니다.
  • Range Index(미리보기): Bf-Tree 기반 Garnet 키 위의 보조 범위 및 등등 인덱스를 제공합니다.

Garnet은 어떤 클라이언트와 호환되나요?

RESP 프로토콜을 기본으로 사용하므로 C#의 StackExchange.Redis 등 다양한 언어의 기존 Redis 클라이언트를 수정 없이 그대로 연결해 사용할 수 있습니다.

어떤 런타임이 필요한가요?

소스 빌드는 .NET 10 SDK와 함께 .NET 8 런타임과 타깃 팩이 필요하며, winget 패키지(Microsoft.Garnet.DN8)로 설치해 .NET 8.0 환경에서 실행할 수 있습니다.

클러스터 모드는 어떤 기능을 제공하나요?

샤딩과 레플리케이션을 지원하고 효율적인 동적 키 마이그레이션으로 샤드를 재조정할 수 있습니다. 표준 Redis 클러스터 명령으로 생성·관리되며 노드 간 gossip으로 상태가 공유됩니다.

보안과 접근 제어는 어떻게 되나요?

.NET의 SslStream 기반 TLS 통신과 기본 ACL을 지원하며, 확장 명령에 대한 이름별 ACL 설정도 가능합니다.

시스템 요구사항

소스 코드는 .NET 8.0과 .NET 10을 멀티 타깃으로 빌드하며, .NET 10 SDK와 함께 .NET 8 런타임 및 타깃 팩이 필요합니다. 빌드는 Linux 또는 Windows에서 .NET CLI 또는 Visual Studio 2022 17.x 이상으로 수행할 수 있습니다. winget 패키지 ID는 Microsoft.Garnet.DN8이며, 설치 매니페스트는 zip 형식입니다.