Bot Computing and its Application
to Solve Minimal Path Problems
山之上卓
福山大学
IPSJ 第122 回プログラミング研究会, 1/18, 2019@福山市ものづくり交流館セミナールーム
内容
• はじめに
• Bot Computingの概要
• 実験的な実装
• 最小経路問題への応用
• 関連研究
• おわりに
#ipsjpro
1. はじめに
• (悪性) Botnet はしぶとい(耐障害性がある)
– 少々のBotをつぶしても、Botnet全体としては継続して悪いことを
する
• (悪性) Botnet は強い(超並列性がある)
– (攻撃を受ける側が)かなり太いネットワーク、負荷分散してても、
DDoS攻撃等で業務妨害する。
– かなり多くのメアドに、Spam メールをばらまく
1. はじめに
• Botnetの耐障害性、超並列性を利用できたら、役立つかも。
#ipsjpro
1. はじめに
WikiWiki
Wiki Wiki
Wiki Wiki
Wiki Wiki
• Wiki … 人にやさしい
• Wiki … マシンにもやさしいはず
• 人と機械のためのWiki
• 自動的なデータ交換のためのWiki
1. はじめに
• ここで扱うBot
– Wiki上のコマンドで遠隔操作可能なマシン
#ipsjpro
2. Botコンピューティングの概要
2.1 Botコンピューティングとは
• ここでのBot
– 遠隔操作コンピュータまたは遠隔操作プログラム
• Bot コンピューティング
– Botによるコンピューティング
– 並列計算
2. Botコンピューティングの概要
2.2 Wiki ページ型計算
• ノイマン型コンピュータ
– プログラムもデータもメモリ上にある
• Wikiページ型計算 (新?)
– プログラムもデータも Wikiページ上にある
• Wikiページ型並列計算(新?)
– Wikiページ型プログラミングで SPMD型並列プログラミング
2. Botコンピューティングの概要
2.2 Wiki ページ型計算
• Wikiページ型並列計算
– SPMD …. Single Program, Multiple Data
– 個々のBotは従来型の逐次プログラムの実行
– 全体としては, データフロー型並列処理
2. Botコンピューティングの概要
2.3 協調計算
• Wikiネットワークは共同作業のためによく利用
– 従来のWikiページの多くは静的
で人が更新
– Wiki ネットワークに動的性質
を加えて、共同作業を強化
#ipsjpro
2. Botコンピューティングの概要
2.4 Botの振る舞い
2. Botコンピューティングの概要
2.5 ClassページとObjectページ
• Botコンピューティングは
オブジェクト指向コンピューティング
• ObjectはWikiページ(Objectページ)
とBotのペア
• Classページは複数のObjectページで共有
可能なWikiページ
– include コマンド
– 無駄な記述の削減, SPMD
• Over-riding も OK
– プログラミング言語は内部はLisp
2. Botコンピューティングの概要
2.6 高可用性(HA)
• 悪性Botnetは耐久性がある。
• BotコンピューティングにもHA
を導入
• Crossover including,
crossover execution
– VRRPと同様
2. Botコンピューティングの概要
2.X その他
• このシステムそのものの更新
• 運用停止時間をできるだけ短く
• Primary の Class ページ実行中
Secondary のClassページを入替
強制的に Primary のClassの
サーバを停止
Classページのサーバのfailover
Primary のClassページを更新
• Objectページでも同様
2. Botコンピューティング
の概要
2.X その他
2. Botコンピューティングの概要
2.X その他
• 多くのBotを操作するために
Object ページを個別に書き換
えて制御するのは大変
• Class ページの書き換えで
Botの一斉操作可能
2. Botコンピューティングの概要
2.X その他
• Botの停止
– 対応するObjectページを書き換えないように指示-> 実質的に停止
• Botの初期化
– 対応するObjectページのデータ部分を初期化
• Botの実行
– 対応するObjectページをプログラムに従って書き換えるようにする。
3. 試験的な実装
3.1 簡単な例
Classページ
3. 試験的な実装
3.1 簡単な例
• 実行前の Objectページ
3. 試験的な実装
3.1 簡単な例
• 実行後の Objectページ
3. 試験的な実装
3.2 組み込み関数
• ex(<object>,<command>)
– 例: page=ex(“connector”,
“getpage http://www.page.ex/”)
• getResultPart(<page>)
– Page の result: 以降を取り出す。
3. 試験的な実装
3.2 組み込み関数
• parseCsv(<csv>,<dataTable>, <rowLabel>,<columnLabel>)
– <col-label_1>=<val_1_1>,…,<col-label_1_1n>=<val_1_1n>.
– <col-label_2>=<val_2_1>,…,<col-label_2_2n>=<val_2_2n>.
– …
#ipsjpro
3. 試験的な実装
3.2 組み込み関数
3. 試験的な実装
3.2 組み込み関数
• sumif
• countif
• getindex
#ipsjpro
4. 最小経路問題への応用
4.1 Objectページ上のノードと
arc情報の記述
• Minimal Path
• (Backupも含めて)2枚のWikiページを1node に割り当て
• (Backupも含めて)2つのBotで1nodeの計算を担当
4. 最小経路問題への応用
4.1 Objectページ上のノードと
arc情報の記述
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>
4. 最小経路問題への応用
4.1 Objectページ上のノードと
arc情報の記述
• objectPage http://bot-4-1.org/index.php?Object or http://bot-4-2.org/index.php?Object
• device dev-4-1 or dev-4-2 start after no write for 10 min.
• include http://bot.org/index.php?DP or http://bot2.org/index.php?DP
• result:
• kind="nodeInfo",nodeName="4", startNode="1", selectedNode=0, val=0, path=""
• kind="preNode",No=1,url="http://bot-2-1.org/index.php?Object",
url2="http://bot-2-2.org/index.php?Object", arcVal=2,val=0,path=""
• kind="preNode",No=2,url="http://bot-3-1.org/index.php?Object",
url2="http://bot-3-2.org/index.php?Object", arcVal=3,val=0,path=""
• currentDevice="dev-4-1", Date=2016/5/27/ 22:10:40
4. 最小経路問題への応用
4.1 Objectページ上のノードと
arc情報の記述
• 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=""
4. 最小経路問題への応用
4.1 Objectページ上のノードと
arc情報の記述
• 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=""
4. 最小経路問題への応用
4.3 Classページの記述
• 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. 最小経路問題への応用
4.3 Classページの記述
4. 最小経路問題への応用
4.3 Classページの記述
• 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)
4. 最小経路問題への応用
4.3 Classページの記述
• program: lineNumber=getMaxIndex(thisRowLabel)
program: minVal=10000
program: selectedNode=0
program: selectedPath="“
program: preNodes=0 #ipsjpro
4. 最小経路問題への応用
4.3 Classページの記述
• program: for i=0 to lineNumber-1
各前ノードについての計算
program: next i
• program: thisNodeIndex=getIndex(thisTable,thisRowLabel,
thisColumnLabel("kind"),"=","nodeInfo")
program: thisTable(thisNodeIndex,thisColumnLabel(
"selectedNode"))=selectedNode //
4. 最小経路問題への応用
4.3 Classページの記述
• program: if mode="reset" then
program: {
Object Pageのノードと Arcの情報の初期化
program: }
program: mode=”run” then
program: {
計算結果によるノードとArcの情報の更新
program: }
command: end dp
command: run dp
4. 最小経路問題への応用
4.3 Classページの記述
• 各前nodeについての計算
– 自ノードの表のi行目が preNode であれば以下を実行
• i行目のurlのページを読む(ダメだったらurl2のページを読む).
読んだページの表をprevPageに代入
• prevPageの中のnodeInfo がある行を探す
• その行の val (prevVal)を取り出して,
i番目の前ノードと自ノードの間のarc の
arcValを取り出して, xval に prevVal+arcValを代入
• 自ノードの表のi行目の valに xvalを代入
4. 最小経路問題への応用
4.3 Classページの記述
• 前ノードの nodeInfoがある行の path を取り出す
• 自ノードの表のi行目のpath に, 上で求めた path を代入
• もし xval が今までの前ノードの xval の中で最小であれば,
selectedNode を, この行が表す前ノードとし, selectedPathを上
で求めた path とする
– すべての前ノードにおける(Start nodeからの) minimal
path と, その pathの value が求まっていれば,自ノードに
至る minimal pathが selected path になる。
• (実行終了後の)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. 最小経路問題への応用
4.3 Classページの記述
4. 最小経路問題への応用
4.3 実験
• 理論値
T=Na(TI/2+TX)
Na : 最小経路の弧の数
TI : Objectページの読み込み間隔
TX: ページが読み込まれてから
実行が終了する までの時間
4. 最小経路問題への応用
4.3 実験
(a) Minimal path=1-2-4 (b) Minimal path=1-3-6-8-4
Arc数=2 Arc数=4
4. 最小経路問題への応用
4.3 実験
( c ) minimal Path =1-3-4-8-10-12-14-17-19
Arc 数=8
4. 最小経路問題への応用
4.3 実験
4. 最小経路問題への応用
4.3 実験
4. 最小経路問題への応用
4.3 実験
• TI: 30秒. 横軸:最小経路の arc の本数
縦軸の時間: 結果が求まるまでの時間
• それぞれの arc の本数について, 5回ずつ測定
• R2が0.98 -> 計算時間はほぼ, arcの本数に比例
• 比例定数は, 予測値である15に比較的近い
– 15秒を超えている部分は計算時間と推定.
• 切片が 5.85秒… 計測間隔が10秒であった影響
4. 最小経路問題への応用
4.3 実験
• 最小経路となる弧の数が, そうではない場合の弧の数より大
きいとき, 最初に goal node に現れる経路は最小経路ではな
い場合あり
• しかしながら, 最終的には最小経路が求まり, それ以後は,
goal node の結果はずっと最小経路とその値
5. 関連研究
• 悪性Botnet
• Fog computing … remote control の記述なし
• Softwarization of IoT…SDN利用 vs. Bot computingのwiki
• Javelin … Java-enabled Webブラウザ必要
• WIKI API … いろいろなWiki のAPI
• Galaxy Wiki …Writing a wiki page is writing source code
– Bot computingはWikiページの記述とその実行部分を分離
5. 関連研究
• VRRP
– router. ここでは汎用計算のHA
• SETI@Home
– 大量のCPUの利用の道筋を開く.
– 固定的な, ノード間通信はほとんど発生しない計算のみ.
ここでは汎用的で, ノード間通信を含む計算.
• 動的計画法の並列計算
– 過去の研究はCPU利用効率重視. ここではCPU利用効率は無視.
6. おわりに
• 役に立つBotnet
• Wikiに動的ページを導入
• WikiとBotを使った「Wikiページ型並列プログラミング」
• 動的計画法による最小経路問題
– 効率は悪いが, BotとWebページが使い放題であれば問題なし.
• Failoverの検証はまだ.
• セキュリティについての検討も必要
• より記述量の少ない方法を検討中
謝辞
• 科研費JP16K00197
• 学生諸君
#ipsjpro

Bot Computing and its Application to Solve Minimal Path Problems