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 ``` ## 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を格納する.