GRPC分散システム


GRPC分散システム
フォワード
このプロジェクトでは、あなたが設計し、単純な分散ファイルシステム(DFS)を実装します。まず、あなたはいくつかのファイル転送開発します
gRPCとプロトコルバッファを使用してプロトコルを。次は、管理するために、弱一貫同期システムを組み込む予定
複数のクライアントと単一のサーバ間でのキャッシュの一貫性を。このシステムは、両方のバイナリとtextbased扱うことができるはず
のファイルを。
あなたのソースコードは、実装を完了するために、C ++ 14、gRPC、およびプロトコルバッファを組み合わせて使用します。
セットアップ
は、コマンドを使用したプロジェクト4リポジトリ内のコードのクローンを作成することができます:
gitのクローンhttps://github.gatech.edu/gios-sum-19/pr4.git
提出命令
リポジトリのトップレベルに与えられたsubmit.pyスクリプトを介してすべてのコードを提出してください。提出方法については
割り当ての個々のコンポーネントを、下記の手順を参照してください。
この割り当てのために、あなたは24時間以内に10倍にあなたのコードを提出することができます。締め切り後、我々はあなたの最後のダウンロード
、期限までに提出をあなたの提出を確認し、グレードを割り当てます。あなたは倍の数に制限はありません
、あなたのreadme-student.mdファイルを提出することができるが。
提出後、あなたはUdacity / GTのautogradingのウェブサイトを訪問し、して提出の結果をダブルチェックして
、学生ポータルへ行きます。
Readmeの
プロジェクトを通じて、我々はあなたがの各部分に近づいているか、あなたがやっていることにメモを維持することをお勧め
プロジェクト、そしてあなたがあなたの仕事を調製するのに使用されるリソース。我々はreadmestudent.md、プロトタイプファイルをご提供してい
ますが、プロジェクト全体で使用する必要があること。
あなたはコマンドを使用してreadme-student.mdファイルを提出することができる:
pythonのsubmit.pyのreadmeを
プロンプトで、GTのユーザー名とパスワードを入力してください。
生非難歴史
2019年7月15日PR4 /マスターでreadme.md・GIOS和-19 / PR4
https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md 2 / 7
これはあなたの最初の時間の提出がある場合は、JWTを保存したい場合は、プログラムはあなたを聞いてきます。あなたがそう答えるならば、それは保存されます
、あなたのユーザ名とパスワードを送信するたびに提供する必要がないように、あなたのファイルシステム上にトークンを。

GRPC留学生作业代做、C ++编程语言作业调试、代写C / C ++实验作业、代写システム课程作业
Udacityサイトは、それがグレーディング中に使用されるデータベースであなたのreadme-student.mdファイルを保存します。提出スクリプトは、
お使いのREADMEファイルの受信を確認します。このプロジェクトでは、プロジェクトの3のように、あなただけのための1つのREADMEファイルを提出する必要がある
プロジェクトの両方の部分を。
注意:あなたはマークダウンバージョンの代わりに、このファイル(README-student.pdf)のPDF版を提出することもできます。
提出スクリプトが自動的に検出し、それがプロジェクトのルートディレクトリに存在する場合、このファイルを送信します。あなたは、両方提出する場合は
、ファイルを、私たちは、PDF版の好みを与えます。
行き方
パート1 - RPCプロトコルサービスの構築
パート1では、あなたは、店舗、リストを取得し、取得しますリモートプロシージャコール(RPC)およびメッセージタイプの一連の構築する
リモートサーバー上のファイルの属性を。SunRPCを実装(ONCのRPC)およびXDRインタフェース定義言語(IDL)
あなたは講義で学びましたが、現在の背後にある概念のより近代的な実装の賛成で廃止され
RPCとIDL。TI-RPC、Finagle、倹約、そして船長祖語を含む多くのRPCの交換があります。しかし、この中に
割り当て、我々は定義言語として、RPCサービスとプロトコルバッファのためgRPCを使用します。コアgRPCライブラリがされて
Cで書かれたが、C ++、Javaの、移動、およびその他を含む複数の言語をサポートしています。積極的にそれを開発し、使用中です
グーグル、広場、ネットフリックス、ジュニパー、シスコ、およびDropboxのようにいくつかの組織、。この割り当てでは、我々はgRPC使用する
C ++ APIを。
パート1つの目標
パート1の目的は、ファイルに対して次の操作を実行しますRPCサービスを生成することです:
リモートサーバーからファイルを取得し、gRPCを経由して、その内容を転送する
リモートサーバに保存ファイルをしてgRPCを経由してそのデータを転送します
リモートサーバー上のすべてのファイルをリストします。
この割り当てのために、サーバーは、単一のディレクトリ内のファイルを含有することが要求されます。管理する必要はありません
ネストされたディレクトリを。
ファイルリストは、から秒単位でのファイルデータのファイル名と更新時刻(mtimeを)含むべき
エポックを。
リモートサーバ上のファイルに対して次の属性を取得します。
サイズ
時間変更
の作成時間は
、クライアントは、バイナリとテキストベースのファイルのために、上記の各操作を要求することができるはずです。サーバがします
、あなたのプロトバッファ定義ファイルで指定gRPCサービスメソッドを使用して、これらの要求に応えます。
サーバーがタイムアウトしたとき最後に、クライアントは認識すべきです。gRPCは、期限のタイムアウトを使用してサーバに信号を送ることができる
このgRPCの記事で説明したように。あなたのクライアントは、このタイムアウト信号を認識していることを確認する必要があります。
パート1シーケンス図
パート1における予想インタラクションのシーケンス図は、このリポジトリのドキュメント/その1-sequence.pdfファイルに利用可能です。
プロトコルバッファとgRPC
2019年7月15日のPR4 / GIOS和-19 / PR4・マスターでreadme.md
3/7 https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md
開始するにはパート1は、まずプロトコルバッファを使用しての基礎を理解する必要があります。特に、あなたが焦点を当てるべき
で使用され、リクエストとレスポンスのタイプのRPCサービスの定義とメッセージタイプ定義の使用上の
RPCサービスを提供しています。
あなたは、プロジェクトリポジトリ内のDFS-service.protoファイルにあなたのプロトコルを作成します。あり、いくつかの要求されている
あなたが実装する必要がプロトファイルに記載されているサービスおよびメッセージタイプは、しかし、あなたは多くの追加追加することができ
、あなたが必要と認める方法および/またはメッセージタイプを。あなたがそれらのサービスとのメッセージタイプに名前を付けることまでもあり
あなたの裁量。
gRPCとプロトコルバッファクラスとヘッダファイルを自動生成するために、我々は世話をするMakefileのコマンド提供してきました
あなたのためにそれをします。あなたがいるProtobuf / gRPCファイルを生成する準備ができたら、のルートから次のコマンドを実行し
、リポジトリ:
プロト作る
あなたがリポジトリのパート1 /プロトsrcディレクトリにそのコマンドの結果を見つけるでしょう。あなたは理解しておく必要があり
、そのディレクトリ内の結果ではなく、あなたがする必要はありません、そして、それらのファイルに変更を加えるべきではありません。あなたの仕事はするでしょう
、あなたのdfslib-servernode-p1.cppソースファイル内のサービスメソッドをオーバーライドします。
あなたはプロトコルバッファを自分で慣れてきたら、次のgRPCのためのC ++ APIを理解しておく必要があります。
特に、サーバーの実装はメソッドをオーバーライドする方法に細心の注意を払って、そしてクライアントは、RPCの呼び出し可能
メッセージの種類をストリーミングするためのサービスを。
あなたは我々だけで、同期バージョンで働くことになり、非同期gRPCを気にする必要はありません
、このプロジェクト。
パート1の構造
部分のすべてを1つのファイルには、パート1のディレクトリにあります。あなたは、そのディレクトリに複数のソースファイルを検索しますが、あなただけです
パート1内difslib- *ファイルを調整し、提出する責任。ソースファイルの残りの部分は、提供
プログラムのための支持構造を。あなたは、テストの目的のために他のソースファイルを変更するかもしれないが、彼らがします
、あなたのグレードの一部として提出されていません。
変更されるファイルのそれぞれで、あなたは内容アプローチすべきかに関する追加の指示やヒントを見つけるでしょう
、そのファイルのを。以下のコメントマーカーは、ソースコード内の各先端の前に:
// STUDENT INSTRUCTION:
ソースコードファイルの説明:
SRC / DFSクライアント-P1 [CPP、H] -クライアント側のCLI実行可能。
SRC / DFSサーバ-P1 [CPP、H] - 。サーバ側のCLI実行。
SRC / DFS-CLIENTNODE [CPP、H] - 。あなたが上書きされます、クライアント・ノードのライブラリファイルの親クラス。メソッドはすべて
あなたが優先されますが、あなたが変更されますdfslib-CLIENTNODE-p1.hファイルに記載されています。
SRC / DFS-utils.h -実行可能ファイルによって使用されるユーティリティのヘッダファイル。あなたはこれを変更するが、このファイルではないことに注意して
ボニーに提出。あなたのユーティリティのために使用することができ、別のDFS共有のファイルがあります。
DFS-service.proto -メイク実行し、このファイルにあなたのプロトバッファサービスとメッセージの種類を追加、変更する
ソースを生成するためのプロトコマンドを。
dfslib-servernode-P1 [CPP、H] - 。変更する-にそれらを追加することによって、このファイル内のgRPCサービスメソッドをオーバーライド
DFSServerImplクラス。サービスメソッドのシグネチャがproto-SRC / DFS-service.grpc.pb.hファイルで見つけることができ
ますが、以前走ったメイクプロトコマンドによって生成されました。
2019年7月15日PR4 /マスターでreadme.md・GIOS和-19 / PR4
https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md 4/7
dfslib-CLIENTNODE-P1 [CPP、H] - 。変更する-このファイルにgRPCサービスにあなたのクライアント側の呼び出しを追加します。私たちはきた
クライアントの実行可能ファイルによって期待される基本的な構造および方法の呼び出しを提供します。ただし、任意の追加の追加も
あなたが必要と認める宣言と定義を。
dfslib共有-P1 [CPP、H] - 。変更する-あなたがこのファイルに必要なすべての共有コードやユーティリティを追加します。共有
ヘッダは、クライアントとサーバ側の両方で利用可能です。
パート1のコンパイルと実行
第1部では、ソースコードをコンパイルするには、リポジトリのルートでMakefileを使用して実行することがあります。
パート1にする
か、あなたはパート1のディレクトリに変更し、makeを実行します。
すべてのリストについては、コマンドを利用できるように、リポジトリのルートでmakeを実行。
実行可能ファイルを実行するには、それぞれのファイルでの使用説明書を参照してください。
ほとんどの場合、あなたがサーバを起動します:
./bin/dfs-server-p1
クライアントは、その後、店舗、リスト、およびSTATファイルをフェッチするために使用されます。たとえば:
GT-campanile.jpgのフェッチ./bin/dfs-client-p1
提出パート1
:パート1を送信するには、リポジトリのルートから、次の実行
のpython submit.pyパート1の
DFSを完了-パート2
今、あなたことを作業gRPCサービスを持って、我々は初歩的なDFSを完了に向けて我々の焦点を向けるだろう。このために
割り当て、我々はこれがに似ているあなたはすでにパート1で作成した呼び出しをRPCに弱い一貫性のあるキャッシュ戦略を適用させていただきます
アンドリュー・ファイル・システム(AFS)で使用されるアプローチ。物事をシンプルに保つために、私たちは、クライアント側のための全ファイル・キャッシングに焦点を当てます
1つのクライアントだけが任意の時点でサーバーに書き込むことを確実にするために、サーバー側の簡単なロック・ストラテジー。
パート2つの目標
この割り当てのために、あなたの一貫性モデルは、以下の期待に準拠する必要があります
全体のファイルのキャッシュを。クライアントが(すなわち、部分的なファイルを気はありません、クライアント側でファイル全体をキャッシュする
キャッシュ)。読み取りおよび書き込み操作は、ローカルのファイルに適用されなければならないとだけファイルがされたときにサーバーを更新し
、クライアント上で変更または作成。
ファイルごとに1人のクリエーター/ライター(すなわち、書き込みロック)。クライアントがプッシュする前に、サーバーからのファイルの書き込みロックを要求すべきです。もし
彼らは試みが失敗した場合、ロックを取得することができません。サーバーは、クライアントがロックに保持しているのトラックおく必要があり
、クライアントが正常にサーバーにファイルを格納した後、そのロックを解除し、特定のファイルを。
CRCチェックサム。ファイルがサーバーとクライアントの間で変化しているかどうかを判断するには、CRCチェックサム使用することができます
私たちはあなたのために提供している機能を。サーバとクライアント間のチェックサムの違いは、構成
の変更を。CRC機能は、我々はすでにあなたのために設定したファイルのパスとテーブルが必要です。戻り値は次のようになります
あなたのgRPCメッセージタイプで使用できるのuint32_t値。チェックサムを取得する方法の例を以下に示します。
2019年7月15日PR4 / readme.mdマスターで・GIOS和-19 / PR4を
https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md 5/7
のstd :: CRC = file_checksum(ファイルパス、this-> crc_table)のuint32_t。
あなたがパート2に、リスト、および統計方法を、あなたのストアのためのパート1からのコードをコピーして取得することができます。しかし、注意してください
あなたが最も可能性が高いDFSの実装の要件を満たすために、これらの方法を調整する必要があること。
日付ベースのシーケンス。ファイルがサーバーとクライアントの間で変更された場合は、最後に変更されたタイムスタンプは、必要があります
勝ちます。サーバは、より最近のタイムスタンプを持っている言い換えれば、クライアントはサーバーからそれをフェッチする必要があります。クライアントがいる場合
より最近のタイムスタンプを持っている、そしてクライアントは、サーバー上に保存する必要があります。変更された時間のために変化がない場合
ファイルは、クライアントが何もしないはずです。データを保存する際に説明するように、あなたが最初の書き込みロックを要求しなければならない、覚えておいてください
早く。
パート2の構造
パート1で、あなたがdfslib- *ファイルを調整するための唯一の責任があるとパート2のためのファイル構造は、第1部と同じである
その2ディレクトリ。
クライアント側の2つのスレッドが同時に実行されます。あなたは、これらのスレッドと、サーバへのアクセスを同期する必要があります。
ウォッチャースレッドはinotifyのシステムがあなたのために、クライアントのディレクトリを監視するためにコマンドを使用しています。我々はすでに提供してきました
イベントを管理するための構造部品を。ただし、そのファイルを確保するために適切な変更を加える必要があります
通知イベントは、次に説明する同期用タイマとの調整します。イベントコールバック関数が設けられている
ことであなたを支援するためにdfslib-CLIENTNODE-p2.cppファイル。それらが提供するように慎重STUDENT取扱コメントを読んで
、そのプロセスを管理する方法についていくつかのヒントを。
同期スレッドは、サーバとNFSがサーバーに接続する方法に似て3秒ごとに、接続するためのシンプルなタイマーを使用しています。
次に、クライアントは、ファイル同期、彼らの最終更新時刻(mtimeの)と一緒に、サーバーからファイルのリストを要求する必要があり
、クライアントとサーバの間を。クライアントは、店舗を取得、または前述した目標に基づいて何もしないはずです。
パート2シーケンス図
パート2の予想相互作用のシーケンス図は、このリポジトリのドキュメント/その2-sequence.pdfファイルに利用可能です。
コンパイルパート2
パート2でソースコードをコンパイルするには、リポジトリのルートにMakefileを使用して実行することがあります。
その2作る
か、あなたはその2ディレクトリに変更し、makeを実行します。
すべてのリストについては、コマンドを利用できるように、リポジトリのルートでmakeを実行。
実行可能ファイルを実行するには、それぞれのファイルでの使用説明書を参照してください。
ほとんどの場合、次のようなものを使用してサーバを起動します:
./bin/dfs-server-p2
クライアントは、クライアントのパスにマウントする必要があります。たとえば:
マウント./bin/dfs-client-p2
上記のコマンドは、MNT / clientディレクトリにクライアントをマウントし、その後ウォッチャーと同期タイマースレッドを開始します。
マウントパスへの変更は、サーバーと取り付けられている他のクライアントに同期させる必要があります。
パート1のように、クライアントはまた、フェッチ、店舗、リスト、およびSTATなどの個々のコマンドを受け入れ続けなければなりません。
提出パート2
マスターで2019年7月15日PR4 / readme.mdを・GIOS和-19 / PR4
https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md 6 / 7
リポジトリのルートから次のコマンドを実行し、第2部を提出するには、次
のpython submit.pyのパート2を
参照の
関連講義材料
P4L1リモートプロシージャを呼び出し
gRPCとプロトコルバッファリソース
gRPC C ++リファレンス
プロトコルバッファ3言語ガイド
gRPC C ++例
gRPC C ++チュートリアル
Protobuffersスカラタイプ
gRPCステータスコード
gRPC期限の
朱書きが
あなたのプロジェクトは、以下の項目に少なくとも採点されます:
インタフェース仕様(.proto)
サービス実装
gRPC開始と結合
期限の適切な取り扱いがタイムアウト
適切メモリとgRPCリソースのクリーンアップ
サーバーとの適切なコミュニケーションを
書き込みロックの適切な要求と管理
、複数のクライアントと単一のサーバ間でのファイルの適切な同期
将来学期のクラスを向上させるためのReadmeファイルの洞察力の観測と提案
gRPCの実装(40点)
、コードが正常にコンパイルクラッシュしない、完全に送信されたファイル、基本的な安全性チェック、およびの適切な使用:フルクレジットが必要と
認識する能力とともに、取得する機能、ストア、およびリストファイルを含む- gRPCタイムアウト。自動化されたことに注意してください
テストは自動的にこれらのいくつかをテストしますが、年生は、これらの要件の追加テストを実行することができます。
DFSの実装(50点)
、コードのコンパイルが成功し、クラッシュしない、完全に送信されたファイル、基本的な安全性チェックの適切な使用:フルクレジットが必要で
、同期とはinotifyスレッドのキャッシュ適切に処理、同期が適切に処理され、gRPC、適切に処理ロックを書きます
単一のサーバに複数のクライアントの同期。自動化されたテストは自動的にこれらのいくつかをテストすることに注意してください、
しかし、年生は、これらの要件の追加テストを実行することができます。
README(10ポイント+ 5ポイント、余分なクレジット機会は)
明らかに、あなたのあなたが何をしたかの理解とその理由を示しています-私たちはあなたのデザインやあなたの説明を見たい
あなたが行った選択のを、なぜあなたは、これらの選択をしました。(4点)
、コードの制御の流れの説明。私たちは強く、あなたがここにグラフィックスを使用することを示唆しているが、徹底した
テキストの説明が十分です。(2点)
2019年7月15日PR4 /マスターでreadme.md・GIOS和-19 / PR4
https://github.gatech.edu/gios-sum-19/pr4/blob/master/readme.md 7 /7
あなたのコードを実装してテストする方法を簡単に説明。(2点)
、あなたの開発プロセス(2点)の間に相談し、任意の外部資料を参照し
ますが、ドキュメント、サンプルコード、テスト、またはプロジェクトの他の側面を改善する方法についての提案(最大
注目すべき提案に利用可能な5点の余分なクレジットここでは、例えば、実際にあなたがどう変化するかの説明
のものを、サンプルコード、テスト用のコードなど)私たちは、単に問題を報告するための余分な信用を与えていない-私たちは、探している
ものを改善する方法について実用的な提案。
質問
TAさんや他の生徒があなたを助けることができるように、すべての質問については、クラス広場フォーラムやクラススラックチャネルを使用してください。

プロ、とても信頼できるので。必要に応じて、QQを追加してください:99515681または電子メール:[email protected]

マイクロ手紙:codehelp

おすすめ

転載: www.cnblogs.com/newpyaty/p/11227823.html