# HG changeset patch # User Nozomi Teruya # Date 1517908750 -32400 # Node ID 5a0a11b54ab41b701641317ad0322443680bdb6d # Parent a3ee75a897f34fb618ff36e98fe51c613fa9bca7 add slide comment diff -r a3ee75a897f3 -r 5a0a11b54ab4 presen/sample.html --- a/presen/sample.html Tue Feb 06 13:46:47 2018 +0900 +++ b/presen/sample.html Tue Feb 06 18:19:10 2018 +0900 @@ -87,7 +87,7 @@ @@ -170,7 +170,7 @@

Data Segment Manager

@@ -184,7 +184,8 @@
  • Remote DSM … 他のノードのLocal DSMのproxy。接続しているノードの数だけ存在する。
  • Remote DSMに書き込むと対応するノードのLocalDSMに書き込まれる
  • Remote DSMにはString型のDSM keyを指定してアクセスする -opt
  • +opt +//図を訂正 @@ -216,10 +217,10 @@

    Code Segmentの記述例

    public class TestCodeSegment extends CodeSegment { 
         private Receiver input = ids.create(CommandType.TAKE);
    @@ -246,14 +247,31 @@
     
     

    Computation と Meta Computation

      -
    • Aliceでは、計算の本質的な処理をComputatin、Computationとは別のレベルでそれを支える処理をMeta Computationとして分けて考える。
    • -
    • Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理
    • -
    • Meta Computationはそれを実現している処理 +
    • 分散計算にはアルゴリズムの他に、以下のような処理が必要である。
        -
      • DSの待ち合わせ
      • 分散トポロジーの構成
      • 通信の切断・再接続時の処理
      • -
      • データの表現形式の選択
      • +
      • データの圧縮を含む表現形式の選択
      • +
      • NATなどのネットワークの詳細
      • +
      +
    • +
    • Aliceでは、これらをMeta Computationと呼ぶ。
    • +
    • Meta ComputationもCS/DSによって記述される。
    • +
    + + + +
    + +

    AliceのMeta Computation - Topology Manager

    +
      +
    • Topology Manager +
        +
      • ノード間の接続管理やトポロジーの構成管理行うMeta Computation
      • +
      • Static Topology Manager…参加ノード数の決まったトポロジーをファイルに記述
      • +
      • Dynamic Topology Manager…可変長のノードに対応し、修復も行う +opt +//図を訂正
    @@ -262,74 +280,12 @@
    -

    Computation と Meta Computation

    -
      -
    • 分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する
    • -
    • プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する
    • -
    • シンプルで見通しの良いコードを保つ
    • -
    - - -
    -
    - -

    AliceのMeta Computation - Topology Manager/Topology Node

    -
      -
    • Topology Manager -
        -
      • ノード間の接続管理やトポロジーの構成管理行うMeta Computation
      • -
      • Static Topology ManagerとDynamic Topology Managerがある
      • -
      -
    • -
    • Topology Node -
        -
      • 各ノード側でTopology Managerとの通信を行うMeta Computation
      • -
      • ノードアプリケーションを記述する際にTopology Nodeをnewしておけば以降のTopology Managerとの通信やノード間の接続を行う
      • -
      -
    • -
    - - -
    -
    - -

    AliceのMeta Computation - Topology Manager/Topology Node

    -
      -
    • Topology Managerを立ち上げる
    • -
    • 各Topology NodeはTopology Managerに参加表明をし接続すべきノードの情報を要求する
      -opt
    • -
    - - -
    -
    - -

    AliceのMeta Computation - Topology Manager/Topology Node

    -
      -
    • 参加表明があった順に各ノードにnodeNameを割り当て、接続するべきノードのIPアドレス/ポート番号を送る -opt
    • -
    - - -
    -
    - -

    AliceのMeta Computation - Topology Manager/Topology Node

    -
      -
    • Topology Nodeが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでオーバーレイネットワークが作られる
    • -
    • Topology Managerは接続情報を管理し、実際の接続はTopology Nodeが行う -opt
    • -
    - - -
    -
    -

    AliceのMeta Computation - 圧縮

      -
    • DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる
    • -
    • 圧縮したデータの伸長と圧縮したままの転送が同時に可能 -opt
    • +
    • 圧縮したデータの伸長と圧縮したままの転送を同時に行いたい
    • +
    • DSは内部に圧縮・非圧縮の複数の形式を複数もつことができる +opt +//図を訂正
    @@ -348,22 +304,12 @@
    -

    AliceのNATを越え

    +

    AliceのNAT越え

    • NATを越えたノード間通信は分散処理の課題である
    • -
    • Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくともTopology Managerを増やすことでNAT越えが可能
    • -
    - - -
    -
    - -

    AliceのNATを越え接続

    -
      -
    • 各プライベートネットワーク内を管理するPrivate Topology Manager
    • -
    • グローバルIPアドレスを持ったGlobal Topology Managerを1つ立てる
    • -
    • TopologyNodeが複数対応できるためPrivate/Global Topology Managerに接続
      -opt
    • +
    • Aliceではトポロジー管理がアプリケーションから分離しているため、コードを大きく変更しなくとも複数のTopology Managerを立ち上げることでNAT越えが可能 +opt +//図を訂正
    @@ -372,19 +318,7 @@

    複数のTopology Managerへの対応

      -
    • 別トポロジーのアプリケーションの連携やNAT越えはノードが複数のTopologyManagerに接続することで可能になる
    • -
    • この機能を実現するにはTopology Nodeが各Topology Managerに対応する複数のnodeNameを持つようにする必要がある
    • -
    • Topology Nodeは割り当てられたnodeNameをDSとして保持してTopology Managerと通信を行うため、nodeNameの衝突を避けなければならない
    • -
    - -

    opt

    - - -
    -
    - -

    Local DSMの切り替えによる対応

    -
      +
    • この機能を実現するにはノードに割り当てられたnodeNameの衝突を避けなければならない
    • 通常のLocal DSMとは別にTopology ManagerごとのLocal DSMを作成しnodeNameを管理
    • Tpology Manager/Nodeの働きはそのままに、指定するLocal DSMを変えるだけでTopology Managerの複数対応が可能
      opt
    • @@ -418,7 +352,6 @@
      • どんな処理を行っているかわかりづらい
      • 対応するput箇所も修正しなければならない
      • -
      • モデル検査しづらくなる
    @@ -429,32 +362,18 @@

    Aliceの問題点 - APIシンタックスの分離

      -
    • setKeyは全てのcreateが終わった最後に呼ばなければならない -
        -
      • Input DGの待ち合わせを行うカウンタはcreateの総数を持っている
      • -
      • カウントが0になると入力が揃ったと判断しrunに入る
      • -
      • countとsetKeyを交互に書くと入力が揃わないまま実行されNullPointExceptionになる
      • -
      -
    • +
    • setKeyは全てのcreateが終わった最後に呼ばなければならない
    • +
    • 以下のような書き方では実行時データを取り出すときにNullPointerExeptionになる
    class ShowData extends CodeSegment{
    -    private Receiver[] info;
    +    private Receiver input1;
    +    private Receiver input2;
     
         public ShowData(int cnt) {
    -        info = new Receiver[cnt];
    -        for (int i= 0;i < cnt; i++) {
    -            info[i] = ids.create(CommandType.TAKE);
    -            info[i].setKey(SetInfo.array[i]);
    -        }
    -    }
    -
    -    @Override
    -    public void run() {
    -        int size = 0;
    -        for (Receiver anInfo : info) {
    -            DataList dlist = anInfo.asClass(DataList.class);
    -            dlist.showData();
    -        }
    +        input1 = ids.create(CommandType.TAKE);
    +        input1.setKey("hoge");
    +        input2 = ids.create(CommandType.TAKE);
    +        input2.setKey("huga");
         }
     }
     
    @@ -463,6 +382,13 @@
    +

    Aliceの問題点 - APIシンタックスの分離

    +

    //なぜそうなるのか

    + + +
    +
    +

    Aliceの問題点 - 型が推測できない

    • Input DSをReceiver型でcreateするため、どの型のデータを待っているのかわからない
    • @@ -489,30 +415,12 @@
    -

    分散フレームワークChristieへの必要要件

    -
      -
    • Aliceの問題点を踏まえ、フレームワークをChristieを設計する -
        -
      • staticなLocalDSMをなくし複数インスタンスを立ち上げられるようにすることでスケーラビリティを高める
      • -
      • 煩雑なAPIをシンプルにし、記述性を高める
      • -
      • 型の整合性をとれるようにし、信頼性を向上させる
      • -
      -
    • -
    - - -
    -
    -

    Christie - 基本設計(1)

    • Javaで実装される
    • -
    • CS/DSの依存関係や、DSMの構造、リモートノードへの接続方法はAliceと同様である
    • -
    • 将来的に当研究室で開発しているGearsOSに統合したい -
        -
      • GearsOSに倣い、Code Gear(CG)/ Data Gear(DG) という名称を用いる
      • -
      -
    • +
    • 処理の単位にCode Gear(CG)/ Data Gear(DG) という名称を用いる
    • +
    • Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理 +opt
    @@ -521,9 +429,13 @@

    Christie - 基本設計(2)

      -
    • Code Gear Manager(CGM)という機構がData Gear Manager(DGM)を管理
    • -
    • 1つのCGMは1つのLocalDGMを持つ
    • -
    • CGM同士はThreadPoolとCGMのリストを共有している +
    • CGM同士はThreadPoolを共有 +
        +
      • ThreadPool…CPUに合わせた並列度でキューに入ったスレッドを順次実行していく実行機構
      • +
      • ThreadPoolが増えると性能はあがらないため共有
      • +
      +
    • +
    • CGM同士はCGMのリストを共有
      • メタ計算で全てのCGMにアクセス可能 opt
      • @@ -573,11 +485,17 @@
        • keyの指定にはJavaのアノテーションを用いる
            -
          • 先頭を@で始める注釈
          • +
          • フィールドやメソッドに対して属性を付与できる +
              +
            • Override、@SuppressWarningsなど
            • +
            • コンパイル時にエラーを出せる
            • +
            +
          • 独自アノテーションを定義できる
          • +
          • RUNTIMEとかの指定 +//例を入れる
        • -
        • アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用
        @@ -586,7 +504,8 @@

        Christie - アノテーションを用いたインプット記述

          -
        • InputのためのDGを宣言し、その上にアノテーションでkeyを指定
        • +
        • InputのためのDGをフィールドで宣言し、それに対してアノテーションでkeyを指定
        • +
        • RUNTIME
        • Takeの例
        @Take(”count”)
        @@ -605,6 +524,22 @@
         
         

        Christie - アノテーションを用いたインプット記述

          +
        • アノテーションから待ち合わせを行う処理にはJavaのreflectionAPIを使用 +//javassistの話入れる?→Classを1つもnewしてない状況じゃなきゃ使えない?
        • +
        • 内部でどうなっているのか +
            +
          • newしたあとsetupを行う
          • +
          • RUNTIMEにしたためフィールドがnewされたあとでないとrefrectionAPIで取れない
          • +
          +
        • +
        + + +
    +
    + +

    Christie - アノテーションによるシンタックスの分離阻止

    +
    • アノテーションは必ずフィールドに付けなければならない
      • InputDGの生成とkeyの指定を一箇所に書ける
      • @@ -621,7 +556,7 @@
    -

    Christie - 型を指定しないデータ取り出し

    +

    Christie - 型を指定しないデータ取り出し

    • InputDGを宣言する際には必ず型の指定が必要となるため、CG内で型を把握できる
    • DataGearはJavaの総称型を用いて<>内に指定した型を受け取る
    • @@ -634,8 +569,10 @@
    -

    Christie - 型を指定しないデータ取り出し

    +

    Christie - 型を指定しないデータ取り出し

      +
    • reflectionAPIを使えばアノテーションのついているフィールドの情報もとれる
    • +
    • 型を判断できる
    • 宣言された型は内部で保存され、ノード間通信でも保たれる
    • AliceのasClass()と違い、getData()で型を指定せずにデータを取り出すことができる
    @@ -649,14 +586,15 @@ }
    -

    Christie - まとめ

    +

    Christie - まとめ

    • CodeGearManagerというDGMの管理機構を作ったことでLocalDGM複数立ち上げが可能になり、NAT越えなどの機能拡張やテストをしやすくなった
    • アノテーションを用いたことでDG生成とkey指定の分離問題を解決し、処理の見通しを良くした
    • @@ -667,7 +605,7 @@
    -

    Christieと他フレームワークの比較

    +

    Christieと他フレームワークの比較

    • Akka、Hazelcastと比較してChristieの特徴を述べる
        @@ -722,7 +660,7 @@
    -

    Christieと他フレームワークの比較 - 設計思想

    +

    Christieと他フレームワークの比較 - 設計思想

    • AkkaやHazelcastはロケーション透過性が高く、分散プログラムの煩雑な処理を抽象度を高めることで隠している
    • Christieでは分散性を明示的に意識しながら記述できるためチューニングしやすい
    • @@ -733,7 +671,7 @@
    -

    Christieと他フレームワークの比較 - 記述性

    +

    Christieと他フレームワークの比較 - 記述性

    • アノテーションを使ったインプットの指定はAkkaやHazelcastにはない
    • 複数のインプットを待ち合わせして処理を行いたい場合 @@ -776,39 +714,6 @@
    • GearsOSへの移行
    - -
    -
    - -

    Christie - CGの生成方法

    -
      -
    1. StartCodeGear.classを継承しCGMを生成する
    2. -
    3. CGをnewしたあとsetupを用いる -
        -
      • newが終わらないとアノテーションから待ち合わせを行う処理ができないため
      • -
      • このときCGMがCGに渡されるため、プログラマが引数にCGMを渡す必要はない
      • -
      -
    4. -
    - -
    public class StartTest extends StartCodeGear{//StartCG
    -
    -    public StartTest(CodeGearManager cgm) {
    -        super(cgm);
    -    }
    -
    -    public static void main(String args[]){
    -        StartTest start = new StartTest(createCGM(10000));//CGMを生成
    -    }
    -
    -    @Override
    -    protected void run(CodeGearManager cgm) {
    -        cgm.setup(new TestCodeGear());//CGの待ち合わせを開始
    -        getLocalDGM().put("count", 1);
    -    }
    -}
    -
    -