Amazon Web Services ブログ

Valkey GLIDE – Valkey と Redis OSS向けのオープンソースクライアントライブラリのご紹介

本記事は 2024年7月9日に公開された “Introducing Valkey GLIDE, an open source client library for Valkey and Redis open source” を翻訳したものです。


2024年7月9日、私たちは Valkey General Language Independent Driver for the Enterprise (GLIDE) を発表しました。これは、オープンソースでパーミッシブライセンス (Apache 2.0 ライセンス) の Valkey クライアントライブラリです。Valkey は、キャッシュ、セッションストア、リーダーボード、メッセージキューなど、さまざまなワークロードをサポートする高性能のキーバリュー型データストアを提供する、オープンソースで寛容な BSD ライセンスのソフトウェアです。Valkey GLIDE は Valkey の公式クライアントライブラリの 1 つで、すべての Valkey コマンドをサポートしており、GitHub リポジトリ は valkey.io プロジェクトの下にあります。GLIDE は Valkey 7.2 と Redis オープンソース 6.2、7.0、7.2 をサポートしており、今後の Valkey リリースにも対応し続けます。アプリケーションプログラマーは、GLIDE を使用して、アプリケーションを Valkey と Redis OSS 互換のサービスにセキュアかつ安定して接続できます。Valkey GLIDE は、AWS によって設計および構成されており、10 年以上にわたる数十万人のお客様に使用されている Redis OSS 互換サービスの運用から学んだベストプラクティスが組み込まれています。共通のコアと言語固有のラッパーとして実装されている GLIDE は、アプリケーションプログラミング言語間で一貫した機能とサービス品質を提供します。

この投稿では、Valkey GLIDE の利点について説明します。

エンドツーエンドの運用上の優秀性への課題

クラウドとオンプレミス環境で、データベースとキャッシングワークロードを実行しているお客様は、最適な接続性とクライアントライブラリとサービス間の通信に焦点を当てた、エンタープライズグレードの信頼性と、シームレスな運用上の優秀性を求めています。AWS のインメモリデータベースチームは、13 年以上にわたり数十万人のお客様にサービスを提供する中で、お客様の停止を引き起こす運用上の問題の多くは、クライアント側の障害に起因することを発見しました。たとえば、不適切なエラー処理、不適切な再試行ロジックによる接続管理、不適切なデフォルト設定などが、運用上の問題を引き起こしたり、悪化させたりします。さらに、いくつかのクライアントライブラリはパフォーマンスが最適化されていないか、完全な互換性がありません。たとえば、レプリカからの読み取りをサポートしていないものがあり、クライアント側の読み取り待ち時間に大きな影響を与えます。最後に、マイクロサービスやさまざまなプログラミング言語のアプリケーションを実行しているお客様は、別の課題に直面しています。それは、動作が異なる別々のクライアントライブラリを使用する必要があり、それぞれのクライアントライブラリ用にカスタムコードと設定を個別に開発および保守する必要があるということです。

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 は、メモリ安全性と高性能が備わっているため採用しました。次の図は、高レベルの設計を示しています。

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 – リクエストをすべてのレプリカに対してラウンドロビン方式で分散します。利用可能なレプリカがない場合は、リクエストをプライマリにルーティングします。
  • ステートフル接続による自動 pub/sub 再購読 – Valkey GLIDE の pub/sub チャネルはステートフルです。切断時や、スケールイン/アウトなどのトポロジー更新時に、GLIDE は自動的に新しいノードへの接続を再購読します。この利点は、アプリケーションコードが単純化され、再接続時に新しいノードへの再購読を処理する必要がないことです。

これらの機能に加えて、GLIDE は Lua スクリプト、非同期 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();
            var value = client.get("test_key").get();
            System.out.println(value);
        } catch (ExecutionException | InterruptedException e) {
            System.out.println("GLIDE example failed with an exception: ");
            e.printStackTrace();
        }
    }
}

まとめ

クラウドとオンプレミス環境にまたがってデータベースとキャッシングワークロードを実行しているお客様は、エンタープライズグレードの信頼性と運用上の優秀性を求めています。Valkey GLIDE は、これらの目標を達成するのに役立つクライアント体験を提供するように設計されています。AWS がサポートしており、ベストプラクティスが事前設定されています。このリリースでは、GLIDE は Java と Python で利用可能で、他の言語のサポートも積極的に開発中です。Valkey GLIDE はオープンソースで、パーミッシブライセンス (Apache 2.0 ライセンス) が適用されており、バージョン 6.2、7.0、7.2 に対応する Valkey 互換または Redis OSS 互換の配布物であれば、Amazon ElastiCacheAmazon MemoryDB を含め、どの配布物でも使用できます。主要なオープンソースパッケージマネージャーからダウンロードして始められます。詳細は Valkey GLIDE GitHub リポジトリ で確認でき、コントリビューションも受け付けています。


この記事の翻訳は Solutions Architect の堤 勇人が担当しました。