Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

BotとWikiを使った試験的な並列プログラミング

540 Aufrufe

Veröffentlicht am

Bot と Wiki を使った試験的な並列プログラミング環境およびプログラム例を示す。情報セキュリティ担当者が頭を悩ませていた悪性Botの耐障害性と超並列性を、科学技術計算や一般的な計算を行うために有益な方向に利用することを目指す。例として動的計画法を用いて最小経路問題を解く並列プログラムを示す。ここで、必要な計算資源(BotとWebページの数)はノード数に比例し、最小経路を計算するのに必要な時間は、求まる最小経路の弧の数に比例する。

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

BotとWikiを使った試験的な並列プログラミング

  1. 1. BotとWikiを使った 試験的な並列プログラミング 山之上卓 福山大学 IPSJ IOT34 (平成28年度第2回) 研究会, 6/25, 2016@京都工芸繊維大学
  2. 2. 内容 • はじめに • 可用性向上とSPMD • Botの詳細 • 動的計画法のプログラム • 計算時間の測定実験 • 関連研究 • おわりに
  3. 3. 1. はじめに • (悪性) Bot はしぶとい(耐障害性がある) – 少々のBotをつぶしても、全体としては継続して悪いことをする • (悪性) Bot は強い(超並列性がある) – かなり太いネットワーク、負荷分散でも、DDoS攻撃等で業務妨害 する。 – かなり多くのメアドに、Spam メールをばらまく
  4. 4. 1. はじめに • 実は、我々はBotを研究していた. – ArduinoとAndroidとWiki を組み合わせたM2Mシステム … Wiki上の 設定やプログラムで Android 端末(Bot)を遠隔操作 – 着るLEDマトリックス電光掲示板 – (良性)Bot で(悪性)Botを捕まえる
  5. 5. 1. はじめに • ノイマン型コンピュータ – プログラムもデータもメモリ上にある • Wikiページ型プログラミング (新?) – プログラムもデータも Wikiページ上にある • Wikiページ型並列プログラミング(新?) – Wikiページ型プログラミングで SPMD型並列プログラミング
  6. 6. 1. はじめに • Wikiページ型並列プログラミング – SPMD …. Single Program, Multiple Data – 個々のBotは従来型の逐次プログラムの実行 – 全体としては, データフロー型並列処理
  7. 7. 2. 可用性向上とSPMD • 我々のWikiとBotを使ったシステム – Bot net の C&Cサーバに相当するWikiサーバが停止しても, Bot そのものは動作を継続可能 – もし Bot が複数いた場合, Bot の1台が停止しても別のBotが動作 を継続可能 • この性質を使って, システムの可用性能力向上?
  8. 8. 2. 可用性向上とSPMD 2.1 前提 • Bot は – 定期的に Wiki サーバの スクリプトとデータを読込み – 一定時間内にスクリプト の実行を終了 – 定期的に実行結果や Botの活動状況を Wikiサーバに書込み – それぞれを識別できるIDを持つ.
  9. 9. 2. 可用性向上とSPMD 2.2 オブジェクト指向言語の継承の利用 • 従来のWiki Script から Class と Object を分離 • 継承を利用 • 無駄な記述の削減 SPMD
  10. 10. 2. 可用性向上とSPMD 2.3 Classページの failover • Objectページで include <class-page-1> or <class-page-2>
  11. 11. 2. 可用性向上とSPMD 2.4 Ojectページの failover • objectPage <url1> or <url2>
  12. 12. 2. 可用性向上とSPMD 2.5 Bot の failover • device dv1 or dv2 start after no write for 10 min.
  13. 13. 2. 可用性向上とSPMD 2.6 システム更新への応用 • このシステムそのものの更新 • 運用停止時間をできるだけ短く • Primary の Class ページ実行中 Secondary のClassページを入替 強制的に Primary のClassの サーバを停止 Classページのサーバのfailover Primary のClassページを更新 • Objectページでも同様
  14. 14. 2. 可用性向上とSPMD 2.7 Botの一斉操作 • 多くのBotを操作するために Object ページを個別に書き換 えて制御するのは大変 • Class ページの書き換えで Botの一斉操作可能
  15. 15. 2. 可用性向上とSPMD 2.7 Botの一斉操作 • Botの停止 – 対応するObjectページを書き換えないように指示-> 実質的に停止 • Botの初期化 – 対応するObjectページのデータ部分を初期化 • Botの実行 – 対応するObjectページをプログラムに従って書き換えるようにする。
  16. 16. 2. 可用性向上とSPMD 2.8 Objectページのデータ • コマンド/プログラム result: データ
  17. 17. 2. 可用性向上とSPMD 2.9 ClassページとObjectページの 簡単な例 Classページ
  18. 18. 2. 可用性向上とSPMD 2.9 ClassページとObjectページの 簡単な例 • 実行前の Objectページ
  19. 19. 2. 可用性向上とSPMD 2.9 ClassページとObjectページの 簡単な例 • 実行後の Objectページ
  20. 20. 3. Botの詳細
  21. 21. 4. 動的計画法のプログラム • Minimal Path • (Backupも含めて)2枚のWikiページを1node に割り当て • (Backupも含めて)2つのBotで1nodeの計算を担当
  22. 22. 4. 動的計画法のプログラム objectPage <url1> or <url2> device <device1> or <device2> start after no write for 10 min. include <class1> or <class2> result: kind="nodeInfo",nodeName=<node name>, startNode=<start-node>, selectedNode=<number>, val=<val>, path=<path> kind="preNode",No=1,url=<previous-node-1-1>,url2=<previous-node-1-2>, arcVal=<arcVal-1>,val=<val-1>,path=<path-1> … kind="preNode",No=n,url=<previous-node-n-1>,url2=<previous-node-n-2>, arcVal=<arcVal-n>, val=<val-n>,path=<path-n> currentDevice=<device>, Date=<date>
  23. 23. 4. 動的計画法のプログラム
  24. 24. 4. 動的計画法のプログラム • kind="nodeInfo",nodeName=<node name>, startNode=<start-node>, selectedNode=<number>, val=<val>, path=<path> • (実行前の)Node-4 kind="nodeInfo",nodeName="node-4", startNode="node-1", selectedNode=0,val=0, path=""
  25. 25. 4. 動的計画法のプログラム • kind="preNode",No=1,url=<previous-node-1-1>, url2=<previous-node-1-2>, arcVal=<arcVal-1>,val=<val-1>,path=<path-1> … • (実行前の)Node-4 kind="preNode",No=1,url=“...node-2",url2=“...", arcVal=2,val=0,path="" kind="preNode",No=2,url=“...node-3",url2=“...", arcVal=3,val=0,path=""
  26. 26. • Class page – command: set readInterval=30000 //30秒 command: program dp program: dim thisTable // 自ノードの表 program: dim thisRowLabel program: dim thisColumnLabel program: dim prevTable // 前ノードの表 program: dim prevRowLabel program: dim prevColumnLabel – 4. 動的計画法のプログラム
  27. 27. 4. 動的計画法のプログラム • program: mode=“reset“ // 停止 stop, 初期化 reset, 実行 run program: thisPage=ex("service", "getThisPage") program: thisPageR=getResultPart(thisPage) program: ex("service","println "+thisPageR) program: parseCsv(thisPageR, thisTable, thisRowLabel, thisColumnLabel)
  28. 28. 4. 動的計画法のプログラム • program: lineNumber=getMaxIndex(thisRowLabel) program: minVal=10000 program: selectedNode=0 program: selectedPath="“ program: preNodes=0
  29. 29. 4. 動的計画法のプログラム • program: for i=0 to lineNumber-1 各前ノードについての計算 program: next i • program: thisNodeIndex=getIndex(thisTable,thisRowLabel, thisColumnLabel("kind"),"=","nodeInfo") program: thisTable(thisNodeIndex,thisColumnLabel( "selectedNode"))=selectedNode //
  30. 30. 4. 動的計画法のプログラム • program: if mode="reset" then program: { Object Pageのノードと Arcの情報の初期化 program: } program: mode=”run” then program: { 計算結果によるノードとArcの情報の更新 program: } command: end dp command: run dp
  31. 31. 4. 動的計画法のプログラム • 各前nodeについての計算 – 自ノードの表のi行目が preNode であれば以下を実行 • i行目のurlのページを読む(ダメだったらurl2のページを読む). 読んだページの表をprevPageに代入 • prevPageの中のnodeInfo がある行を探す • その行の val (prevVal)を取り出して, i番目の前ノードと自ノードの間のarc の arcValを取り出して, xval に prevVal+arcValを代入 • 自ノードの表のi行目の valに xvalを代入
  32. 32. 4. 動的計画法のプログラム • 前ノードの nodeInfoがある行の path を取り出す • 自ノードの表のi行目のpath に, 上で求めた path を代入 • もし xval が今までの前ノードの xval の中で最小であれば, selectedNode を, この行が表す前ノードとし, selectedPathを上 で求めた path とする – すべての前ノードにおける(Start nodeからの) minimal path と, その pathの value が求まっていれば,自ノードに 至る minimal pathが selected path になる。
  33. 33. • (実行終了後の)Node-4 kind="nodeInfo",nodeName="node-4", startNode="node-1", selectedNode=1, val=4, path= “node-1 – node-2 – node-4“ kind="preNode",No=1,url=“...node-2",url2=“...", arcVal=2, val=4,path= “node-1 – node-2" kind="preNode",No=2,url=“...node-3",url2=“...", arcVal=3, val=5, path= “node-1 – node-3" 4. 動的計画法のプログラム
  34. 34. 5. 計算時間の測定実験 • 理論値 T=Na(TI/2+TX) Na : 最小経路の弧の数 TI : Objectページの読み込み間隔 TX: ページが読み込まれてから 実行が終了する までの時間
  35. 35. 5. 計算時間の測定実験 (a) Minimal path=1-2-4 (b) Minimal path=1-3-6-8-4 Arc数=2 Arc数=4
  36. 36. 5. 計算時間の測定実験 ( c ) minimal Path =1-3-4-8-10-12-14-17-19 Arc 数=8
  37. 37. 5. 計算時間の測定実験
  38. 38. 5. 計算時間の測定実験
  39. 39. 5. 計算時間の測定実験 • TI: 30秒. 横軸:最小経路の arc の本数 縦軸の時間: 結果が求まるまでの時間 • それぞれの arc の本数について, 5回ずつ測定 • R2が0.98 -> 計算時間はほぼ, arcの本数に比例 • 比例定数は, 予測値である15に比較的近い – 15秒を超えている部分は計算時間と推定. • 切片が 5.85秒… 計測間隔が10秒であった影響
  40. 40. 5. 計算時間の測定実験 • 最小経路となる弧の数が, そうではない場合の弧の数より大 きいとき, 最初に goal node に現れる経路は最小経路ではな い場合あり • しかしながら, 最終的には最小経路が求まり, それ以後は, goal node の結果はずっと最小経路とその値
  41. 41. 6. 関連研究 • VRRP – router. ここでは汎用計算のHA • 動的計画法の並列計算 – 過去の研究はCPU利用効率重視. ここではCPU利用効率は無視. • SETI@Home – 大量のCPUの利用の道筋を開く. – 固定的な, ノード間通信はほとんど発生しない計算のみ. ここでは汎用的で, ノード間通信を含む計算.
  42. 42. 7. おわりに • WikiとBotを使った「Wikiページ型並列プログラミング」 • 動的計画法による最小経路問題 – 効率は悪いが, BotとWebページが使い放題であれば問題なし. • Failoverの検証はまだ. • セキュリティについての検討も必要 • より記述量の少ない方法を検討中
  43. 43. 謝辞 • 学生諸君

×