# 마이크로소프트 리서치의 새로운 원격 캐시 저장 기술 'Garnet'

> Clean Markdown view of GeekNews topic #13893. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13893](https://news.hada.io/topic?id=13893)
- GeekNews Markdown: [https://news.hada.io/topic/13893.md](https://news.hada.io/topic/13893.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-20T09:45:13+09:00
- Updated: 2024-03-20T09:45:13+09:00
- Original source: [github.com/microsoft](https://github.com/microsoft/garnet)
- Points: 4
- Comments: 1

## Topic Body

- **Garnet 소개**
  - 마이크로소프트 리서치에서 개발한 새로운 원격 캐시 저장소인 Garnet은 여러 독특한 이점을 제공함.
  - 인기 있는 RESP 와이어 프로토콜을 기반으로 하여, 대부분의 프로그래밍 언어에서 사용 가능한 Redis 클라이언트를 수정 없이 사용할 수 있음.
  - 많은 클라이언트 연결과 작은 배치 작업에서 더 나은 처리량과 확장성을 제공하여 대규모 앱과 서비스의 비용 절감에 기여함.
  - 가속화된 TCP가 활성화된 Azure 클라우드 VM을 사용하여 매우 낮은 클라이언트 지연 시간(99.9%에서 300 마이크로초 미만)을 달성함.
  - 최신 .NET 기술을 기반으로 한 Garnet은 크로스 플랫폼, 확장 가능하며 현대적인 설계를 가지고 있음.
  - .NET의 풍부한 라이브러리 생태계를 활용하여 API 범위를 넓히고, 최적화를 위한 개방적인 기회를 제공함.

- **기능 요약**
  - Garnet은 원시 문자열, 분석적, 객체 작업을 포함한 다양한 API를 구현함.
  - 클라이언트 측 RESP 트랜잭션과 C#으로 작성된 서버 측 저장 프로시저를 통해 멀티 키 트랜잭션을 처리할 수 있음.
  - 사용자가 C#의 편리함과 안전성을 활용하여 원시 문자열과 새로운 객체 유형에 대한 사용자 정의 작업을 정의할 수 있음.

- **성능 미리보기**
  - Garnet과 주요 오픈소스 캐시 저장소를 비교한 몇 가지 주요 결과를 웹사이트에서 제시함.

- **디자인 하이라이트**
  - Garnet의 디자인은 네트워크에서 패킷을 수신하는 것부터 데이터베이스 작업을 파싱하고 처리하는 것, 저장소 상호작용을 수행하는 것까지 캐시 저장소 스택 전체를 재고함.
  - Garnet의 네트워크 계층은 이전 연구인 ShadowFax에서 영감을 받은 공유 메모리 디자인을 상속받음.
  - Garnet의 저장소 디자인은 통합된 작업 로그에 의해 결정되는 두 개의 Tsavorite 키-값 저장소로 구성됨.

- **클러스터 모드**
  - 단일 노드 실행 외에도 Garnet은 샤딩 및 복제 배포를 생성하고 관리할 수 있는 클러스터 모드를 지원함.
  - 클러스터는 아직 작업 중인 상태임.

- **다음 단계**
  - 문서 사이트로 이동하거나 시작하기 섹션 또는 릴리스 섹션으로 직접 이동할 수 있음.

- **라이선스**
  - 이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여되며, LICENSE 파일을 참조할 수 있음.

- **개인정보 보호**
  - 개인정보 보호에 관한 정보는 마이크로소프트의 개인정보 보호 웹사이트에서 찾을 수 있음.

- **기여하기**
  - 이 프로젝트는 기여와 제안을 환영하며, 대부분의 기여는 CLA에 동의해야 함.
  - 마이크로소프트 오픈소스 행동 강령을 채택하였으며, 행동 강령 FAQ를 참조하거나 추가 질문이나 의견이 있을 경우 opencode@microsoft.com으로 연락할 수 있음.

- **상표**
  - 이 프로젝트에는 프로젝트, 제품 또는 서비스에 대한 상표 또는 로고가 포함될 수 있으며, 마이크로소프트 상표 또는 로고의 사용은 마이크로소프트의 상표 및 브랜드 지침을 따라야 함.

### GN⁺의 의견
- Garnet은 기존 Redis 클라이언트와 호환되면서도 더 높은 성능과 확장성을 제공하는 새로운 캐시 저장소로, 대규모 클라우드 서비스를 운영하는 기업에게 매력적일 수 있음.
- 이 기술이 실제 환경에서 얼마나 안정적으로 작동하는지, 그리고 기존의 캐시 솔루션과 비교했을 때 어떤 실질적인 이점을 제공하는지에 대한 장기적인 데이터가 필요함.
- Garnet의 클러스터 모드가 아직 개발 중이라는 점은, 대규모 배포를 고려하는 사용자에게는 중요한 고려 사항이 될 수 있음.
- Garnet이 오픈소스로 제공되기 때문에, 커뮤니티의 기여를 통해 더 많은 기능과 개선이 이루어질 가능성이 있으며, 이는 기술의 성숙도를 높이는 데 기여할 수 있음.
- Garnet을 도입하기 전에 기존 시스템과의 호환성, 성능 향상 대비 비용, 그리고 잠재적인 마이그레이션 비용을 고려해야 할 것임.

## Comments



### Comment 23861

- Author: neo
- Created: 2024-03-20T09:45:13+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39752504) 
- 벤치마크 성능 차트에 따르면, Garnet의 GET 명령어 처리량이 Dragonfly보다 10배 이상 높음. 50% 지연 시간은 Dragonfly보다 약간 높지만, 99번째 백분위수 지연 시간은 Dragonfly보다 약간 낮음. Garnet과 Dragonfly의 처리량과 지연 시간은 Redis보다 훨씬 우수하여, Redis는 상당한 성능 최적화가 필요함을 시사함.
  > Garnet의 저장 계층인 Tsavorite는 OSS FASTER에서 파생되었으며, 스레드 확장성, 계층화된 저장 지원(메모리, SSD, 클라우드 저장소), 빠른 논블로킹 체크포인팅, 복구, 내구성을 위한 작업 로깅, 다중 키 트랜잭션 지원, 더 나은 메모리 관리 및 재사용과 같은 강력한 데이터베이스 기능을 포함함.

- Microsoft Windows Server에서 WSL2에 의존하지 않고 직접 Redis(또는 호환 가능한 경우)를 실행해야 하는 사람들에게 훌륭한 소식임. 이전에는 메모리 사용 문제(주로 메모리 매핑 파일 때문으로 추정)가 있었고 더 이상 지원되지 않는 Redis 포트가 있었음.
  > C#으로 작성된 것을 보는 것은 매우 흥미롭고, 코드를 탐구하는 데 시간을 할애하는 것에 관심이 있음.

- 실제 비-Azure 스택에서 운영될 때의 성능이 인상적인 Redis 대체제임. 실제 세계에서 어떤지 궁금함.

- Microsoft와 .NET 팀이 매우 인상적인 인프라스트럭처 프로젝트를 구축하는 것을 보는 것은 흥미로움. Yarp는 리버스 프록시/API 게이트웨이 등을 하고, 이제는 메모리 캐시를 위한 Garnet이 있음.
  > 내부적으로 많은 필요성이 있고 공유할 의향이 있는 것 같음.

- Garnet이 멀티스레드이기 때문에 `MSET`이 원자적이지 않음. 원자적인 `MSET` 버전을 원한다면 트랜잭션(저장된 프로시저)으로 표현해야 함.
  > 내부적으로 트랜잭션으로 감싸서 명령어를 원자적으로 만들지 않는 이유를 이해하는 데 어려움이 있음. 다른 원자성 "함정"이 무엇이 있는지.

- 여기 댓글들을 보면 더 이상 아무도 memcached를 사용하지 않는 것 같음?

- Microsoft Research는 때때로 인상적인 프로젝트를 내놓음. R&D를 하며 급여를 받는 것은 재미있을 것임. 대기업들이 업계에 도움이 되는 R&D 스타일 프로젝트를 더 많이 했으면 좋겠음. Hashicorp가 시장에 나온다면 좋은 회사가 인수하기를 바람.

- 이 프로젝트는 정말 좋아 보임. 궁극적으로 "Azure Cache for Redis" 리소스를 대체하기를 바람. 현재는 느리고, Windows에서 실행되도록 만들어진 Redis의 포크이며, 인스턴스를 생성하는 데 거의 한 시간이 걸림.

- 이 시스템이 어디에서 성능이 좋지 않은지 궁금함. 더 작은 인스턴스 유형에서의 벤치마크도 보고 싶음. 72vCPU는 꽤 큰 인스턴스임.
