オブジェクトストレージ
基本コンセプト
記憶ブロック、およびオブジェクト・ファイル・ストレージ・メモリ:3つの主流ストレージの種類があります。
- NAS(ファイルストレージ):ネットワーク接続ストレージ、ストレージ機能とファイルシステムのWebサーバを提供し、クライアントがNAS上のファイルシステムにアクセスすることができ、あなたはまた、プロトコルを使用して、ファイルをアップロードし、ダウンロードすることができます:SMB、NFSや、ネットワークファイルシステムとしてAFSクライアントのための合意は、ネットワーク上のファイルサーバです。
- SAN(ブロックストレージ):ストレージ・エリア・ネットワーク、およびNASとの違いは、SANが唯一のブロックストレージを提供し、クライアントへのファイルシステムの抽象化は、プロトコルの使用を管理するために:ファイバー\チャネル、iSCSI \ ATAオーバーEthnetとHyperSCSI、顧客のためにそれはあなたが、それをフォーマットするファイルシステムを作成してマウントすることができ、ディスクの終わりです。
- オブジェクトストアは:オブジェクト指向する目的、利点の収集とファイルストレージブロックを参照し、アクセス速度が速く、大容量および他の特性を持っています。そして、クラウドコンピューティングを合わせやすい、それは新しいネットワーク・ストレージ・アーキテクチャです。
NASとSANの利点を組み合わせただけでなく、高速SANおよびNASデータ共有および他の利点への直接アクセスを有し、高い信頼性を提供するオブジェクト・ストレージ・システム(オブジェクトベースのストレージシステム)、クロスプラットフォームのデータ共有およびセキュアストレージアーキテクチャ。
より良い3の違いを説明するために、私は、アナロジーを持っているあなたは3人がAからBに取得したい持っていると、今交通の3つのモードがあります。選択された車、バス選択酢酸、プロピオン選択地下鉄。ブロック車、速いスピードなどの記憶装置が、小容量(セダンのみ少数の人々を取る)、バスに似たファイルストレージ、遅い(バスの駅があり、交通信号機を考慮する必要がある)が、より大きな容量(より座ることができません少ない人);オブジェクトストレージは地下鉄、高速、大容量と同様です。
異なるデータ管理
- NAS、経営のファイル形式のデータ。
- SAN、データブロックの形でデータの管理は、それぞれのブロックはそれ自身のアドレスは、追加の背景情報を有します。
- オブジェクトストレージは、データ管理オブジェクトを介して、一つのオブジェクトを含む:データ、メタデータ、グローバル識別子。
写真、ビデオ、または他の文書、メタデータは、オブジェクトの関連記述を指すオブジェクト、等:データオブジェクトは、典型的には、のような非構造化データである画像のサイズ、文書所有者、等;オブジェクトIDはグローバルでありますオブジェクトを識別するために使用される一意の識別子。
データにアクセスするためのさまざまな方法
- NFSなどのネットワークプロトコルを経由してリモートサーバーに保存されているNAS、アクセスファイル
- SANによるデータブロックのSANアドレス上のデータブロックへのアクセス
- オブジェクトにアクセスするためのREST Webサービスによるオブジェクトストレージ
オブジェクトストレージ、オブジェクトにアクセスするための簡単な方法は、オブジェクトは、HTTP動詞とRESTインタフェースを介して操作される(等、、、POSTをGET、PUT、DELETE)の動作を説明。また、アクセス方法があるオブジェクトを操作するために、クライアントの主要なクラウドプロバイダを使用することです。
たとえば、次のようにAmazonのs3cmd、アリクラウドosscmd / ossutil、テンセントクラウドcoscmdと。
オブジェクトストレージの利点と欠点
私は、おそらく次言及する前に、利点についてお話しましょう:
- 高いスケーラビリティ:オブジェクト・ストレージは、高密度メモリを利用するために、EBの数十〜数百の容量を拡張することができます。
- 効率:フラット構造は、ディレクトリシステムは、パフォーマンス上の複雑な効果はありません。
- アルゴリズム記憶されたオブジェクトに係るデータが自動的にすべてのノードに配布され、容量が増加すると、オブジェクト・ストレージ・システムはスケールである;あなたが移行する必要があります
- ;:高セキュリティ認証キーオブジェクトストレージ通常、HTTPとは、データアクセスを提供するために、オブジェクトストレージを提供して自分自身を呼び出すREST APIが起動し、データを取得使用して、HTTP(S)プロトコルをサポートするだけでなく、また、NFSやSMBの増加:簡単にアクセス支持体と、コストが比較的低いバルク・ストレージと比較して、オブジェクトストアは、最も費用対効果の高いデータストレージの種類、及びクラウドコンピューティングとで、オブジェクトのプロパティは、ほとんど、この遊びに格納されています。
短所を言及:
- 最終的な一貫性:異なるノードの異なる位置に起因して、データの同期は、いくつかの時間遅延や間違いであってもよいです。
- 容易ではないデータベースを行うには:これらのファイルを保存するためのより適切な保存されたオブジェクトは、ほとんど同じであっても変更され、そして、そのようなデータベースストレージなどのアプリケーションには、それぞれ他のベアディスクのマッピングに直接必要、またはブロックストレージがより適切です。
達成するために、単一のオブジェクト・ストレージ・アーキテクチャ
単一のオブジェクト・ストレージ・アーキテクチャ
言語を行きます
パッケージのメイン インポート( "IO" "ネット/ HTTP" "OS" ""ログイン "の文字列を" ) メインFUNC(){ http.HandleFunc( "/オブジェクト/"、ハンドラ) のprintln( "サーバー...") ログインします。致命的な(http.ListenAndServe( "127.0.0.1:8006"、ゼロ)) } ハンドラFUNC(http.ResponseWriter、R * http.Request W){ のprintln(R) M:= r.Method もしM == http.MethodPut { (R、W)入れて 戻り } もしM == http.MethodGet { 取得(R、W) リターン } w.WriteHeader(http.StatusMethodNotAllowed) } http.ResponseWriter、R * HTTP W(FUNC・プットを。要求){ // C:\ Users \ユーザー管理者は、\ \ SRC \ awesomeProject \ test_fileを行きます F、E:= os.Create(( "C:/ユーザー/管理者/行く/ SRC / awesomeProject / test_file" + "/オブジェクト/" + strings.Split(r.URL.EscapedPath()、 "/")[ 2])) であれば、E!=ゼロ{ log.Println(E) w.WriteHeader(http.StatusInternalServerError) リターン } f.Close()延期 io.Copy(F、r.Body)は } FUNC http.ResponseWriter W(プレゼント、R * http.Request){ F、E:= os.Open(( "C:/ユーザ/管理者/移動/ SRC / awesomeProject / test_file" + "/オブジェクト/" + strings.Split(r.URL.EscapedPath ()、 "/")[2])) E!=ゼロ{もし log.Println(E) w.WriteHeader(http.StatusNotFound) リターン } f.close()をを延期クローズ() io.Copy(W、F) }
詳しいです
主な機能、HTTPハンドラを登録し、ポートをリスニングを開始。
Http.HandleFunc役割はHTTPハンドラにハンドラを登録することで、クライアント・マシンのHTTPサービスによってアクセスされ、先頭に「/オブジェクト/」にあれば、その要求はハンドラを処理するための責任を負うことになります。
http.ListenAndServer正式なリスニングポートは、通常の状況下では、エラーのため、非正常な状況、log.Fatal意志を聞いて、プログラムを終了されていたであろう。
http.HandleFunc( "/オブジェクト/"、ハンドラ) のprintln( "サーバー...") log.Fatal(http.ListenAndServe( "127.0.0.1:8006"はnil))
ハンドラ関数、HTTPリクエストと、最も重要な応答レスポンス、リクエスト・パラメータは、クライアント要求のモードに応じて、様々な処理機能を実行します入れて、関数の機能を取得します。
FUNCハンドラ(W http.ResponseWriter、R * http.Request){ のprintln(R) M:= r.Method Mもし== http.MethodPut { プット(W、R) リターン } Mもし== http.MethodGet { プレゼント(W、R) リターン } w.WriteHeader(http.StatusMethodNotAllowed) }
関数を入れ、r.URL可変レコードURLのHTTPリクエスト、その後の脱出路部の結果を得るためEscapedPath方法は、パスの形式である:/オブジェクト/ <OBJECT_NAME>、および機能分割strings.Split /オブジェクト/ < OBJECT_NAME>、「」、「オブジェクト」に分け、<object_nameの>、配列の3番目の要素に行く<OBJECT_NAME>は、os.Create fはローカルストレージファイルシステムのルートディレクトリに同じファイルを作成し、成功を作成r.Bodyますio.Copy持つファイルfに書き込みます。
(http.ResponseWriter、R * http.Requestワット)FUNCを入れ{ // C:\ Users \ユーザー管理\ \ SRC \ awesomeProject \ test_file行く F、E:= os.Create(( "C:/ユーザー/管理者/行きます/src/awesomeProject/test_file"+"/objects/"+strings.Split(r.URL.EscapedPath(),"/")[2])) であれば、E!=ゼロ{ log.Println(E) w.WriteHeader (http.StatusInternalServerError) リターン } f.Closeを延期() io.Copy(F、r.Body) }
入れ機能と同様の機能を取得します。
この記事では、オブジェクトストレージを分散さ-最初の章を達成するために原則、アーキテクチャ、および言語Go]をまとめたもの