view slide/thesis.md @ 16:7293b6481e32

add slide & tweak
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sat, 15 Feb 2020 21:22:43 +0900
parents
children 55e745a21506
line wrap: on
line source

title: 分散フレームワークChristieを用いたリモートエディタの実装
author: Takahiro Ikki, Shinji Kono
profile: 琉球大学
lang: Japanese
code-engine: coderay

## 研究目的, 背景
- ペアプログラミングなどでは同時に複数人が一つのファイルを編集することができるリモートエディタが有効である。
- 既存のリモートエディタアプリケーションとしてVisual Stdio Codeがあげられる。
  - しかし、セッションに参加する全員がVSCodeの環境を持っていなければならず、不便である。
- 編集に参加するユーザーがそれぞれ好きなエディタが使えるアプリケーションを作成する。
- 本研究室で開発している分散フレームワークChristieを使い、簡潔な実装を目指す。


## 発表の流れ
- リモートエディタの機能と開発手順の解説
- スター型接続によるネットワーク通信
- Christieの解説
  - Gearの概念
  - アノテーション
  - TopologyManager
- 今後の課題とまとめ


## Christie
- Christieは当研究室で開発している、信頼性を重視した分散フレームワークである.
- 現在はjava上で開発されているが、別言語(CbC)で構成されたGearsOSに組み込む予定があるため,それに向けて書き換え可能な構成となっている。
- ChristieではデータをGearという単位で分割して記述を行う。
  - CodeGear(以下CG)
    - スレッドやクラスに相当し、javaの継承を用いて記述する。keyに全てのDGが格納された際に動作する。
  - DataGear(以下DG)
    - DGは変数に相当し、CG内でアノテーションを用いてデータを取り出せる。
  - CodeGearManager(以下CGM)
    - ノードに相当し, DG, CG, DataGearManagerの管理をする.
  - DataGearManager(以下DGM)
    - DGを管理するものであり, putという操作にて変数(DG)をkeyに格納する。


    ## Christieのコード例
    ```code
    package christie.example.HelloWorld;

    import christie.codegear.CodeGearManager;
    import christie.codegear.StartCodeGear;

    public class StartHelloWorld extends StartCodeGear {

        public StartHelloWorld(CodeGearManager cgm) {
            super(cgm);
        }

        public static void main(String[] args){
            CodeGearManager cgm = createCGM(10000); #ポート番号を指定してCGMを立ち上げ。
            cgm.setup(new HelloWorldCodeGear()); #立ち上げたCGMへCGを待ちあわせる。
            cgm.getLocalDGM().put("helloWorld","hello"); #keyname "helloWorld"に文字列helloをput
            cgm.getLocalDGM().put("helloWorld","world");
        }
    }

    ```
    ```
    ChristieDaemon.listen: bind to /0:0:0:0:0:0:0:0:10000
    hello world
    ```
    <!--
    - 立ち上げ後はManager名を指定してDataSegmentAPI用いてDSのやり取りを行うため、プログラマはManager名を意識することでLocalへの操作もRemoteへの操作も同様に扱える。
    -->

<!--

## Christieの言語概念
- CGはスレッド, クラスに相当し, javaの継承を用いて記述する.
- DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる.
- CGMはノードであり, DG, CG, DGMを管理する.
- DGMはDGを管理するものであり, putという操作により, 変数データ(DG)を格納できる.
  - DGMにはLocalDGMとRemoteDGMが存在する。LocalDGMは各ノード固有のデータベースである。RemoteDSMは他ノードのLocalDGMに対応するproxyであり、接続しているノードの数だけ存在する。
  - DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMに対しDGを格納し, Remoteの場合は接続したRemoteさきのCGMのDGMにDGを格納する.

-->

## DGM
- DGMは分散システムの肝となる他のノード間とのデータのやり取りの際に重要となる。
- DGMにはLocalDGMとRemoteDGMが存在する。
  - LocalDGM
    - LocalなDGMのプールのkeyにデータの書き込みを行う。
  - RemoteDGM
    - Localに存在する、他のノードのLocalDGMに対応するプールのkeyにデータを書き込みする。接続しているノードの数だけ存在する。
- DGMのput操作を行う際にはLocalとRemoteのどちらかを選ぶ.Localであれば、LocalのCGMが管理するDGMへ、 Remoteの場合は接続したRemote先のCGMのDGMにDGを格納する.

<div style="text-align: center;">
  <img src="../paper/images/remote_datasegment.svg" alt="MetaGear" width="800">
</div>

<!--
- RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
-->

## Annottation
- ChristieではInputDGの指定にはアノテーションを使う。
- アノテーションとはクラスやメソッド、パッケージに対して、付加情報を記述できるJavaのMeta Computationである。
- 先頭に@をつけることで記述する。オリジナルのアノテーションを定義することもでき、Input
される型の変数を直接宣言し、変数名としてkeyを記述する。その上にアノテーションでTakeもしくはPeekを指定する。

```cc
package christie.example.HelloWorld;

import christie.annotation.Take;
import christie.codegear.CodeGear;
import christie.codegear.CodeGearManager;

public class HelloWorldCodeGear extends CodeGear {
    @Take
    String helloWorld;

    @Override
    protected void run(CodeGearManager cgm) {
        System.out.print(helloWorld + " ");
        cgm.setup(new HelloWorldCodeGear());
    }
}

```

## DGのアノテーション
- DGを取り出す際にはCG内で宣言した変数にアノテーションをつける。DGアノテーションには
Take、Peek、TakeFrom、PeekFrom、の4つがある。
  - Take
    - 先頭のDGを読み込み、そのDGを削除する。
  - Peek
    - 先頭のDGを読み込むが、DGが消去されない。そのため特に操作をしない場合、同じデータを参照し続ける。
  - TakeFrom
    - Remote DGM nameを指定することで、その接続先のDGM からTake操作をおこえる。
  - PeekFrom
    - Remote DGM nameを指定することで、その接続先のDGM からPeek操作をおこえる。


## TopologyManager
- TopologyManagerとはTopologyを形成のために、参加を表明したノード、TopologyNodeに名前を与え、必要があればノード同士の配線を行うノードである。
- TopologyManagerのTopology形成方法として、静的Topologyと動的Topologyがある。
  - 動的Topologyは参加を表明したノードに対し、動的にノード同士の関係を作る。例えばTreeを構成する場合、参加したノードから順にrootに近い役割を与え、またCodeGearはノードが参加し、parentに接続された後に実行される。
  - 静的Toopologyはdotファイルを与えることノード関係の構築を行う。

```Code
digraph test {
	node0 -> node1 [label="right"]
	node1 -> node2 [label="right"]
	node2 -> node0 [label="right"]
}
```

<div style="text-align: center;">
 <img src="../paper/images/ring.svg" alt="MetaGear" width="500">
</div>






## まとめとこれから