Gemfire Tanzu アプリケーションのモダナイゼーション

VMware Tanzu GemFire を知ろうシリーズ Part 2: Gemfireを仮想マシンへのインストールとREST APIによる操作

本シリーズでは、VMware Tanzu Data Serviceの1製品である「VMware Tanzu GemFire」について4回の連載となります。
第一回:GemFireのご紹介と機能性
第二回:Gemfireを仮想マシンへのインストールとREST APIによる操作
第三回:GemFire for Kubernetes のご紹介
第四回:Petclinicを使ったGemfire対応アプリケーション
本記事では、第2回である「Gemfireを仮想マシンへのインストールとREST APIによる操作」について解説します。

 

この記事では Gemfire を仮想マシン上に直接展開し、Gemfire が提供するキャッシュ機能を REST API で利用するサンプルを紹介します。

Tanzu Gemfire の導入方法は大きく3つあります。

  • Kubernetes への導入
  • OS上に直接展開する導入
  • Cloud Foundry BOSH を使った導入

この記事では Ubuntu 20.04 上に展開をします。

 

インストール作業を実施するまえに、簡単にGemfire の構成を確認します。Gemfire は以下の図の構成から成り立っています。

キャッシュ機能を提供するのが「Server」となります。これはホストではなくインスタンスですので、1つの物理ホスト上に複数のServerを展開することもできます。クライアントからのアクセスを複数台ある Server にロードバランスしたり、「Region」と呼ばれるデータ領域(DBでいうとテーブル)を複数のServerで共有させるための機能が「Location」です。インストール後の設定でこれらの構成をおこないます。

 

Ubuntu 20.04 への Gemfire のインストール

ここでは以下のドキュメントの内容に沿って Gemfire を ubuntu 20.04 にインストールします。

Windows/Unix/Linux—Install Pivotal GemFire from a Compressed TAR File

 

まず、Gemfire の tar イメージを入手します。今回は 9.10.7 を以下のページから入手しています。

VMware Tanzu GemFire

 

入手したイメージを以下の手順で導入します。

  1. Gemfireを展開するディレクトリの作成 (今回は /opt/pivotal とした)
  2. イメージを上記ディレクトリに解凍
  3. jdk11(Java Development Kit)のインストール
  4. Java と Gemfire が必要とする環境変数を .bashrc に定義
  5. .bashrc に書かれた環境変数をよみこみ
  6. Gemfireが使えるかを gfsh コマンドで確認

上記のコマンドのサンプルを以下に記載します。

以上でインストールは終了です。

 

Gemfireを利用する準備

Ubuntu に Gemfireをインストールしただけではキャッシュ機能が利用できないため、最初に説明した「Locator」「Server」「Region」の設定をします。あとのサンプルで REST API を使ってキャッシュ機能を利用しますので、ポートを指定して REST API を有効化しています。

以下にコマンドの実行サンプルを記載します。

Locator や Server, Region の設定は以下のドキュメントなどをご参照ください。

Tutorial—Creating and Using a Cluster Configuration

REST API 対応のサーバーの展開方法は以下のドキュメントを参照ください。

Setup and Configuration

 

gfsh によるキャッシュ操作

キャッシュ機能はアプリケーション側から利用することになりますが、DBもSQLをシェルから発行できるように Gemfire も gfsh でキャッシュを操作できます。ここでは単純なキーバリューストア機能を試します。

putをするとエントリの新規作成と上書きができ、getコマンドで既存エントリの取得ができます。

 

REST API によるアプリからのキャッシュ機能の利用

Gemfire は Java 用のクライアントが用意されていますが、それ以外のプログラミング言語は REST API を使ってキャッシュ機能を利用します。具体的には以下の図のようになります。

決められたURL形式でGET/POST/PUT/DELETE のHTTPメソッドを呼び出すことでキャッシュ操作ができます。一般的なREST APIと同様にGETでエントリを取得し、POSTでエントリを新規作成し、PUTで既存エントリを更新し、DELETEで既存エントリを消すという仕様になっています。

 

ここでは Python を使って REST API 経由でキャッシュ機能の確認をします。他の言語でも同様のHTTPリクエストを投げれば同じ挙動をするはずです。以下の Python のサンプルでは Gemfire を操作するためのクラスである GemfireRepository を作成し、その各メソッドがキャッシュ操作を REST API で実行しています。

クラスの後ろにあるサンプルコードで GemfireRepository クラスタが実装するキャッシュ機能を試しています。

コンストラクタでサーバーのIP(もしくはホスト名)とポートおよびRegion名を指定しています。これはサーバーに問い合わせるためのURLで利用されます。

コンストラクタでインスタンス化したオブジェクトにたいして、まずemptyメソッドでキャッシュを全てクリアしています。そのあとで、create_key メソッドでキャッシュエントリを3つ作成し、update_keyメソッドで1つのエントリを更新し、delete_keyメソッドで別の1つのエントリを削除しています。

最後に現在の状態をキー一覧取得メソッドのlist_keysで確認し、バリュー一覧をlist_valuesメソッドで確認し、キーに対応するバリューをget_keyメソッドで確認しています。

実行結果は以下となります。

キー apple は更新されたバリュー green を持ち、キー banana は作成後に消されたので存在しておらず、キー grape は作成された際のバリュー purple を持っています。

 

上記のプログラムのベースは以下のドキュメントにあるPythonコードとなります。

Sample REST Applications

 

REST API の細かな作法については以下のドキュメントを参照ください。

Developing REST Applications

VMware Tanzu GemFire REST API Reference