BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Future、性能、依存性の低減など多くの改善がされたAkka 1.1リリース

Future、性能、依存性の低減など多くの改善がされたAkka 1.1リリース

ブックマーク

原文(投稿日:2011/05/12)へのリンク

今日、Akka 1.0にいくつかの改善が加わったAkka 1.1がリリースされた。また、Scala 2.9(Akka 1.1 requires Scala 2.9)も今日リリースされた。両方とも現在はMartin Odersky氏とJonas Bonér氏の新しい会社Typesafeが管理している。同社はAkkaとScalaのトレーニングを提供すると同時にこの2つの技術を使った商用製品を提供している。integrated stackは同社の製品だ。

Akka 1.1 (akka-actor)はScala 2.9に依存しない。他の変更に加えて、Futureたくさんの作業がに対してたくさんの改善がなされた。発表によると、

- 限定継続を使ったFuture向けのデータフローAPI。これを使えば、実際はブロックしないが、見かけ上はブロックするように見えるコードが書ける。
- Futureは完全にモナドになった。したがってfor内包表記を利用できる。
- Futureはノンブロッキングメソッドを持つようになったので、ブロックなしでFutureの合成ができる。
- FutureはすべてのDispatcherからネイティブで実行できる。

関数型言語のプログラマはFutureがモナドになりmapflatMapメソッドを備え、for内包表記が使えるようになったと聞けば喜ぶだろう。ドキュメントによれば、

val f = for {
  a <- Future(10 / 2) // 10 / 2 = 5
  b <- Future(a + 1)  //  5 + 1 = 6
  c <- Future(a - 1)  //  5 - 1 = 4
} yield b * c         //  6 * 4 = 24

val result = f.get()

Scalaのfor内包表記はモナドなコードに対してHaskellのdoのように使える。例えば、処理を直列に並べるための簡単な方法として利用できる(モナドの簡単な紹介は"Monads Made Easy")。

InfoQはGotoCon Copenhagen 2011にてJonas  Bonér氏にAkka 1.1と将来の展望について話を聞いた。

InfoQ: Akka 1.1にはScala 2.9が必要ですが、なぜこうしたのですか。Scala 2.9の新しい機能を使っているのですか(どんな機能ですか)。Scala 2.8から2.9への移行でなにか問題にぶつかりましたか。

Scala 2.9.0は多くの点において2.8.xよりも優れています。私たちはバグフィックスや性能改善、新機能の恩恵を受けています。移行も大きな問題はありませんでした。スムーズに行えました。

InfoQ: Agentのawait/futureメソッドはどうですか。 awaitメソッドが返ったら現在のアクターを停止して再スケジュールしますか。

Agent.futureはアクターの現在の値を問い合わせるためにメッセージを送信します。これは!!!メソッドで行われます。このメソッドはFutureを伴ってすぐに返ります。
Agent.awaitはAgent.future.await.result.getの別名です。なのでブロッキングコールになります。Agent.futureは新しいノンブロッキングのFuture合成を利用できます。

InfoQ: Akka 1.1のデフォルトディスパッチャは1.0に比べてどの程度改善していますか。HawtDispatchは使いやすくなったり、高速になっていますか。

これは簡単には説明できません。繰り返し小さな改善を重ねてきたからです。HawtDispatchは決して早くなっていません。AkkaのHawtDispacherはAkkaのコアから取り除かれ、利用は非推奨になりました。低レベルのネットワークIOを実行するときだけは便利だと思います。下記は最新のベンチマークの結果です。

このベンチマークの結果の詳細はAkkaユーザリストでの議論を参照ください。

InfoQ
: Akka 2.0で計画されている大きな機能/変更はありますか。

ええ、商用のAkkaのクラスタサポートをオープンソース版に移植するべく鋭意開発中です。秋にリリースする予定のAkka 2.0に盛り込みたいと思っています。クラスタリング(リモーティングでも分散配置でも好きな呼び方でかまいませんが)は完全に構成作業に抽象化されます。つまり、ローカルのアクターだけを使ってクラスタリングするよう(外部から)構成したり、複製したりするだけでAkkaのアプリケーションが利用できるようになるのです。

また、下記は他の特徴です。

Akka 2.0では、
  • 透過的で柔軟なロードバランシング/ルーティング
  • 透過的で柔軟なクラスタリバランシング
  • 自動リプリケーションとノードクラッシュ時の自動フェールオーバ
  • 永続的なアクーターメールボックス
  • サブスクリプションベースのクラスタメンバシップサービス(ノードの無停止での追加/削除)
  • 高可用でスケーラブルなトランザクションログに基づくイベントソーシング
  • 高可用な構成の一括管理サービス
Akka 2.0移行は、
  • 計算グリッド/マップリデュース
  • データグリッド
  • 分散STM
Cloudy Akka(例えば、商用のアドオン製品)が監視や管理、プロビジョニング、ダッシュボードやEC2サポートのような運用を一手に引き受けるようになるでしょう。

 

この記事に星をつける

おすすめ度
スタイル

BT