IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

グーグルのクラウドを支えるテクノロジー

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第130回 RDMA技術を活用した分散キャッシュシステム「CliqueMap」(パート1) (中井悦司) 2022年6月

はじめに

 今回からは、2021年に公開された論文「CliqueMap: Productionizing an RMA-Based Distributed Caching System」を元にして、Google社内で使用されているインメモリ分散キャッシュシステム「CliqueMap」のアーキテクチャーを紹介します。CliqueMapでは、ネットワーク経由でサーバーのメモリーにアクセスする「RDMA(リモート・ダイレクトメモリアクセス)」の技術を利用することで、一般的な分散キャッシュシステムよりも高い性能を実現しています。今回は、RDMA技術の概要を説明した上で、CliqueMapでどのようにRDMAが利用されているのかを紹介します。

RDMA技術の概要

 はじめに、RDMA技術の概要を簡単に説明しておきます。RDMAは、サーバー上で稼働するプロセスのメモリ領域をネットワーク経由でアクセス可能にする技術です。Google社内では、Pony Expressと呼ばれる独自のRDMA技術が用いられており、サーバー上で稼働するプロセスは、自身が管理するメモリの指定部分を(L2レイヤーの)ネットワーク経由で外部に公開することができます。他のサーバー上のプロセスは、RDMA用の仮想メモリアドレスを指定して、公開されたメモリ領域のデータにネットワーク経由でアクセスします。この際、サーバー間でのデータ転送処理は、OS(カーネル)の機能を介さずにNIC(ネットワーク・インターフェースカード)の機能によって行われるため、一般的なRPCによるアプリケーション間通信よりも高速にデータのやり取りを行うことができます。ただし、複数のサーバーからの同時アクセスに対する排他制御などの機能は無いため、同時アクセスが発生した場合のデータの整合性を保つための工夫が必要となります。
 なお、RDMAを使用する場合、一般には、RDMAに対応した専用のNICが必要となり、データをやり取りするサーバー間で互換性のあるNICを使用する必要があります。一方、前述のPony Expressでは、ソフトウェアによってRDMA機能を実装しており、ユーザー空間で稼働するプロセスがNICと連携して処理を行います。このため、サーバー間でのNICの互換性を気にする必要がなく、さまざまな世代のハードウェア機器が混在したデータセンターでも利用することができます。RDMA機能を提供するプロセスは特定のCPUコアを占有使用して、OS(カーネル)を介さず、直接にNICとデータのやり取りを行うように実装されており、通常のプロセスよりも高速にデータ転送の処理を実施することができます。

CliqueMapの特徴

 インメモリ分散キャッシュシステムは、メモリー上にデータを保持する分散型のキー・バリューストアです。データキャッシュ専用に設計されているため、保存データの永続性は保証されておらず、記憶領域が不足した場合などには、既存のエントリーは自動で削除されるという特徴があります。基本的にはオープンソースのmemcachedなどと同等の機能になりますが、CliqueMapでは、クライアントがデータを取得する際にRDMAを使用するという特徴があります。つまり、クライアントは、サーバー側のアプリケーションを介さずに、サーバーのメモリー上にあるデータを直接に取得します。一方、データを書き込む際は、同時書き込みの問題を回避するために、通常のRPC(API呼び出し)を用います。データキャッシュの一般的なユースケースではデータの読み出し処理が中心になるので、この部分をRDMAで高速化しようというわけです。CliqueMapはプロダクション環境での大規模な使用を前提としており、一般的なAPIサービスと同様に、継続的な機能拡張や無停止でのメンテナンスができるように設計されています。冒頭の論文によると、Google社内では3年以上の使用実績があり、世界各地の20箇所のデータセンターで使用されています。全体として、1ペタバイト以上のメモリーを使用して、1秒あたり1億5,000万回程度の問い合わせ処理が行われているということです。

RDMAによるデータ取得

 CliqueMapのクライアントがRDMAを用いてデータを取得する際の処理の流れは、次の様になります。まず、CliequeMapのサーバー上で稼働するプロセスは、メモリー上に図1のようなデータ構造を用意します。「Index Region」には、それぞれの保存データのインデックス情報が格納されており、対応するデータの実体は「Data Region」に格納されます。「Index Region」と「Data Region」は、それぞれ、RDMAによるアクセスの対象になっており、ネットワーク経由でアクセスするための仮想メモリアドレスが割り当てられます。

fig01

図1 メモリー上のデータ構造(論文より抜粋)

 「Index Region」は一定サイズの区画(バケット/Bucket)に区切られており、それぞれの区画には固定長の「IndexEntry」が並びます。IndexEntryの内部には、格納データのキーのハッシュ値、バージョン番号、データの実体(キー・バリューペア)の格納位置を示すポインター(仮想メモリアドレス)などのメタデータが含まれます。
 クライアントがデータを取得する際は、はじめに、取得データのキーのハッシュ値を計算します。ハッシュ値から該当のデータを保持するサーバーと、対応するインデックスが含まれるバケットの仮想メモリアドレスが一意に決まるので、まずは、該当するバケットの内容をRDMAで取得します。そして、バケット内のIndexEntryをスキャンして、該当するハッシュ値のエントリーから、対応するデータへのポインターを取得します。この値を用いて、再度、RDMAでデータの実体を取得するという流れになります(図2)。取得したバケット内に欲しいデータのエントリー(キーのハッシュ値)が存在しない場合は、該当のデータは存在しない(キャッシュミス)ということになります。

fig02

図2 クライアントがデータを取得する際の流れ(論文より抜粋)

 図2を見るとサーバー側では、サーバー上のソフトウェア(SW)は関与せずに、NICが直接にデータを返送していることが分かります。一般的なRPC(APIコール)であれば、クライアントはサーバー上で稼働するアプリケーションにリクエストを送信した後に、アプリケーションが必要なデータをメモリーから取得して返送するという流れになります。このようなアプリケーションレイヤーでの処理を省略することで、高速に応答を返すことができるというわけです。

次回予告

 今回は、2021年に公開された論文「CliqueMap: Productionizing an RMA-Based Distributed Caching System」を元にして、Google社内で使用されているインメモリ分散キャッシュシステム「CliqueMap」について、RDMA技術の概要とRDMAを使用したデータ取得の流れを紹介しました。さきほどの図2の流れだけを見るとシンプルな仕組みのように見えますが、前述のように、CliqueMapはプロダクション環境での大規模な使用を前提としており、システムの可用性やデータの整合性を担保するためのさまざまな工夫がなされています。次回は、これらを含めたより詳細なアーキテクチャーを紹介したいと思います。

Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes