360 likes | 484 Views
Object Migration in an Ad-hoc Network Topology. B4 弘中 健. 現在の課題. Mobile object の実装例は数多くある Emerald, Amber, Thor, d-smalltalk, JavaParty, dJay… しかしすべて「静的」なネットワークを想定している ノードの増減がない All-to-All connection 可. 問題設定. Programmer から透過に見える migration 既存の Program を大幅に変更せずに済む Node 数は動的に変化しても良い
E N D
現在の課題 • Mobile objectの実装例は数多くある • Emerald, Amber, Thor, d-smalltalk, JavaParty, dJay… • しかしすべて「静的」なネットワークを想定している • ノードの増減がない • All-to-All connection可
問題設定 • Programmerから透過に見えるmigration • 既存のProgramを大幅に変更せずに済む • Node数は動的に変化しても良い • ただし、脱退は勿論ややこしいが • コネクションはall2allを想定しない • 必要なら中間nodeがroutingをする • つまり、ad-hoc networkでのmobile objectを想定している • 「許される範囲内」でのmessage数で
Mobile Object実現には • リモートオブジェクトのref.を取得する方法が必要 • Reference acquisition mechanism • そのrefから、位置が定かでなくても一意にremote objectをアクセス出来るシステムが必要 • Object location mechanism • Ad-hoc環境で、msgを効率にforwarding出来るメカニズムが必要 • Ad hoc network routing argorithm
Related Work • 単純にmigration srcがreference forwardingをする • Forwarding chainが長くなる • Forwarding nodeは脱退出来ない • 全てのobjの居場所を管理するcentral server • Single-point of failure • 負荷が集中する(scaleしないと思われる) • 勿論central serverは脱退出来ない
Object Location • Reference Acquisition • Ad-hoc Network Routing
Object Locationの提案手法 • どのように動くオブジェクトをアクセスするか?
Object Locationの提案手法 • 動く回るobjectを一意に決めるには、location-independent nameが必要 • 動いても変わらない • ここでは、Unique IDは以下のタプル • Obj creation元のprocess id • IP address, Port # • Obj creation元のunique local id
Object Locationの提案手法 • オブジェクトをレファレンスする時には • <UID, dst, seq. #> • Dst:今有ると思われるnodeの住所 • ディフォルトではUIDの先頭にある場所 • Seq #:情報の「新しさ」を意味する • 数が大きいほど新しい • Objectがmigrateするたびにincrementされる
Migration(1) • src -> dstへのmigration • srcがdstにobjectのコピーを送る • dstが受け取り、ACKをする
Migration(2) • Migrationをatomicに行う • 各remote objectにFLAGをつける • PRESENT • ARRIVING • LEAVING • PRESENT以外の時のアクセスはブロックする
Migrationの様子 OBJ. EFFECTIVENESS PRESENT → LEAVING SEND OBJ. CREATE OBJ. ENTITY ARRIVING ACK BROADCAST CHANGE ARRIVING → PRESENT OBJ. EFFECTIVENESS BROADCAST CHANGE DELETE OBJ. ENTITY
BROADCAST CHANGE • Objectがmigrateすると、srcとdstで変化をbroadcastをする • この際、seq.#は+1する • <UID, new location, seq#> • ただし、全体へのbroadcastではない • MessageにTTLを付けて、neighborhoodのnodeにのみ通知する • TTLはsrc-dst間のhops数に比例させる
TTLの意味 • Distance effect • 動きは、近くにあるノードほど大きく感じる • Speed • 速度が大きいほど変化を強く感じる • 変化を感じない場所に通知する必要はない
Object Location • すべてのreferenceは最新情報を持っているわけじゃない • Routingでカバーする • 各nodeはremote object routing tableを持つ • Broadcastで通知された情報 • Localにあるオブジェクトの情報 • 過去のアクセスで得た情報
Object Location • Accessにはまず、refに書いてあるdstへのnexthopを行く • <UID,dst,seq#> • 受け取りNodeではrouting tableのUIDエントリと比較する
Object Location • Referenceとtableのconflictが起きると • Sequence #の大きいほうを優先する • reference又はrouting tableを書き換える • Referenceに書いてあるdstのnexthopへ飛ぶ • dstが自分のノードだと勿論そこで処理が行われる
Node B Node C Node A Node D
Node B Node C Node A B(1) B(1) B(1) B(1) B(1) B(1) B(1) B(1) B(1) B(1) B(1) Migration:A→B HOPS=2 BROADCAST TTL=2 Node D
Node B Node C Node A C(2) C(2) C(2) B(1) C(2) B(1) C(2) B(1) B(1) B(1) B(1) Migration:B→C HOPS=1 BROADCAST TTL=1 Node D
Node B Node C Node A C(2) C(2) C(2) B(1) C(2) B(1) C(2) B(1) B(1) B(1) B(1) Node D: Access to Object A(0) A(0) Node D
Node B Node C Node A C(2) C(2) C(2) B(1) C(2) B(1) C(2) B(1) B(1) B(1) A(0) B(1) B(1) A(0) Node D
Node B Node C Node A C(2) C(2) C(2) B(1) C(2) B(1) C(2) B(1) B(1) B(1) B(1) B(1) B(1) A(0) Node D
Node B Node C Node A C(2) C(2) C(2) B(1) B(1) C(2) C(2) B(1) C(2) B(1) B(1) B(1) B(1) B(1) A(0) Node D
Node B C(2) Node C Node A C(2) C(2) C(2) B(1) C(2) B(1) C(2) B(1) B(1) B(1) B(1) B(1) A(0) Node D
Object Location • Reference Acquisition • Ad-hoc Network Routing
Reference Acquisition • Pass-by-argument • ObjectがRMIされた時に、引数として渡される • Public Name List • Remote objectを「公開」する時、ある名前で登録する • この名前を指定すればそのobjectにreferenceが作られる • 分散的にリストを管理する
Public Name List • 各プロセスは手元にPublic Name Listを持つ • ある名前を検索し、なかった場合は要求をBroadcastする • Broadcastして返事がないと、エラーになる
なぜbroadcastでいいか? • 名前は一回登録されたら変更されない • 常に同じobject UIDに対応する • レファレンス生成時にのみ行われる • 一回こっきり • 一回broadcastが起きると、全てのノードがその知識を共有する • つまり、一つの名前に付き一回broadcastが起きるだけ
Object Location • Reference Acquisition • Ad-hoc Network Routing
Ad-hoc Routing • Object locationで、あて先から”nexthop”を割り出すという作業 • つまり、object locationを下で支える手法
基本的な手法 • Proactive • 常に最新のrouting tableを • トポロジーに変化があった場合に、積極的にupdate msgを交換する • eg:DSDVなど • Reactive • 必要になったらrouting tableを更新する • アクセス時に正しい場所を皆で調べる • eg:simple broadcast, AODV, TORAなど • Hybrid • 各ノードを中心とした“zone”を定義する(数ホップ内のエリア) • このzone内ではproactiveに、その外ではreactiveに
それぞれの問題点 • Proactive • Msg数がO(N*N)で増加する • Reactive • アクセスが遅くなる • Hybrid • “zone”の範囲はどうする? • 動的に伸縮する手法もあるが、そのheuristicsもかなり怪しい
中間発表後の方針 • Routingはまだ未決定 • 取りあえずは、proactive/reactiveな手法で実装して見る • ベターなroutingアルゴリズムを考える • Mobile ad-hoc networkよりは制約は緩いはず • この制約の緩さを旨く使ったアルゴリズムを考えていきたいです
求めているもの • 基本的には、nodeに繋げる時は直接繋ぎに行く • 繋げないという万が一の時のためにroutingが必要 • そのためにO(N*N)のアルゴリズムを使うのは勿体ない • ノードの増減を許す
最後に • コメント・アドバイス大歓迎です • 実装処理系の名前も募集中です • Mudpy(ダメ、使われている) • Muddy? • Dsoapyはありきたりすぎかもしれません。。。