저는 Go에서 Redis에 대한 삽입 가능한 대안을 구축하기 위해 약 1년 전부터 오픈 소스 프로젝트 작업을 시작했습니다. 그때부터 EchoVault 프로젝트를 구축하기 시작했습니다. 그 이후로 이 프로젝트는 어느 정도 관심을 끌었고 심지어 몇몇 기여자들도 얻었습니다.
이 기사에서는 EchoVault와 그 기능, 사용 사례, 개발 동기를 소개합니다.
EchoVault란 무엇입니까?
EchoVault는 Go 애플리케이션에 맞춰진 내장형 인메모리 데이터 저장소입니다. 이는 TCP를 통한 RESP 호환 인터페이스를 제공하는 동시에 애플리케이션에 직접 내장할 수 있는 유연성을 제공합니다.
이를 통해 EchoVault는 일부 사용 사례에서 Redis와 같은 기존 인메모리 데이터 저장소를 대체하고 Go에 대한 향상된 통합을 통해 유사한 기능을 제공하는 것을 목표로 합니다.
EchoVault가 만들어진 이유
EchoVault를 구축하려는 초기 동기는 다음과 같습니다.
- 내재된 유연성: Redis와 같은 기존의 인메모리 데이터 저장소는 별도의 관리와 배포가 필요한 외부 서비스입니다. EchoVault는 개발자가 데이터 저장소를 애플리케이션에 직접 내장하고 배포 프로세스를 간소화할 수 있도록 하여 이러한 오버헤드를 제거합니다.
- Go 생태계 통합: EchoVault는 주로 Go용으로 설계되어 Go 애플리케이션 내에서 원활한 통합과 최적의 성능을 보장합니다. 하지만 TCP를 통한 RESP 호환성도 유지하므로 redis-cli, Jedis 등 기존 Redis 클라이언트와도 호환됩니다.
- Redis 라이선스 변경: EchoVault는 오픈 소스입니다(Apache 2.0에 따라 라이선스가 부여됨). 우리는 오픈 코어가 아닌 완전한 오픈 소스 모델을 유지하기 위해 최선을 다하고 있습니다.
EchoVault에서 제공하는 기능
EchoVault에는 인메모리 데이터 스토리지를 위한 강력한 선택이 되는 다양한 기능이 포함되어 있습니다.
- TLS 및 mTLS 지원: 여러 서버 및 클라이언트 루트 인증 기관(RootCA)을 지원하여 안전한 통신을 제공합니다.
복제 클러스터 지원: 복제 및 클러스터링을 위해 RAFT 알고리즘을 활용합니다.
- 액세스 제어 레이어: 데이터 액세스를 보호하기 위해 사용자 인증 및 권한 부여를 제공합니다.
- 분산 게시/구독 기능: 실시간 데이터 처리를 위해 채널 및 패턴 게시/구독을 지원합니다.
- 데이터 구조: 우리는 세트, 정렬된 세트, 해시, 목록 등을 포함한 다양한 데이터 구조를 지원합니다. 우리는 계속해서 더 많은 데이터 구조와 명령을 추가하고 있습니다.
- 지속성 레이어: 이 레이어는 스냅샷 및 추가 전용 파일 지속성을 통해 데이터 내구성을 보장합니다. AOF 파일은 RESP와 호환되지만 아직 Redis와 완전히 호환되지는 않습니다.
- 키 제거 정책: 메모리 사용량을 관리하기 위해 키 제거에 대한 다양한 전략을 구현합니다. EchoVault에는 수동 및 활성 키 제거 기능이 있습니다. 수동 키 제거를 사용하면 만료된 키는 다음에 액세스할 때까지 제거되지 않습니다. 활성 제거를 통해 EchoVault는 만료된 키를 사전에 삭제합니다.
- 명령 확장: 공유 객체 파일과 내장된 API를 통해 명령의 런타임 확장을 허용합니다.
개발 초기 단계에 있기 때문에 기능 목록이 계속해서 확장되고 있습니다. 다음을 포함하여 미래를 대비한 몇 가지 멋진 기능이 준비되어 있습니다.
EchoVault의 아키텍처
EchoVault는 독립형 배포와 클러스터형 배포를 모두 지원합니다.
독립형 모드
독립 실행형 모드에서 EchoVault는 단일(독립 실행형) 인스턴스를 작동합니다. 이것이 EchoVault를 실행하는 가장 쉬운 방법입니다. 내장된 라이브러리에서 독립형 인스턴스를 실행하거나 TCP 연결을 허용하는 자체 프로세스로 시작할 수 있습니다.
내장된 인스턴스는 TCP 연결도 허용하므로 TCP 클라이언트에서 Go 프로세스와 통신할 수 있습니다.
RAFT 복제 클러스터 모드
강력한 일관성과 내결함성이 필요한 애플리케이션의 경우 EchoVault는 RAFT 기반 복제 클러스터 모드를 지원합니다.
RAFT는 분산 시스템 전반에 걸쳐 데이터 일관성을 보장하는 합의 알고리즘입니다. 이 모드에서는 여러 EchoVault 인스턴스가 클러스터를 형성하여 데이터 복제를 제공하고 노드 오류가 발생하더라도 데이터의 일관성이 유지되도록 보장할 수 있습니다.
RAFT 클러스터 모드의 주요 기능:
- 내결함성: 클러스터의 일부 노드에 장애가 발생하더라도 데이터 가용성을 보장합니다.
- 일관성: 클러스터의 모든 노드가 동일한 데이터를 갖도록 보장합니다.
- 확장성: 클러스터에 더 많은 노드를 추가하여 수평적 확장이 가능합니다.
임베디드 모드에서도 EchoVault 클러스터를 실행할 수 있습니다. 이는 애플리케이션 인스턴스가 세 번째 서비스를 배포할 필요 없이 EchoVault 계층을 통해 서로 통신할 수 있음을 의미합니다. 이는 애플리케이션 인스턴스 클러스터 전체의 세션 관리와 같은 사용 사례에 이상적입니다.
EchoVault 사용 사례
EchoVault는 다재다능하여 광범위한 애플리케이션에 적합합니다. 다음은 몇 가지 잠재적인 사용 사례입니다.
- 인메모리 캐싱
시나리오: 전자 상거래 웹 사이트는 성능 향상을 위해 제품 세부 정보와 사용자 세션 정보를 캐시해야 합니다.
해결 방법: EchoVault를 사용하여 자주 액세스하는 데이터를 캐시하여 응답 시간을 단축합니다.
이점: 페이지 로드 속도가 빨라지고 사용자 경험이 향상되며 데이터베이스 부담이 줄어듭니다.
- 서비스 발굴
시나리오: 마이크로서비스 아키텍처에는 서비스 간 통신을 위한 동적 서비스 검색이 필요합니다.
솔루션: 서비스 엔드포인트를 EchoVault에 저장하여 서비스가 서로 효율적으로 검색하고 통신할 수 있도록 합니다.
이점: 서비스 검색이 단순화되고 커뮤니케이션 효율성이 향상됩니다.
- 세션 관리
시나리오: 분산 웹 애플리케이션은 여러 인스턴스에 걸쳐 사용자 세션을 관리해야 합니다.
솔루션: EchoVault 내장형 클러스터를 사용하여 세션 데이터를 저장하여 모든 애플리케이션 인스턴스에서 일관성과 접근성을 보장합니다.
이점: Redis와 같은 보조 서비스를 배포하지 않고도 애플리케이션 클러스터 전체에서 일관된 세션 관리가 가능합니다.
- 실시간 분석
시나리오: 금융 거래 플랫폼에는 거래 데이터에 대한 실시간 분석 및 모니터링이 필요합니다.
솔루션: 추적 및 분석을 위해 정렬된 세트와 게시/구독 기능을 활용하여 EchoVault에서 실시간 거래 데이터를 저장하고 처리합니다.
이점: 실시간 데이터 처리 및 더욱 빠른 분석.
- 분산 작업 대기열
시나리오: 백엔드 시스템은 작업을 관리하고 여러 작업자 노드에 배포해야 합니다.
해결 방법: 작업이 목록에 푸시되고 작업자 노드가 처리를 위해 작업을 팝업하는 EchoVault의 목록 데이터 구조를 사용하여 작업 대기열을 구현합니다.
장점: 효율적인 작업 분배 및 확장성.
- 기능 플래그 및 구성 관리
시나리오: SaaS 애플리케이션은 애플리케이션을 재배포하지 않고도 기능을 동적으로 활성화 또는 비활성화하고 구성 설정을 관리해야 합니다.
해결 방법: EchoVault에 기능 플래그와 구성 설정을 저장하십시오.
이점: 동적 구성 관리 및 가동 중지 시간 감소.
- 속도 제한 및 조절
시나리오: API 게이트웨이는 남용을 방지하고 공정한 사용을 보장하기 위해 비율 제한을 적용하고 요청을 제한해야 합니다.
솔루션: EchoVault의 인메모리 기능을 사용하여 속도 제한을 구현하여 요청 수를 추적하고 실시간으로 제한을 적용합니다.
이점: 효과적인 속도 제한 및 향상된 API 안정성.
- 리더 선출
시나리오: 분산 서비스 클러스터는 작업을 조정할 리더를 선출해야 합니다.
해결 방법: EchoVault의 내장형 분산 클러스터 리더 선택을 활용하여 단 하나의 애플리케이션 인스턴스만 리더로 지정되도록 합니다.
이점: 애플리케이션 수준에서 직접 구현하지 않고도 신뢰할 수 있는 리더 선택 및 향상된 조정이 가능합니다.
결론
EchoVault는 야심찬 프로젝트입니다. 이러한 초기 단계에서는 많은 문제를 해결하고 많은 기능을 추가해야 할 것으로 예상됩니다. 그러나 우리는 이러한 도전을 환영하며 Go 커뮤니티가 프로젝트에 참여하기를 바랍니다.
이 기사가 호기심을 불러일으켰거나 이와 같은 프로젝트에 기여하는 데 관심이 있다면 GitHub를 확인하고 별표를 남겨주세요! 우리는 언제나 더 많은 피드백과 참여를 환영합니다!
위 내용은 EchoVault: Go에 내장 가능한 Redis 대안의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!