ホームページ  >  記事  >  バックエンド開発  >  EchoVault: Go における埋め込み可能な Redis の代替手段

EchoVault: Go における埋め込み可能な Redis の代替手段

WBOY
WBOYオリジナル
2024-07-24 10:42:11749ブラウズ

EchoVault: Embeddable Redis Alternative in Go

私は約 1 年前に、Go で Redis に代わる埋め込み可能な代替手段を構築するオープンソース プロジェクトに取り組み始めました。それが私が 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 を介してコマンドのランタイム拡張を可能にします。

開発の初期段階にあるため、機能リストは拡大し続けています。将来的には、次のような優れた機能がいくつか用意されています。

  • ストリーム
  • Lua モジュールを使用した拡張機能。
  • シャーディング

EchoVault のアーキテクチャ

EchoVault は、スタンドアロン展開とクラスター化された展開の両方をサポートします。

スタンドアロンモード

スタンドアロン モードでは、EchoVault は単一の (スタンドアロン) インスタンスを動作します。これは EchoVault を実行する最も簡単な方法です。埋め込みライブラリからスタンドアロン インスタンスを実行することも、TCP 接続を受け入れる独自のプロセスとして開始することもできます。
埋め込みインスタンスは TCP 接続も受け入れることができるため、TCP クライアントから Go プロセスと通信できるようになります。

RAFT レプリケーション クラスター モード

強い一貫性と耐障害性を必要とするアプリケーションのために、EchoVault は RAFT ベースのレプリケーション クラスター モードをサポートしています。

RAFT は、分散システム間でデータの一貫性を保証するコンセンサス アルゴリズムです。このモードでは、複数の EchoVault インスタンスがクラスターを形成し、データ レプリケーションを提供し、ノード障害が発生した場合でもデータの一貫性を確保できます。

RAFT クラスター モードの主な機能:

  • フォールト トレランス: クラスター内の一部のノードに障害が発生した場合でも、データの可用性を確保します。
  • 一貫性: クラスター内のすべてのノードが同じデータを持つことを保証します。
  • スケーラビリティ: クラスターにノードを追加することで水平方向のスケーリングが可能です。

埋め込みモードでも EchoVault クラスターを実行できます。これは、アプリケーション インスタンスが、3 番目のサービスをデプロイしなくても、EchoVault レイヤーを介して相互に通信できることを意味します。これは、アプリケーションのインスタンスのクラスター全体でのセッション管理などのユースケースに最適です。

EchoVault の使用例

EchoVault は多用途性を備えているため、幅広いアプリケーションに適しています。考えられる使用例をいくつか示します:

  • メモリ内キャッシュ シナリオ: 電子商取引 Web サイトでは、パフォーマンスを向上させるために製品の詳細とユーザー セッション情報をキャッシュする必要があります。 解決策: EchoVault を使用して頻繁にアクセスされるデータをキャッシュし、応答時間を短縮します。 利点: ページの読み込みが速くなり、ユーザー エクスペリエンスが向上し、データベースの負担が軽減されます。
  • サービスディスカバリ シナリオ: マイクロサービス アーキテクチャでは、サービス間通信のために動的なサービス検出が必要です。 解決策: サービス エンドポイントを EchoVault に保存すると、サービスが効率的に検出して相互に通信できるようになります。 利点: サービスの検出が簡素化され、通信効率が向上します。
  • セッション管理 シナリオ: 分散 Web アプリケーションは、複数のインスタンスにわたるユーザー セッションを管理する必要があります。 解決策: EchoVault 組み込みクラスターを使用してセッション データを保存し、すべてのアプリケーション インスタンスにわたる一貫性とアクセス性を確保します。 利点: Redis のようなセカンダリ サービスをデプロイすることなく、アプリケーションのクラスター全体で一貫したセッション管理が可能です。
  • リアルタイム分析 シナリオ: 金融取引プラットフォームでは、取引データのリアルタイム分析と監視が必要です。 ソリューション: リアルタイム取引データを EchoVault に保存して処理し、ソートされたセットとパブリッシュ/サブスクライブ機能を活用して追跡と分析を行います。 利点: リアルタイムのデータ処理とより高速な分析。
  • 分散タスクキュー シナリオ: バックエンド システムは、タスクを管理し、複数のワーカー ノードに分散する必要があります。 解決策: EchoVault のリスト データ構造を使用してタスク キューを実装します。タスクはリストにプッシュされ、ワー​​カー ノードは処理のためにタスクをポップします。 利点: 効率的なタスク分散とスケーラビリティ。
  • 機能フラグと構成管理 シナリオ: SaaS アプリケーションは、アプリケーションを再デプロイすることなく、機能を動的に有効または無効にし、構成設定を管理する必要があります。 解決策: 機能フラグと構成設定を EchoVault に保存します。 利点: 動的な構成管理とダウンタイムの削減。
  • レート制限とスロットリング シナリオ: API ゲートウェイは、不正行為を防止し、公正な使用を確保するために、レート制限を適用し、リクエストをスロットルする必要があります。 解決策: EchoVault のメモリ内機能を使用してレート制限を実装し、リクエスト数を追跡​​し、リアルタイムで制限を適用します。 利点: 効果的なレート制限と API の信頼性の向上。
  • リーダー選挙 シナリオ: 分散サービスのクラスターでは、タスクを調整するリーダーを選出する必要があります。 解決策: EchoVault の組み込み分散クラスターのリーダー選挙を利用して、アプリケーション インスタンスが 1 つだけリーダーとして指定されるようにします。 利点: アプリケーション レベルで自分で実装することなく、信頼性の高いリーダー選出と調整の向上が可能です。

結論

EchoVault は野心的なプロジェクトです。これらの初期段階では、多くの不具合を解決し、多くの機能を追加する必要があると予想されます。ただし、私たちはこの挑戦を歓迎しており、Go コミュニティをプロジェクトに参加させたいと考えています。

この記事があなたの好奇心を刺激した場合、またはこのようなプロジェクトに貢献することに興味がある場合は、GitHub をチェックしてスターを付けてください。私たちは、より多くのフィードバックや貢献をいつでもお待ちしています!

以上がEchoVault: Go における埋め込み可能な Redis の代替手段の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。