pbox on softlayer

32
PBOX on SoftLayer 第1回福岡SoftLayer勉強会 2014.11.21

Upload: shuichi-yukimoto

Post on 17-Jul-2015

565 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Pbox on softlayer

PBOX on SoftLayer第1回福岡SoftLayer勉強会

2014.11.21

Page 2: Pbox on softlayer

雪本 修一Shuichi Yukimoto株式会社MNU 代表取締役社長 電気通信大学の認定ベンチャーとして起業。 現在も現役プログラマとしてコードを書いている。 好きな言語はJavaScript,Scheme,Lisp,Python SoftLayerを使い始めて一年ぐらい 弊社はSoftLyerのリフェラルパートナーです。

twitter:@nsas454 facebook:shuichi.yukimoto

Page 3: Pbox on softlayer

今日の内容Object Storageを使ったファイル共有アプリケーションをつくってみた。

ファイルサーバとしても十分使える!

Object Storageの便利な機能をしってもらおう!

せっかくなので、宣伝もしたい!

この機会に、ぜひ使ってみてください

Page 4: Pbox on softlayer

PBOXSoftLayer専用オンラインストレージアプリ

Page 5: Pbox on softlayer
Page 6: Pbox on softlayer
Page 7: Pbox on softlayer

概要• Object Storageを使ったファイル共有アプリ

• クライアントでのファイル更新をトリガにObject Storageにファイルをアップロード

• 共有しているメンバのファイルを自動更新

• フォルダの権限を設定できる

• 共有URLからファイルをダウンロードできる

• 5Gを超える大きなファイルを扱える

• ダウンロードとアップロード処理を高速に行える

Page 8: Pbox on softlayer

利用事例

• ObjectStorageをバックアップ先として利用したい

• ファイル共有として利用したいとき

Page 9: Pbox on softlayer

なぜObject Storageで?

DropBoxがAWSのS3を使っている。

AWSのS3でできるならSoftLayerのObject Storageでも同じものが出来るんじゃないか?

Page 10: Pbox on softlayer

Object Storage

Page 11: Pbox on softlayer

概要• 保存されている全てのオブジェクトはURLを持つ

• 開発者はRESTful HTTP APIによってObjetcStorageシステムを操作する

Page 12: Pbox on softlayer

概要• オブジェクトはデフォルトでレプリカされ、一つのファイルが破損しても自動修復される

Page 13: Pbox on softlayer

Object Storageの制限

• ファイルアップロードの制限

• 5Gを超えるファイル

• カスタマー・ポータルでは20MBを超えるファイルはアップロードできない

Page 14: Pbox on softlayer

5G超えファイルについて• 2つの方法がある

• Static Large Object (SLO)

• Dynamic Large Object (DLO)

• 共通するのはmanifestファイルを呼ばれるものを使用して、複数のObjectを1つのObjectに見せる

• manifestファイルの記述で複数のファイルを指定する

• swiftがmanifestファイルを1つの巨大なファイルとして特別に扱ってくれる

• 分割されたファイルは通常のobjectと同じ

Page 15: Pbox on softlayer

Static Large Object• manifestファイルにJSON型式で記述したファイルをアップロードする

• アップロード手順

• ファイルを分割

• 分割したファイルをアップロード

• manifestファイルをアップロード

Page 16: Pbox on softlayer

SLOの特徴• ファイルの結合順はmanifestファイルで指定する

• 分割ファイルはどのコンテナのどのパスにおいてもよい

• 分割ファイルの名称は自由

• ファイルを更新する場合はmanifestファイルの更新も必須

• manifestファイルの記述に誤りがある場合、manifestファイルのアップロード時にエラー

• 分割ファイルサイズは1MB以上なくてはならない

• 1000以上のファイルに分割できない

Page 17: Pbox on softlayer

manifestファイルの仕様[ { "path": "mycontainer/objseg1", "etag": "0228c7926b8b642dfb29554cd1f00963", "size_bytes": 1468006 }, { "path": "mycontainer/pseudodir/seg-obj2", "etag": "5bfc9ea51a00b790717eeb934fb77b9b", "size_bytes": 1572864 }, { "path": "other-container/seg-final", "etag": "b9c3da507d2557c1ddc51f27c54bae51", "size_bytes": 256 } ]

Page 18: Pbox on softlayer

Dynamic Large Object• manifestファイルで指定したprefixにマッチするobjectを1つのファイルとして扱う

• DLOの作成手順

• manifestファイルをアップロード(最後でもよい)

• ファイルを分割する

• 分割したファイルをアップロード

Page 19: Pbox on softlayer

DLOの特徴• ファイルの結合順はobject名のソート順

• 分割ファイルはどの1つのコンテナに置く必要がある

• 分割ファイルの名称はソートで正しい順番になるように名付ける

• manifestファイルの更新なしで巨大ファイルを更新可能

• アップロード中にもダウンロードできる!

Page 20: Pbox on softlayer

比較SLO DLO

ファイルの結合順 manifestファイルで指定 ファイル名のソート順

コンテナの制限 制限なし 同一のコンテナ

manifestファイルの型式 JSON 空ファイル

Page 21: Pbox on softlayer

Temporary URL• ログインせずに特定のファイルに対する一時的なアクセスを許す仕組み

• ・一時URLを知ってる人は誰でもアクセスできる

• ・GET HEAD PUT POST DELETEが可能(GET以外試してない)

• ・Dropboxの共有リンクと似ている

Page 22: Pbox on softlayer

Dropboxとの違い

• サーバは一時URLを管理しない

• 一時URLはサーバ側で作成しない。

• シークレットキーを元に誰か(クライアントなど)が作成する

Page 23: Pbox on softlayer

一時URLの生成方法シークレットキー、オブジェクトのパス、有効期限の3つから一時URLのシグネチャを生成し、クエリストリングをオブジェクトのURLの後ろに付けることで一時URLとなる。

Page 24: Pbox on softlayer

シークレットキー

• 一時URLを作成するための「鍵」

• アカウント毎に設定する

Page 25: Pbox on softlayer

シークレットキーの設定• ストレージURLにPOSTすることで設定できる

• ストレージURLとは認証後に帰ってくるベースURLのこと

例えばpboxなら https://sng01.objectstorage.softlayer.net/v1/AUTH_a26e5e6f-76-4604-af86-x4x2089085e7となっている

このURLに 'X-Account-Meta-Temp-URL-Key' ヘッダを付けてポストする

Page 26: Pbox on softlayer

python-swiftclientでシークレットキーを設定する例import swiftclientSWIFT_AUTH_URL = 'https://sng01.objectstorage.softlayer.net/auth/v1.0/'SWIFT_USERNAME = 'SLOS30001'SWIFT_KEY = 'ea9556757661db7c55rewb6ae261f1315b69880df8be68ff27eed0erc56ee'conn = swiftclient.Connection(SWIFT_AUTH_URL, SWIFT_USERNAME, SWIFT_KEY)

conn.post_account(headers={'X-Account-Meta-Temp-URL-Key': 'my key'})

シークレットキーの取得import swiftclientSWIFT_AUTH_URL = 'https://sng01.objectstorage.softlayer.net/auth/v1.0/'SWIFT_USERNAME = 'SLOS30001'SWIFT_KEY = 'ea9556757661db7c55rewbe261f1c2315b69880df8be68ff27eed0erc56ee'

conn = swiftclient.Connection(SWIFT_AUTH_URL, SWIFT_USERNAME, SWIFT_KEY) r = conn.head_account()r['x-account-meta-temp-url-key'] # -> 一時URL

Page 27: Pbox on softlayer

一時URLの生成方法シークレットキー、オブジェクトのパス、有効期限の3つから一時URLのシグネチャを生成し、クエリストリングをオブジェクトのURLの後ろに付けることで一時URLとなる。

Page 28: Pbox on softlayer

import hmac from hashlib import sha1 from time import time

expire_minutes = 5 # 5分 expires = int(time() + expire_minutes*60) method = 'GET' key = '3ac1b5c36f4d52c91d0a' # シークレットキー path = '/v1/AUTH_a26e5e6f-7755-494-af86-e4c20960e5e7/filesync/6fcfb4afba2f822c7368d1c9ce08af1d51458bc8' # pbox_osx.zip sig = hmac.new(key, '%s\n%s\n%s' % (method, expires, path), sha1).hexdigest() query = '?temp_url_sig=%s&temp_url_expires=%s' % (sig, expires) query += '&filename=' + 'pbox_osx.zip' # ダウンロード時のファイル名を設定できる

print 'https://sng01.objectstorage.softlayer.net'+ path + query # 一時URL

Page 29: Pbox on softlayer

ファイルアップロード/ダウンロードの高速化

• PBOXではObject Storageにファイルをアップロードする際に高速で処理を行えるような機能を実装している。

Page 30: Pbox on softlayer

• pboxはnginx + gunicornで構成されているが、ファイルのアップロード、ダウンロード処理をgunicornでやるのは高コスト

• アップロード/ダウンロードには複雑な処理は必要無いにもかかわらず、gunicornのセッションを専有するのは良くない!

ファイル

nginx gunicorn object Storage

フロントエンド バックエンド ストレージ

認証/リクエスト

PUT

Page 31: Pbox on softlayer

• nginx拡張でなるべく多くの同時リクエストを捌きつつ、静的ファイルの送受信を行う

ファイル

nginx object Storagegunicorn

redis tornade

LUA

フロントエンド バックエンド ストレージ

PUT

PUTリクエスト認証/ストレージ情報

Page 32: Pbox on softlayer

ファイル

ファイル

nginx

nginx

gunicorn object Storage

object Storagegunicorn

redis tornade

LUA

Bad

Good

フロントエンド

フロントエンド

バックエンド ストレージ

バックエンド ストレージ

認証/リクエスト

PUT

PUT

PUTリクエスト認証/ストレージ情報