グリーの大規模分散ストレージ戦略(nanofs) Vol.2
はじめに
グリー株式会社でエンジニアをしておりますkgwsと申します。
今回は、前回に引き続き分散ストレージ(nanofs)のHTTPメソッド毎の処理を紹介させていただければと思います。
nanofsは5つのHTTPメソッド(GET、PUT、DELETE、HEAD、MKCOL)をサポートしております。今回は主なGET、PUT、DELETEの3つについてご説明させていただきます。
まずは構成のおさらい
-
nanofsd(dispatcher)
- アプリケーションサーバからリクエストを受け取り実際に保存されているnanofsnに振り分ける
- 5つのHTTPメソッドをサポートしている(GET、PUT、DELETE、HEAD、MKCOL)
- データベース(KVS)に保存したデータの情報を送る
- queueに処理の指示を送る
-
nanofsw(worker)
- queueに送られた指示にしたがい非同期に処理を行う
- 複数のnanofsnにデータをコピーする
- nanofsnに保存されているデータを削除する
-
nanofsn(node)
- データを保存する
GETメソッド
GETメソッドはシンプルな処理となっている。非同期処理をするnanofswとqueueは処理を行わない。
- nanofsdでHTTP GETリクエストを受け取る
-
データベース(KVS)から画像情報を取得する
- 保存されているnanofsnサーバのid
- 保存されているnanofsnサーバのファイルパス
- データベースにデータがなかったときはHTTPステータス404(Not Found)を返す
-
保存されているnanofsnサーバが複数あるときは設定されているアルゴリズムでサーバを選ぶ
- 今のところランダムで選択とapacheのRequest Countingに対応しております
- もしも選択されたnanofsnサーバがダウンしているときは保存されている別のnanofsサーバを選びなおす
- 保存されているnanofsnサーバからHTTP GET通信でデータを取得
- アプリケーションサーバにHTTPレスポンスを返す
PUTメソッド
- nanofsdでHTTP PUTリクエストを受け取る
-
保存するnanofsnサーバを選ぶ
- 今のところランダムで選択とapacheのRequest Countingに対応しております
- もしも選択されたnanofsnサーバがダウンしているときは別のnanofsnサーバを選びなおす
- 選ばれたnanofsnサーバにHTTP PUTリクエストで保存する
-
データベース(KVS)に画像情報を格納する
- 保存したnanofsnサーバのid
- 保存したnanofsnサーバのファイルパス
- コピーの指示をqueueにENQUEUEする
- アプリケーションサーバにHTTPレスポンスを返す
- queueがらnanofswがDEQUEUEする
- データベース(KVS)から画像情報を取得
- 保存されているnanofsnサーバからHTTP GETリクエストでデータを取得
- 別のnanofsnサーバにデータをコピーする
DELETEメソッド
- nanofsdでHTTP DELETEリクエストを受け取る
- 削除の指示をqueueにENQUEUEする
- アプリケーションサーバにHTTPレスポンスを返す
- queueがらnanofswがDEQUEUEする
- データベース(KVS)から画像情報を取得
- データベース(KVS)から画像情報を削除
- 保存されているnanofsnサーバからHTTP DELETEリクエストで削除する
- 保存されている画像は複数のnanofsサーバにあるので全台削除していく
さいごに
前回記事にて多大なる反響ありがとうございました。準備ができ次第nanofsのソースコードは公開させていただきます。
ご意見・ご感想は公式ハッシュタグまでお願いいたします。#nanofs
- グリーの大規模分散ストレージ戦略(nanofs)