AWS 기술 블로그

Valkey 및 Redis 오픈 소스용 오픈 소스 클라이언트 라이브러리, Valkey GLIDE 소개

이 글은 AWS Database Delivery Blog에 게시된 Introducing Valkey GLIDE, an open source client library for Valkey and Redis open source by Asaf Porat Stoler and Mickey Hoter 을 한국어 번역 및 편집하였습니다.

오픈 소스(Apache 2.0 라이센스) Valkey 클라이언트 라이브러리인 Valkey General Language Independent Driver for the Enterprise(GLIDE)를 소개합니다. Valkey는 캐싱, 세션 저장소, 순위표 및 메시지 대기열과 같은 다양한 작업 부하를 지원하는 고성능 키-값 데이터 저장소를 제공하는 BSD(Berkeley Software Distribution)에 따라 허용되는 오픈 소스 라이선스 소프트웨어입니다. Valkey GLIDE는 Valkey의 공식 클라이언트 라이브러리 중 하나입니다. 모든 Valkey 명령을 지원하며 GitHub 저장소valkey.io 프로젝트 아래에 있습니다. GLIDE는 Valkey 7.2와 Redis 오픈 소스 6.2, 7.0, 7.2를 지원하며 향후 Valkey 릴리스도 계속 지원할 예정입니다. 애플리케이션 프로그래머는 GLIDE를 사용하여 애플리케이션을 Valkey 및 Redis OSS와 호환되는 서비스에 안전하고 안정적으로 연결할 수 있습니다. Valkey GLIDE는 수십만 명의 고객이 사용하는 Redis OSS 호환 서비스를 10년 넘게 운영하면서 배운 모범 사례를 내장하기 위해 AWS에서 설계하고 구성했습니다. 언어별 래퍼를 사용하여 공통 코어로 구현된 GLIDE는 애플리케이션 프로그래밍 언어 간에 일관된 기능과 서비스 품질을 제공합니다.

이 게시물에서는 Valkey GLIDE의 이점에 대해 설명합니다

엔드투엔드 운영 우수성 과제

클라우드 및 온프레미스 환경에서 데이터베이스를 실행하고 워크로드를 캐싱하는 고객은 클라이언트 라이브러리와 서비스 간의 최적의 연결 및 통신에 중점을 두는 것을 포함하여 엔터프라이즈급 안정성과 원활한 운영 우수성을 요구합니다. 수십만 명의 고객에게 서비스를 제공한 13년 이상의 운영 경험을 바탕으로 AWS의 인 메모리 데이터베이스 팀은 고객 중단을 초래한 많은 운영 문제가 클라이언트 측 오류에서 비롯된다는 사실을 발견했습니다. 예를 들어 잘못된 오류 처리, 잘못된 재시도 논리를 사용한 연결 관리, 잘못된 기본 구성 등은 운영 문제를 유발하거나 악화시킵니다. 게다가 몇몇 클라이언트 라이브러리는 성능에 최적화되지 않았거나 완전히 호환되지 않습니다. 예를 들어 일부는 복제본에서 읽는 기능을 지원하지 않으며 이는 클라이언트 측 읽기 대기 시간에 큰 영향을 미칠 수 있습니다. 마지막으로, 다양한 프로그래밍 언어로 마이크로서비스나 애플리케이션을 실행하는 고객은 동작이 다른 다양한 클라이언트 라이브러리를 사용해야 하는 또 다른 과제에 직면합니다. 각 클라이언트 라이브러리에 대한 사용자 지정 코드와 구성을 별도로 개발하고 유지 관리해야 합니다.

Valkey GLIDE 소개

Valkey GLIDE를 사용하면 개발자는 탄력적인 Valkey 및 Redis OSS 기반 애플리케이션을 구축하고 일관된 클라이언트 경험을 제공하여 영향을 미치는 운영 이벤트의 빈도를 줄이고 발생 시 문제 해결을 단순화할 수 있습니다. Valkey GLIDE는 AWS의 후원과 지원을 받습니다. GLIDE는 모든 Valkey 및 Redis OSS 명령을 지원하고 안정성을 위해 설계되었으며 모범 운영 사례를 기반으로 사전 구성되었습니다. 예를 들어, 최적화된 DNS 구성 및 연결 처리 논리를 통해 노드 오류, 클러스터 토폴로지 변경 및 연결 재설정을 원활하게 처리합니다.

개발 및 운영의 일관성을 달성하기 위해 Valkey GLIDE는 지원되는 프로그래밍 언어에 사용할 수 있는 확장 기능과 함께 Rust로 작성된 핵심 드라이버 프레임워크를 사용하여 구현됩니다. 이 디자인은 여러 언어로 된 새로운 기능의 출시 시간을 단축합니다. 이번 릴리스에서는 GLIDE를 Java 및 Python으로 사용할 수 있으며 앞으로 더 많은 프로그래밍 언어를 지원할 예정입니다. 지원되는 언어 버전 및 전제 조건에 대한 자세한 내용을 보려면 GitHub 리포지토리를 방문하세요.

Valkey GLIDE 클라이언트 라이브러리 디자인

Valkey GLIDE는 Rust로 코딩된 핵심 엔진을 사용하여 구축되었으며 래퍼라고 하는 언어별 바인딩과 이를 모두 연결하는 통신 계층으로 보완되었습니다. GLIDE의 Rust 코어는 최고의 Rust Redis OSS 클라이언트 라이브러리인 redis-rs를 기반으로 합니다. 우리는 내장된 메모리 안전 기능과 고성능 기능 때문에 Rust를 선택했습니다. 다음 다이어그램은 대략적인 디자인을 보여줍니다.

Valkey GLIDE

Rust 코어는 Valkey 또는 Redis OSS와의 통신을 담당하며 연결 처리, 토폴로지 조정, 오류 관리, RESP 프로토콜 구문 분석 및 메시지 캡슐화와 같은 측면을 다룹니다. 언어 래퍼는 경량으로 설계되었으며 핵심에 대한 언어별 인터페이스 역할을 합니다. 통신 계층은 코어와 래퍼 간의 요청과 응답의 원활한 전송을 제공합니다. 이 디자인은 다양한 프로그래밍 언어에 걸쳐 균일한 인터페이스와 일관된 클라이언트 동작을 제공합니다. 이는 Valkey 또는 Redis OSS에 연결되는 다양한 언어로 작성된 애플리케이션이 있고 개발자가 유사한 클라이언트 경험을 가질 수 있는 경우 중요합니다.

기능 하이라이트

Valkey GLIDE는 호환되며 모든 Valkey 및 Redis OSS 명령을 지원합니다. GLIDE는 업계 표준으로 구현된 고급 기능과 모범사례를 지원합니다. 다음은 몇 가지 예입니다.

  • 클러스터 토폴로지 변경 검색을 통한 가용성 향상 – Valkey 클러스터 토폴로지는 시간이 지남에 따라 변경될 수 있습니다. 새로운 노드가 추가되거나 제거될 수 있으며, 특정 슬롯을 소유한 기본 노드가 변경될 수 있습니다. Valkey GLIDE는 Valkey가 슬롯 소유권 변경을 나타낼 때마다 모범 사례를 사용하여 클러스터 토폴로지를 자동으로 재발견합니다. GLIDE는 다수결 규칙 알고리즘을 사용하여 여러 노드를 쿼리하여 새로운 클러스터 토폴로지를 결정하고, CLUSTER 명령의 폭주(대기 시간을 늘릴 수 있음)를 방지하고, 잠재적인 가동 중지 시간을 줄이고, 분할 브레인 네트워크 오류를 방지합니다. 또한 GLIDE는 정기적인 검사를 실행하여 토폴로지 변경 사항을 사전에 식별합니다. 이러한 기능을 사용하면 GLIDE가 클러스터 토폴로지와 동기화 상태를 유지할 수 있습니다.
  • 복제본 읽기로 대기 시간 단축 – 데이터베이스의 복제본을 읽으면 읽기 성능, 확장성, 고가용성이 향상되고 기본 인스턴스에서 읽기 워크로드가 오프로드됩니다. 기본적으로 Valkey GLIDE는 잠재적으로 오래된 데이터를 읽는 것을 방지하기 위해 특정 슬롯을 소유한 기본 노드에 읽기 명령을 지시하며 이는 대부분의 클라이언트 라이브러리와 일치합니다. 읽기 처리량을 우선시하고 최종 일관성을 허용할 수 있는 애플리케이션의 경우 GLIDE는 읽기를 복제본 노드로 라우팅하는 옵션을 제공합니다. GLIDE는 복제본 설정에서 다음 읽기를 지원하므로 특정 사용 사례에 맞는 것을 선택할 수 있습니다.
    • PRIMARY(기본값) – 최신 데이터를 얻으려면 항상 기본에서 읽습니다.
    • PREFER_REPLICA – 라운드 로빈 방식으로 모든 복제본 간에 요청을 분산시킵니다. 사용 가능한 복제본이 없으면 요청을 기본으로 라우팅합니다.
  • 상태 저장 연결을 통한 자동 게시/구독 재구독 – Valkey GLIDE의 게시/구독 채널은 상태 저장입니다. 연결이 끊어지거나 확장 또는 축소와 같은 토폴로지 업데이트가 발생하는 경우 GLIDE는 자동으로 새 노드에 대한 연결을 다시 구독합니다. 장점은 애플리케이션 코드가 단순화되어 재연결 중에 새 노드에 대한 재구독을 처리할 필요가 없다는 것입니다.이러한 기능 외에도 GLIDE는 Lua 스크립트, Async API, 트랜잭션 지원, 연결 처리 모범 사례(예: 시간 제한 및 지수 백오프)를 지원합니다. Valkey GLIDE는 모든 OSS 명령을 지원합니다.

시작하기

Valkey GLIDE는 Java 및 Python에서 사용할 수 있으며 표준 패키지 관리자를 사용하여 다운로드할 수 있습니다.

Python의 경우 pip를 사용하여 GLIDE를 설치하려면 다음 코드를 사용하세요:

$ pip install valkey-glide

다음 코드는 시작하는 데 도움이 되도록 GLIDE를 Python 애플리케이션에 통합하는 방법을 보여줍니다.

import asyncio
from glide import GlideClusterClient, GlideClusterClientConfiguration, NodeAddress
async def main():
    addresses = [NodeAddress("127.0.0.1", 6379)]
    config = GlideClusterClientConfiguration(addresses=addresses)
    client = await GlideClusterClient.create(config)
    await client.set("test_key", "Hello, Valkey GLIDE!")
    value = await client.get("test_key")
    print(value)  # Output: "Hello, Valkey GLIDE!"
asyncio.run(main())

Java의 경우 maven을 사용하여 Valkey GLIDE를 설치하려면 GitHub 저장소에 설명된 단계를 따르세요.

다음은 Java의 동일한 코드 예제입니다:

/** Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0 */
package glide.examples;

import glide.api.GlideClusterClient;
import glide.api.models.configuration.GlideClusterClientConfiguration;
import glide.api.models.configuration.NodeAddress;
import java.util.concurrent.ExecutionException;

public class ExamplesApp {
    // main application entry point
    public static void main(String[] args) {
        String host = "127.0.0.1";
        Integer port = 6379;
        GlideClusterClientConfiguration config =
                GlideClusterClientConfiguration.builder()
                        .address(NodeAddress.builder().host(host).port(port).build()).build();
        try {
            GlideClusterClient client = GlideClusterClient.createClient(config).get();
            client.set("test_key", "Hello, Valkey GLIDE!").get();

결론

클라우드 및 온프레미스 환경 전반에서 데이터베이스를 실행하고 워크로드를 캐싱하는 고객은 엔터프라이즈급 안정성과 운영 우수성을 요구합니다. Valkey GLIDE는 이러한 목표를 달성하는 데 도움이 되는 고객 경험을 제공하도록 설계되었습니다. 이는 AWS에서 지원되며 모범 사례로 사전 구성되어 제공됩니다. 이번 릴리스에서는 GLIDE를 Java 및 Python에서 사용할 수 있으며 현재 개발 중인 추가 언어도 지원됩니다. Valkey GLIDE는 오픈 소스이며 허용 라이선스(Apache 2.0 라이선스)가 있으며 Amazon ElastiCacheAmazon MemoryDB를 포함하여 버전 6.2, 7.0 및 7.2를 지원하는 모든 Valkey 또는 Redis OSS 호환 배포판과 함께 사용할 수 있습니다. 주요 오픈 소스 패키지 관리자에서 다운로드하여 시작할 수 있습니다. 또한, Valkey GLIDE GitHub 저장소에 기여하는 작업도 함께하실 수 있습니다.

Yujin Cho

Yujin Cho

조유진 테크니컬 어카운트 매니저는 다양한 데이터베이스의 운영과 데이터 분석 경험을 바탕으로 고객이 데이터 기반의 비즈니스 목표를 달성할 수 있도록 고객과 함께 효율적인 아키텍처와 안정적인 운영 환경을 구성하기 위해 노력하고 있습니다.