Mais conteúdo relacionado Semelhante a BotとWikiを使った試験的な並列プログラミング (20) Mais de Takashi Yamanoue (20) BotとWikiを使った試験的な並列プログラミング3. 1. はじめに
• (悪性) Bot はしぶとい(耐障害性がある)
– 少々のBotをつぶしても、全体としては継続して悪いことをする
• (悪性) Bot は強い(超並列性がある)
– かなり太いネットワーク、負荷分散でも、DDoS攻撃等で業務妨害
する。
– かなり多くのメアドに、Spam メールをばらまく
4. 1. はじめに
• 実は、我々はBotを研究していた.
– ArduinoとAndroidとWiki を組み合わせたM2Mシステム … Wiki上の
設定やプログラムで Android 端末(Bot)を遠隔操作
– 着るLEDマトリックス電光掲示板
– (良性)Bot で(悪性)Botを捕まえる
5. 1. はじめに
• ノイマン型コンピュータ
– プログラムもデータもメモリ上にある
• Wikiページ型プログラミング (新?)
– プログラムもデータも Wikiページ上にある
• Wikiページ型並列プログラミング(新?)
– Wikiページ型プログラミングで SPMD型並列プログラミング
8. 2. 可用性向上とSPMD
2.1 前提
• Bot は
– 定期的に Wiki サーバの
スクリプトとデータを読込み
– 一定時間内にスクリプト
の実行を終了
– 定期的に実行結果や
Botの活動状況を
Wikiサーバに書込み
– それぞれを識別できるIDを持つ.
13. 2. 可用性向上とSPMD
2.6 システム更新への応用
• このシステムそのものの更新
• 運用停止時間をできるだけ短く
• Primary の Class ページ実行中
Secondary のClassページを入替
強制的に Primary のClassの
サーバを停止
Classページのサーバのfailover
Primary のClassページを更新
• Objectページでも同様
15. 2. 可用性向上とSPMD
2.7 Botの一斉操作
• Botの停止
– 対応するObjectページを書き換えないように指示-> 実質的に停止
• Botの初期化
– 対応するObjectページのデータ部分を初期化
• Botの実行
– 対応するObjectページをプログラムに従って書き換えるようにする。
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>
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. 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. • 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. 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. 4. 動的計画法のプログラム
• program: lineNumber=getMaxIndex(thisRowLabel)
program: minVal=10000
program: selectedNode=0
program: selectedPath="“
program: preNodes=0
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. 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. 4. 動的計画法のプログラム
• 各前nodeについての計算
– 自ノードの表のi行目が preNode であれば以下を実行
• i行目のurlのページを読む(ダメだったらurl2のページを読む).
読んだページの表をprevPageに代入
• prevPageの中のnodeInfo がある行を探す
• その行の val (prevVal)を取り出して,
i番目の前ノードと自ノードの間のarc の
arcValを取り出して, xval に prevVal+arcValを代入
• 自ノードの表のi行目の valに xvalを代入
32. 4. 動的計画法のプログラム
• 前ノードの nodeInfoがある行の path を取り出す
• 自ノードの表のi行目のpath に, 上で求めた path を代入
• もし xval が今までの前ノードの xval の中で最小であれば,
selectedNode を, この行が表す前ノードとし, selectedPathを上
で求めた path とする
– すべての前ノードにおける(Start nodeからの) minimal
path と, その pathの value が求まっていれば,自ノードに
至る minimal pathが selected path になる。
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. 動的計画法のプログラム
39. 5. 計算時間の測定実験
• TI: 30秒. 横軸:最小経路の arc の本数
縦軸の時間: 結果が求まるまでの時間
• それぞれの arc の本数について, 5回ずつ測定
• R2が0.98 -> 計算時間はほぼ, arcの本数に比例
• 比例定数は, 予測値である15に比較的近い
– 15秒を超えている部分は計算時間と推定.
• 切片が 5.85秒… 計測間隔が10秒であった影響
40. 5. 計算時間の測定実験
• 最小経路となる弧の数が, そうではない場合の弧の数より大
きいとき, 最初に goal node に現れる経路は最小経路ではな
い場合あり
• しかしながら, 最終的には最小経路が求まり, それ以後は,
goal node の結果はずっと最小経路とその値
41. 6. 関連研究
• VRRP
– router. ここでは汎用計算のHA
• 動的計画法の並列計算
– 過去の研究はCPU利用効率重視. ここではCPU利用効率は無視.
• SETI@Home
– 大量のCPUの利用の道筋を開く.
– 固定的な, ノード間通信はほとんど発生しない計算のみ.
ここでは汎用的で, ノード間通信を含む計算.