PayPalは先日、RocksDBを基礎ストレージエンジンとする分散型キーバリューストアであるJunoDBをオープンソース化した。可用性が高くセキュリティに特化したデータベースであるJunoDBは、PayPalで毎日3,500億件のリクエストに対応している。
Golangで書かれたJunoDBは、プロキシベースのアーキテクチャを持ち、リニアな水平接続のスケーリングが可能である。このデータベースは、一貫したハッシュを使用してデータを分割し、クラスタを拡張、縮小する際のデータ移動を最小限に抑える。ダウンタイムゼロを実現するために、JunoDBはデータセンター内およびデータセンター間のレプリケーションを使用する。また、クォーラムベースのプロトコルと2フェーズコミットにより、データの一貫性を確保している。PayPalのプリンシパルMTSであるYaping Shi氏は、次のように書いている。
PayPalでは、ログインからリスク、最終的なトランザクション処理まで、ほぼすべてのコアバックエンドサービスがJunoDBに依存しています。JunoDBを使えば、アプリケーションはデータを効率的に保存・キャッシュして、リレーショナル・データベースや他のサービスの高速アクセスや負荷軽減を実現できます。
JunoDBは、3つの主要コンポーネントで構成される。JunoDBクライアントライブラリ(さまざまな言語で利用可能)、JunoDBクライアントプロキシ(ストレージサーバーと接続し、シャーディングを担当するロードバランサー)、JunoDBストレージ(高性能組み込みデータベースRockDBを搭載し、インメモリとディスクの両方を永続化ストレージとして提供)。
ノードが故障した場合でも、自動的かつ瞬時にフェイルオーバーが行われるため、リーダーの再選択やデータの再分配は必要ない。
この新しいNoSQLソリューションの使用例としてが提案されているのは、ユーザー設定、アカウント詳細、API応答などの情報を保存するキャッシング、操作が冪等であることを確認し重複する処理を排除すること、地理的に離れているデータベース間のレプリケーション遅延を解決するレイテンシーブリッジなどである。Shi氏は、このプロジェクトが社内でどのように発展していったかを説明した。
当初はシングルスレッドのC++プログラムでしたが、その後Golangで書き直され、高度な並行処理とマルチコアに対応しました。また、JunoDBは、インメモリ型の短いTTL(Time To Live)データストアから、長いTTLをサポートする永続データストアへと進化し、デフォルトでディスク上の暗号化と転送中のTLSが有効になっておりデータセキュリティを向上させています。
Mercado LibreのシニアソフトウェアエンジニアであるNahim Felicito Gomez氏は次のようにコメントしている。
JunoDBをGolangで書き直すことで、PayPalはこの言語の並行処理とマルチコア機能を活用し、JunoDBクライアントライブラリを構築するのに理想的な選択となりました。
Hacker Newsでは、多くのユーザーがこのプロジェクトとキーバリューストアの利点について、JunoDBとFoundationDBなどの他のデータベースと比較しながら議論しているが、ユーザーのgregwebs氏は発表データがないことに疑問を呈している。
ベンチマークや、何らかの数値の言及があるといいのですが。TiKVは、ほとんど同じアーキテクチャのCNCF寄贈プロジェクトで、200ノードよりも大きなクラスタに導入されています。
JunoDBは、オープンソースプロジェクトとしてGitHubでApache 2ライセンスで公開されている。開発者がこのデータベースを効果的に活用できるように、PayPalはサーバーのセットアップと クライアント構築のチュートリアル動画を公開した。Golangによるクライアントや、Kubernetes用のJunoDBオペレータもロードマップにある。