TimerManによる非同期制御の解説

分散自己安定化リレー制御(Distributed Self-Stabilizing Relay Control)

はじめに:秩序は「強制」ではなく「対話」から生まれる

従来の非同期システムにおいて、整合性を保つためのロックやセマフォは強力な手段でした。しかし、厳格な排他制御はシステムの柔軟性を損ない、時にボトルネックを生む要因となります。

本稿で解説するシステムは、共有メモリを一切排除し、各ノードが近傍との「対話」のみで最適化を図る設計です。中央集権的な調整役は存在しません。にもかかわらず、システム全体は刻々と変化する環境の中で、まるで意思を持っているかのように自律的に整列状態(昇順)へと収束していきます。

これは、分散システムにおける「自己安定性(Self-Stabilization)」の実装実験です。ロックという「停止」を捨て、メッセージという「対話」だけで整合性を担保する、次世代P2P通信の原型をご覧ください。

設計の考え方

TimerMan 追いかけっこシミュレーション

最大行数 PING待ちカウント 安定性 Auto50

GUIモードノード数:

ノードID
O   X

Source Code



    

    

ログの例

...
AllNowPos: [X:0.059,ΔX:0.0396] | [X:0.009,ΔX:0.0374] | [X:0.473,ΔX:0.0064] | [X:0.253,ΔX:0.0025] | [X:0.999,ΔX:0.0045]
Msg-Swapped: 2 <-> 3 (Done)
AllNowPos: [X:0.059,ΔX:0.0396] | [X:0.009,ΔX:0.0374] | [X:0.253,ΔX:0.0050] | [X:0.479,ΔX:0.0037] | [X:0.999,ΔX:0.0045]
AllNowPos: [X:0.059,ΔX:0.0396] | [X:0.009,ΔX:0.0374] | [X:0.253,ΔX:0.0050] | [X:0.483,ΔX:0.0037] | [X:0.999,ΔX:0.0045]
Msg-Swapped: 4 <-> 3 (Done)
AllNowPos: [X:0.059,ΔX:0.0396] | [X:0.009,ΔX:0.0374] | [X:0.253,ΔX:0.0050] | [X:0.000,ΔX:0.0076] | [X:0.483,ΔX:0.0024]
AllNowPos: [X:0.099,ΔX:0.0396] | [X:0.009,ΔX:0.0374] | [X:0.253,ΔX:0.0050] | [X:0.000,ΔX:0.0076] | [X:0.483,ΔX:0.0024]
Msg-Swapped: 1 <-> 0 (Done)
AllNowPos: [X:0.047,ΔX:0.0749] | [X:0.099,ΔX:0.0203] | [X:0.253,ΔX:0.0050] | [X:0.000,ΔX:0.0076] | [X:0.483,ΔX:0.0024]
Msg-Swapped: 2 <-> 3 (Done)
AllNowPos: [X:0.047,ΔX:0.0749] | [X:0.099,ΔX:0.0203] | [X:0.000,ΔX:0.0153] | [X:0.258,ΔX:0.0030] | [X:0.483,ΔX:0.0024]
AllNowPos: [X:0.047,ΔX:0.0749] | [X:0.099,ΔX:0.0203] | [X:0.000,ΔX:0.0153] | [X:0.261,ΔX:0.0030] | [X:0.483,ΔX:0.0024]
AllNowPos: [X:0.047,ΔX:0.0749] | [X:0.099,ΔX:0.0203] | [X:0.000,ΔX:0.0153] | [X:0.261,ΔX:0.0030] | [X:0.485,ΔX:0.0024]
AllNowPos: [X:0.122,ΔX:0.0749] | [X:0.099,ΔX:0.0203] | [X:0.000,ΔX:0.0153] | [X:0.261,ΔX:0.0030] | [X:0.485,ΔX:0.0024]
Msg-Swapped: 1 <-> 0 (Done)
AllNowPos: [X:0.119,ΔX:0.0406] | [X:0.122,ΔX:0.0379] | [X:0.000,ΔX:0.0153] | [X:0.261,ΔX:0.0030] | [X:0.485,ΔX:0.0024]
Msg-Swapped: 2 <-> 1 (Done)
AllNowPos: [X:0.119,ΔX:0.0406] | [X:0.015,ΔX:0.0306] | [X:0.122,ΔX:0.0195] | [X:0.261,ΔX:0.0030] | [X:0.485,ΔX:0.0024]
AllNowPos: [X:0.119,ΔX:0.0406] | [X:0.015,ΔX:0.0306] | [X:0.122,ΔX:0.0195] | [X:0.264,ΔX:0.0030] | [X:0.485,ΔX:0.0024]
AllNowPos: [X:0.119,ΔX:0.0406] | [X:0.015,ΔX:0.0306] | [X:0.122,ΔX:0.0195] | [X:0.264,ΔX:0.0030] | [X:0.488,ΔX:0.0024]
AllNowPos: [X:0.160,ΔX:0.0406] | [X:0.015,ΔX:0.0306] | [X:0.122,ΔX:0.0195] | [X:0.264,ΔX:0.0030] | [X:0.488,ΔX:0.0024]
Msg-Swapped: 1 <-> 0 (Done)
AllNowPos: [X:0.046,ΔX:0.0612] | [X:0.160,ΔX:0.0208] | [X:0.122,ΔX:0.0195] | [X:0.264,ΔX:0.0030] | [X:0.488,ΔX:0.0024]
Msg-Swapped: 2 <-> 1 (Done)
AllNowPos: [X:0.046,ΔX:0.0612] | [X:0.141,ΔX:0.0389] | [X:0.160,ΔX:0.0109] | [X:0.264,ΔX:0.0030] | [X:0.488,ΔX:0.0024]
AllNowPos: [X:0.046,ΔX:0.0612] | [X:0.141,ΔX:0.0389] | [X:0.160,ΔX:0.0109] | [X:0.267,ΔX:0.0030] | [X:0.488,ΔX:0.0024]
AllNowPos: [X:0.046,ΔX:0.0612] | [X:0.141,ΔX:0.0389] | [X:0.160,ΔX:0.0109] | [X:0.267,ΔX:0.0030] | [X:0.490,ΔX:0.0024]
AllNowPos: [X:0.107,ΔX:0.0612] | [X:0.141,ΔX:0.0389] | [X:0.160,ΔX:0.0109] | [X:0.267,ΔX:0.0030] | [X:0.490,ΔX:0.0024]
Msg-Swapped: 1 <-> 2 (Done)
AllNowPos: [X:0.107,ΔX:0.0612] | [X:0.160,ΔX:0.0218] | [X:0.180,ΔX:0.0200] | [X:0.267,ΔX:0.0030] | [X:0.490,ΔX:0.0024]
AllNowPos: [X:0.107,ΔX:0.0612] | [X:0.160,ΔX:0.0218] | [X:0.200,ΔX:0.0200] | [X:0.267,ΔX:0.0030] | [X:0.490,ΔX:0.0024]
AllNowPos: [X:0.107,ΔX:0.0612] | [X:0.160,ΔX:0.0218] | [X:0.200,ΔX:0.0200] | [X:0.270,ΔX:0.0030] | [X:0.490,ΔX:0.0024]
AllNowPos: [X:0.107,ΔX:0.0612] | [X:0.160,ΔX:0.0218] | [X:0.200,ΔX:0.0200] | [X:0.270,ΔX:0.0030] | [X:0.492,ΔX:0.0024]
...

まとめ:これからの展望 ― 自己組織化するP2Pネットワークへ

本システムは現在、固定されたノードIDを基準としていますが、今後はこれを「順位ポイント(Rank Point)」という動的な評価値へ置き換えることで、さらなる進化を目指します。

特に重要なのは、「十分に自己安定化したノードには余計な調整を行わせない」という適応制御の思想です。高順位のノードほど通信頻度を下げ、リソースを不安定なノードへ集中させることで、ノード数が増大してもスケーラブルに動作するネットワークを実現します。

関係性・相対関係の定義です

・距離が小さくなることは逆乗則なので速度が上がる方向性です
・距離が大きくなることは逆乗則なので速度が下がる方向性です
・通信が必要な時間は距離/速度なので近かろうと遠かろうともある一定の値であるとします:デフォルト設定
・距離が小さい場合で速度も小さい場合はデフォルト設定よりも長くなります
・距離が大きい場合で速度も大きい場合はデフォルト設定よりも短くなります

という本当に単純な関係性ですしたがって次の例外的な境界条件が導かれます

・近傍でも同期がとれている(速度が小さい)からこそ特別に通信する必要がなくなり
・遠方でも同期がとれていない(速度が大きい)からこそ特別に通信する必要が出てくるのです

関係性を整理します

・通信が必要な時間は距離/速度なので近かろうと遠かろうともある一定の値であるとします:デフォルト設定T0
・デフォルト時間設定T0=距離X0/速度V0
・速度設定V0=距離X0/時間T0
・距離設定X0=速度V0*時間T0=0

・通信・介入がデフォルト頻度よりも多く必要な場合t<T0→V0<v,x<X0
・通信・介入がデフォルト頻度よりも少なくても済む場合T0<t→v<V0,X0<x

・つまりどうすれば相手との距離をゼロにできるかです

非常に明確で単純なガイドラインです
中学理科レベルでも理解できるので簡単に運用できます

・逆に距離をゼロにしたくない場合は
・デフォルト距離設定X0=速度V0*時間T0=∞
・時間設定T0=距離X0/速度V0
・速度設定V0=距離X0/時間T0

・離れたい場合X0<x→∞→V0<v,T0<t
・近づきたい場合0←x<X0→v<V0,t<T0

・もう一つ速度をゼロにしたい同期をとりたい場合は
・デフォルト速度設定V0=距離X0/時間T0=0
・時間設定T0=距離X0/速度V0
・距離設定X0=速度V0*時間T0

・同期をとりたい場合0←v<V0→x<X0,T0<t
・同期をとりたくない場合V0<v→∞→X0<x,t<T0

・最後に近くで一緒にいたい場合は
・デフォルト設定時間T0=距離X0/速度V0=0
・デフォルト距離設定X0=速度V0*時間T0=0
・速度設定V0=距離X0/時間T0

・近くで一緒にいたい場合0←t<T0,0←x<X0→v:未定義
・遠くで離れていたい場合T0<t→∞,X0<x→∞→v:未定義

なので恋愛感情は方程式では解けません

・時間設定T0=距離X0/速度V0
基本的には距離と速度は逆乗則
その中でも逆二乗則になれば
球の半径(二点間最短距離)R(Sn)=√(Σ((iSn)^2)) : i=単位虚数 Sn:軸の
直交座標系幾何学的回転が関わってきます

誰も方程式では解くことが出来ないチューリングラブ

「本研究はNAT越えやポートフォワーディング技術を置き換えるものではありません。通信路が確立した後のノード間協調、自己安定化、役割分担を対象とする分散制御方式の提案です。」

つまり一般技術者では手の届かないポートフォワーディング云々は置いておいて、その通信確立の上でのアカウント連携における振る舞いについて想定しているものです。

要するにP2P的なアカウント連携についての話です



操作デモ







<< その27:マネージドマルチスレッドテスト : 分散自己安定化リレー制御[仮想アカウント版] >>




戻る