AkkaはScalaおよびJava向けのオープンソースの並列分散処理フレームワークであり、HazelcastはHazelcast社が開発したJava向けのオープンソースインメモリデータグリッドである。Akkaではアクターモデルという、アクターと呼ばれるオブジェクト同士が並列で非同期メッセージを送受信するモデルを採用している。アクターは固有のアドレス持っており、ローカルのアクターにもリモートのアクターにも同じようにアドレスを指定することでメッセージを送りあえるというプロトコルになっている。アクターはそれぞれメールボックスというキューを持っており、メールボックスに受け取ったメッセージをパターンマッチで順次処理していく。classを用いられる。classとは、データ構造とデータを同時に持つことができ、その両方を一括してパターンマッチさせることができるクラスである。classで記述することにより、スムーズなメッセージの処理を可能にしている。classとは、データ構造とデータ型名を同時に持つことができ、その両方を一括してパターンマッチさせることができるクラスである。classで記述することにより、異なるメッセージをメールボックス上で使用することがきる。Hazelcastは、キーと値の1対1でデータを管理するインメモリ・データグリッドである。インメモリ・データグリッドとは、複数のノードに分散させたデータを、アプリケーション側からは仮想的な1つのメモリ空間に置かれているように見せるモデルである。記述の面において、Akkaではメッセージが集中した場合にそれを処理するパターンマッチが増えてしまう問題や、複数のインプットを待ち合わせる際に記述が煩雑になる問題があった。-しかしAliceはインプットを明確に記述でき、複数のインプットを持てるため、そのような煩雑さがない。+しかしAliceはインプットを明確に記述でき、複数のインプットを持てる。プロトコルの設計方針において、AkkaやHazelcastは分散通信の複雜さを抽象度を高めることで隠す方針であるため、ロケーション透過性が高く、プログラマからは処理の流れを把握しにくくなっていた。-一方でAliceはそのような抽象度は持たせず、処理の流れを明確に見通せたほうが、処理途中で細かな計算が必要になった場合にチューニングがしやすいと考えている。-そのため、ラベルを用いてリモートノードを意識的に選択する。-Aliceでは明示的に分散性を意識する代わりに、Aliceは計算を通常計算とそれを支えるメタ計算として分離することで記述の複雑さを回避している。-また、Akkaでは送り先をドメインで指定するためどのような処理をするアクターにメッセージを渡しているのか分かりづらかったが、Aliceでは他のノードにラベルでアクセスできるため処理の見通しを良いと言える。+一方でAliceは分散計算のチューニングをメタ計算として行う。これによりメタ計算から分離された処理の流れを明確にすることができる。分散ノード間の通信はラベルを用いてリモートノードを選択することによって指定する。+Akkaでは送り先をドメインで指定しているのと同様である。managerによって自動的に指定される。-このように、Aliceのプロトコルの特徴は分散処理の見通しの良さといえる。-しかし、現状のAliceのAPIシンタックスは直感的でなく、プログラマが処理の順番やデータの型を考慮して書く必要があった。-これではバグを引き起こす可能性が高いため、信頼性を上げるにはよりユーザーフレンドリーなシンタックスで再設計すべきだと考えた。このように、Aliceのプロトコルの特徴は分散処理の見通しの良さといえる。継承により記述されている+%しかし、現状のAliceのAPIシンタックスは直感的でなく、プログラマが処理の順番やデータの型を考慮して書く必要があった。+%これではバグを引き起こす可能性が高いため、信頼性を上げるにはよりユーザーフレンドリーなシンタックスで再設計すべきだと考えた。NAT越えについてを比較する。\subsection*{障害耐性}-分散プログラムでは、1つのノードがダウンしてもシステム全体は動き続けなければならないため、フォールト・トレラントであることが重要である。+分散プログラムでは、1つのノードがダウンしてもシステム全体は動き続けなければならないため、フォールト・トレラントであることが重要である。Akkaでは親子関係を構成でき、親アクターは子アクターを監視し障害が起こった際に再起動や終了といった処理を指定できる。-また、Hazelcastは、1つのサーバで障害が起きても他のサーバがデータを共有しているため、データを失うことなく素早く復旧ができる。+また、Hazelcastは、1つのサーバで障害が起きても他のサーバがデータを共有しているため、データを失うことなく素早く復旧ができる。Aliceでは、TopologyManager内にKeepAliveという機能があり、常にノードが生きているかHeartbeatを送信して監視しており、どこかのノードに障害が起こればトポロジーを再構成するといった対応ができる。\subsection*{圧縮・転送通信}-ノード間通信でより速い通信をするためには、送信するデータを圧縮する機能や、受け取ったデータをそのままほかノードへ転送する機能が求められる。+ノード間通信でサービスに沿った柔軟な通信をするためには、送信するデータを圧縮する機能や、受け取ったデータをそのままほかノードへ転送する機能が求められることがある。-データの圧縮を指定したい場合、Akka・Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことでzip/unzipを行う。+データの圧縮を指定したい場合、Akka、Hazelcastはシリアライザが用意されているため、そのメソッドを呼び出すことで圧縮伸長を行う。転送を指定したい場合、Akkaにはforwardメソッドがあるためそれを呼び出すことで受け取ったデータの転送が可能だが、Hazelcastは一つのMapへのアクセスに見立てているため、転送にもputを用いる。一方でAliceは圧縮の展開と転送を同時に行うことを想定した圧縮・転送機能を持っている。Segment(以下DS)の依存関係を記述することでプログラミングを行う。Segment(以下DS)の依存関係を記述することでプログラミングを行う。CSは実行に必要なDSが全て揃うと実行される。