分散システムのアーキテクチャ・ プロセス 分散システム 2014年10月20日 建部修見 アーキテクチャ • ソフトウェアアーキテクチャ – どのようなソフトウェアコンポーネントで構成され,ど のように相互作用が行われるか – アーキテクチャのスタイル • システムアーキテクチャ – 集中アーキテクチャ – 分散アーキテクチャ – ハイブリッドアーキテクチャ • 自立的システム(autonomic systems) – フィードバック制御 システムアーキテクチャ • システムアーキテクチャ – コンポーネントの相互作用と配置の方法 • クライアントサーバモデル 返事待ち クライアント リクエスト 返事 サーバ サービス実行 時間 クライアントサーバモデル • コネクションレスの通信(例:UDP,user datagram protocol) – LANなど高信頼な環境では効率的 – クライアントはメッセージ(サービスと引数)をサーバに送信, サーバは返事を送信 – 信頼性のない環境,リクエストorレスポンスが失われる可能性 • リクエストの再送信→サービスを二度実行する可能性 • 「銀行口座から100万円引き出す」などは困る • 「残高照会」などは何度実行してもよい=idempotentな操作 • 信頼性のあるコネクション指向の通信(例:TCP, transmission control protocol) – 広域環境のような低信頼な環境 – コネクションを確立してリクエストを発行 – コネクション(再)接続のコスト アプリケーションのレイヤリング • (データベースをアクセスする)クライアント サーバアプリケーションは三層の階層からな る – ユーザインタフェース層(user-interface level) • クライアント(キャラクタ,グラフィックス) – 処理層(processing level) • それぞれのアプリケーション処理 – データ層(data level) • ファイルシステム,データベース • 永続性(persistency)をもつ インターネット検索エンジンの例 ユーザ インタフェース層 ユーザインタフェース リストを含むHTMLのページ キーワード式 HTML生成 ランク付リスト 処理層 クエリ生成 データベース クエリ ランキング アルゴリズム メタ情報付きの Webページのタイトル Webページのデータベース データ層 二層アーキテクチャ • 三層レイヤをクライアントとサーバに分ける ユーザインタフェース シン クライアント (管理コスト小) 機種依存のUI処理 UI処理全体 アプリケーション ある程度のアプリケーション 処理(編集やフォームチェックなど) ファット クライアント データベース アプリケーション処理全体 (共有ファイルシステム利用など) ある程度のデータ処理も (クライアントキャッシュなど) 多層アーキテクチャ (例) ユーザインタフェース Webクライアント (複数) アプリケーション データベース アプリケーション サーバ (複数) データベース サーバ 分散アーキテクチャ • 垂直分散(vertical distribution) – 機能単位を複数マシンで分散 • 水平分散(horizontal distribution) – 同一機能を複数マシンで分散 – 複数マシンで負荷を分散 – Cf. P2P(peer-to-peer)システム • P2Pシステム – (概念的には)P2Pを構成するプロセスは同一 – プロセス間の相互作用は対称的,クライアントでもありサーバ でもある(サーバント,servent) – オーバレイネットワーク(overlay network) • プロセス間のネットワーク。ルーティングしてプロセス間でメッセージ 通信 構造化P2Pアーキテクチャ • オーバレイネットワークを決定的手続きで構成 • 分散ハッシュ表(distributed hash table, DHT)を 構成 – ハッシュキーは128ビット(MD5),160ビット(SHA1)な どの広いID空間 – 複数のノードでハッシュ表を分割 • ノードのハッシュ値によりID空間を分割 • データをLOOKUPするとき,そのデータが割当て られているノードを返す – データが割当てられているノードにルーティングする Chord [Stoica et al., 2003] 15 14 実際のノード 0 1 {13, 14, 15 } • succ(k)は最小のノードidk { 0, 1 } 2 13 • LOOKUP(k)でsucc(k)を返す (アルゴリズムは後の講義だ 3 が,O(log N)ステップで検索) { 8, 9, 10, 11, 12 } 4 { 2, 3, 4 } 12 担当データキー (前後のノードに知らせる) 11 5 10 { 5, 6, 7 } 9 • メンバシップ管理 8 7 6 非構造化P2Pアーキテクチャ • 乱数アルゴリズムでオーバレイネットワークを 構築 • データもランダムに配置 • 検索はリクエストをフラッディング(ブロード キャスト) • ランダムグラフの生成が目標 – それぞれのノードが,生きているノードの内ランダ ムにcノードの情報を知っている スーパピア(Superpeers) • 非構造P2Pではデータ検索は基本フラッディングなた め,ピア数の増加に対し問題がある • CDN(コンテンツデリバリネットワーク)等の応用ではコ ンテンツを高速に発見したいという要求がある • インデックスを保持し,ブローカ(仲介)となるノード= スーパピアの導入(cf. Sun JXTA) 通常のピア スーパピアネットワーク スーパピア ハイブリッドアーキテクチャ • 協力的(collaborative)分散システム • BitTorrentファイル共有システム[Cohen, 2003] – 協力的なP2Pファイルダウンロード • ファイルのダウンロードは,コンテンツを提供するノー ドだけが可能 – .torrentファイルはトラッカ(tracker)を示す。トラッ カはファイルのチャンクを保有するアクティブな ノードを保持 – アクティブノードは現在ほかのファイルをダウン ロードしているノード アーキテクチャのまとめ • ソフトウェアアーキテクチャ=ソフトウェアの論理的な構成 • システムアーキテクチャ=コンポーネントがどのように異な るマシンに配置されるか • アーキテクチャのスタイル – レイヤ,オブジェクト指向,イベント指向,データスペース指向 アーキテクチャ • クライアントサーバモデル – 集中アーキテクチャとなりやすい • P2Pシステム – プロセスは等しく振る舞う – オーバレイネットワーク=ほかのピアの局所リストを持つ論理 的なネットワーク – 構造化P2Pと非構造化P2P 演習問題 • ソフトウェアアーキテクチャ、システムアーキ テクチャとは何か? • 国際標準化機構(ISO)が定めたOSI(Open Systems Interconnection)参照モデルを調べ よ • 構造化P2PにおけるDHTはChordの他にどの ようなものが提案されているか?それぞれの 特徴をまとめよ。 プロセス • 独立したプログラムの実行 – 互いに影響を及ぼさない(同一CPUを透明に利用, 並行透明性) – 独立した論理アドレス空間をもつ • プロセステーブル CPUレジスタ メモリマップ オープンファイル アカウント情報 権限(privileges) プロセス生成とプロセス切替 • プロセス生成 – 論理アドレス空間の生成 • メモリセグメントの初期化(データセグメントをゼロクリア,テ キストセグメントにプログラムをロード,スタック領域の設 定) • プロセス切替 – CPUコンテキストの保存 • レジスタ,プログラムカウンタ,スタックポインタなど – メモリ管理ユニット(MMU)のレジスタの修正と translation lookaside buffer(TLB)の無効化 – (メモリ不足の場合)プロセスのスワップイン スレッドとは? • プロセス内の*独立した*プログラム実行 – 同一プロセスID • プロセスほど高い透明性を持たない – 論理メモリ空間を共有 – ファイルディスクリプタなどプロセス資源を共有 • 一般にスレッド生成はプロセス生成より軽い スレッド切替 • スレッドコンテキスト – CPUコンテキスト • レジスタ,プログラムカウンタ,スタックポインタなど – スレッド管理情報 • ほかの情報は持たない – 同一プロセスのスレッド間のデータ保護は開発者に任せ られる • マルチスレッドプログラムの性能はシングルスレッドに 比べ悪くならない – 多くの場合で性能向上が見込まれる • スレッドは保護されない – 適切な設計とKISS(Keep it simple, stupid)が有効 プロセスvsスレッド スレッド 小 プロセス 大 メモリ プロセス資源 データ共有 共有 共有 別々 別々 保護 他スレッドのメモリ、 他プロセスのメモリ、 資源を破壊する可 資源は保護される 能性あり。スレッド の実行制御が必要 生成、実行オーバ ヘッド メモリのポインタ渡 パイプ、ソケット、 し(コピーは不必要) ファイルなど 非分散システムにおける スレッドの利用 • プログラム構造の単純化 – 表計算における入力処理(スレッド1)と合計値など の値更新(スレッド2) スレッド1は入力を処理、スレッド2は変更を待ち変更 があれば更新 • マルチプロセッサでは並列に実行可能 • プロセス間通信のオーバヘッド削減 – (名前付)パイプ,メッセージキュー,共有メモリセグメ ント – カーネル経由のためコンテキスト切替のコスト大 main(int argc, char *argv[]) { for (i = 1; i < argc; ++i) { スライドショウのプログラム例 if (i == 1) /* get the first picture */ buf = get_next_pic(argv[i]); else /* wait for the previous process */ pthread_join(tid, &buf); if (i < argc – 1) /* get the next picture */ 表示している合間に次の pthread_create(&tid, NULL, 画像を読込 get_next_pic, argv[i + 1]); display_buf(buf); /* display the picture */ free(buf); if (getchar() == EOF) break; } } スレッドの実装 • スレッドの生成と解放,mutexロック,条件変数 • ユーザレベルスレッド – 軽い(カーネル経由ではない) – 入力待ちや無限ループでブロックするとプロセス全体がブ ロックしてしまう • カーネルレベルスレッド – スレッドスケジューリングはカーネルが行うため、ブロック しても大丈夫 – スレッド操作のコスト大(システムコール) • ハイブリッド – ユーザレベルスレッドとカーネルレベルLightweight processes(LWP) 並列性の制御の必要性 • スレッド間でメモリ、プロセス資源を共有しているた め、破壊してしまう可能性がある • 例:共有カウンタのインクリメント counter++ 1. 2. 3. スレッド1 1. counterの値をレジスタにロード counterの値をレジスタにロード レジスタの値をインクリメント レジスタの値をcounterにストア スレッド2 1. 2. 3. 2. 3. レジスタの値をインクリメント レジスタの値をcounterにストア counterの値をレジスタにロード レジスタの値をインクリメント レジスタの値をcounterにストア 共有カウンタのインクリメントの例 pthread_mutex_t count_mutex = PTHREAD_MUTEX_INITIALIZER; int count; void increment_count() { pthread_mutex_lock(&count_mutex); // ensure atomic increment count++; データ競合領域 pthread_mutex_unlock(&count_mutex); } int get_count() { int c; pthread_mutex_lock(&count_mutex); // guarantee memory is synchronized c = count; データ競合領域 pthread_mutex_unlock(&count_mutex); return (c); } 仮想化 • (異なるシステムのインターフェースをもち)異 なるシステムのように振る舞う • 既存ソフトウェア(legacy software)の実行 • 他OS,アーキテクチャのプログラムの実行 – IBM 370[1970]の仮想マシン – Cygwin, Wine – VMWare,Xen,KVM コンピュータのインターフェース アプリケーション ライブラリ 関数 ライブラリ システム コール オペレーティングシステム 特権命令 通常命令 ハードウェア 仮想化は上記のインターフェースを模擬すること 仮想マシンのアーキテクチャ アプリケーション アプリケーション アプリケーション アプリケーション オペレーティングシステム ランタイムシステム オペレーティングシステム 仮想マシンモニタ(VMM) ハードウェア ハードウェア プロセス仮想マシン 仮想マシンモニタ (ハイパーバイザ) Java VMなど サーバ設計における一般的なこと • サーバ – クライアントからのリクエストを待ち,実行する • 反復サーバ(iterative server) – サーバがリクエストを実行し,レスポンスを返す • 並行サーバ(concurrent server) – 別のスレッドorプロセスにリクエストを依頼 – 直ちに次のリクエストを待つ 分散システムにおけるスレッド • プロセスをブロックさせないでブロッキングシ ステムコールを呼べる • 複数のコネクションの管理に有用 • マルチスレッドクライアント – 広域ネットワークの遅延(数百ミリ秒~数秒)隠蔽 – (例)Webブラウザ • ページ内複数ドキュメントの並列受信 • 受信しながら表示 マルチスレッドサーバ • 典型的なマルチスレッドサーバの例 ワーカスレッドに要求をディスパッチ スレッドプール サーバ ディスパッチャ スレッド ワーカ スレッド1 ワーカ スレッド2 オペレーティングシステム ネットワーク からの要求 ワーカ スレッド3 サーバのコンタクト先 • クライアントはサーバのエンドポイント(end point)orポート(port)にリクエストを発行 • TCP,UDPのポート番号 – Internet Assigned Numbers Authority (IANA)が管 理 範囲 種類 備考 0~1023 Well Known Ports 登録なしに利用不可 UNIXではroot権限が必要 1024~49151 Registered Ports 登録なしに利用不可 49152~65535 Dynamic and/or Private Ports 代表的なポート番号 キーワード (サービス) 番号 説明 ftp-data 20/tcp, 20/udp, 20/sctp File Transfer [Default Data] ftp 21/tcp, 21/udp, 21/sctp File Transfer [Control] ssh 22/tcp, 22/udp, 22/sctp Secure Shell, RFC 4251, 4960 telnet 23/tcp, 23/udp Telnet smtp 25/tcp, 25/udp Simple mail transfer http 80/tcp, 80/udp, 80/sctp World Wide Web HTTP imap 143/tcp, 143/udp Internet Message Access Protocol https 443/tcp, 443/udp, 443/sctp http protocol over TLS/SSL imaps 993/tcp, 993/udp Imap4 protocol over TLS/SSL http://www.iana.org/assignments/port-numbers http://www.rfc-editor.org/ HTTPサーバへのアクセス例 $ telnet www.tsukuba.ac.jp 80 telnetコマンドでwww.tsukuba.ac.jpの Trying 130.158.69.246... port 80/TCPに接続 Connected to www.tsukuba.ac.jp. Escape character is '^]'. HTTPサーバへの GET /index.html HTTP/1.0 (リターンを2回) リクエスト HTTP/1.1 200 OK HTTPサーバからの Date: Mon, 14 Dec 2009 22:37:09 GMT レスポンス Server: Apache/2.2.3 (CentOS) … Content-Length: 451 Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> … </HTML> Connection closed by foreign host. HTTPサーバが接続を切断 その他の事項 • 割込 – 例:FTPサーバへの大きなファイル転送を取り消したい – コネクションの切断 – Out-of-band(OOB)データの送信 • サーバでシグナル割込がかかる • 状態 – ステートレスサーバ • クライアントの状態をサーバ側で保持しない。クライアントとは関係な く状態を変更 • FTP,HTTP,NFSv2,NFSv3 – ステートフルサーバ • 状態を持つ。クライアントが状態を消去する • 性能向上のため。障害時の復旧を考える必要がある • NFSv4 セッション状態(session state) • 単一ユーザの状態を一定の期間保持 – 永遠ではない – 失われてもまたやり直せばよい • Webブラウザのクッキー(cookie) – クライアント側にサーバの状態を保持 – 消去してもまたやり直せばよい まとめ • 特に分散システムでは、スレッドは有用 – ブロッキングI/O操作を行いながらCPUを活用 – ただし、データ競合を起こさないよう並列性の制 御が必要 • 仮想化により既存アプリケーション,他OSの アプリケーションが実行可能に – VMMでは実行環境ごと保存,移動が可能 • サーバ設計に関しての一般的事項 演習問題 • プロセスとスレッドの違いは何か? • XenとKVMはそれぞれどのように仮想化を実 現しているか? • telnetでwww.cs.tsukuba.ac.jpのhttpポートに アクセスしてみよ • telnetでpoplar.cs.tsukuba.ac.jpのsmtpポート にアクセスし,VRFY tatebe,EXPN c-sotsuken, QUITを入力してみよ
© Copyright 2024 Paperzz