title: 分散フレームワークAliceの圧縮機能 author: 照屋のぞみ profile:琉球大学 工学部 情報工学科 4年 # 研究目的 * 並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。 * Aliceのメタ計算として通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。 # Aliceの概要(1) - Data Segment と Code Segment * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割してプログラミングを行う。 * AliceはJavaで実装されており、CS をユーザーが記述する際には CodeSegment.class を継承することで CS で使用する API を利用する事ができる。 * DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。 # Aliceの概要(2) - Data Segment と Code Segment * CSはInput DS(入力されるDS)とOutput DS(出力されるDS)と呼ぶ。 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 ![opt](./images/dsandcs.svg) # Aliceの概要(3) - CodeSegmentの依存関係 * データの依存関係にないCSは並列実行される * データの依存関係がある場合は Input DS が揃うと順に実行される ![opt](./images/dsandcs2.svg) # Aliceの概要(4) - Data Segment * 整数や文字列などの基本的なデータの集まり * Aliceの場合はJavaオブジェクトに対応 # Aliceの概要(5) - Data Segment Manager * DS の集合体であるデータベースを Alice では DS Manager(DSM) と呼ぶ。 * DSM 内の DS には対になる String型のkey が存在し、 key を指定しすることで DS の保存、取得を行う。 ![opt](./pictures/dsm.svg) # Aliceの概要(6) - Data Segment Manager * Local DSM … 各ノード固有のデータベース。 * Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。 ![opt](./images/remote_datasegment.svg){:width="450px"} # Aliceの概要(7) - Data Segment API DSM に対して DSM の名前と DS を指し示すkey を指定することで操作を行う * DS の追加 put(String managerKey, String key, Object val) * DS の取得 take(String managerKey, String key) # Aliceの概要(8) - Data Segment の表現 DSは複数の表現(多態性)を同時に持つ 1. 一般的な Java のクラスオブジェクト 2. MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。 3. 2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 # MessagePackとは シリアライズのための機能をまとめたライブラリであり、プログラミング言語に依存しないデータの表現形式として使用できる。 # Aliceの概要(9) - Code Segment * setKey()にtakeコマンドをセットすることで Input DS を指定する * 実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする # Computation と Meta Computation * Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして考える * これにより通常処理と例外処理を分離できるためシンプルなプログラムが記述可能 # Alice の Computation * keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する * VNCの場合、VNCサーバからデータを受け取って表示する処理 # Alice の Meta Computation * 通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。 * VNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。 * Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる # AliceのMeta Computation(1/2) * Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。 * 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。 # TreeVNC * AliceのMeta Computationを用いて実装する実用的な分散プログラムの例題 * 本研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム * TightVNCがもとになっており、この部分がComputationと言える ![opt](./images/treeVNC.svg) # TreeVNCで用いるAliceのMeta Computation * TreeTopologyの構成 * ノード間通信の切断時・再接続時の処理 * データの圧縮 * 子ノードへのデータの複製 # TreeVNCでの圧縮 Meta Computation # データの転送 - DSMとAPIの追加 * Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。 * 指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる put(String **"compressed"** + managerKey, String key, Object val) take(String **"compressed"** + managerKey, String key) # データの転送 - データ表現の自動生成 * DS が圧縮表現を持っていれはそれをそのまま子ノードにputする * 持っていなければその時点でCompressed DSM内部で圧縮表現を生成してputする * DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを伸長をした後、転送のために再圧縮することはない。 # データの受け取り - 任意の形式での取得 * 圧縮表現で画面データ受け取り、Compressed DSM 内に格納。 * TightVNCが画面表示のためにデータを必要としたときに、 asClass() を用いて任意の形式でデータを取り出す。 * asClass() は DS のcastメソッドであり、伸長と MessagePack での変換を行う。 # データの受け取り - Aliceの通信パケットの変更 * 通信ヘッダにデータの状態を表すフラグを追加したことで、受け取ったデータを適切な形式でDSM内に格納できる。 * 圧縮前と圧縮後のデータサイズを入れたことにより、受け取ったデータの適切な伸長が可能。
serialized データ本体のシリアライズ状態を示す
compressed データ本体の圧縮状態を示す
objectDataSize 圧縮前のオブジェクトのデータサイズを表す
dataSize 送信するDSのデータサイズを表す
# Aliceと他言語等との比較 # まとめ * Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表現を変える機能を実装した。 * これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。 * 同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。 * 今後の課題としては、圧縮機能を TreeVNC で用 いることで有効性を測る必要がある。