連載
» 2017年08月28日 05時00分 公開

リアクティブプログラミング超入門(2):Play、Akka、Akka Streams、Lagom、Apache Spark――Lightbend Reactive Platformとは何か (1/2)

本連載では、リアクティブプログラミング(RP)の概要や、それに関連する技術、RPでアプリを作成するための手法について解説します。今回は、Lightbend Reactive Platformがどういったものなのか詳細に見ていきましょう。Playのセットアップも行います。

[中村修太,クラスメソッド株式会社]

 リアクティブプログラミング(以下、RP)の概要や、それに関連する技術、RPでアプリを作成するための手法について解説する本連載「リアクティブプログラミング超入門」。前回記事「Chatwork、LINE、Netflixが進めるリアクティブシステムとは? メリットは? 実現するためのライブラリは? 」では、RPの概要やライブラリ/プラットフォームを幾つか紹介しました。

 本連載では今後、そのライブラリ/プラットフォームの中でも、Lightbend社のリアクティブ開発プラットフォームである「Lightbend Reactive Platform」を使用して、実際にリアクティブなアプリケーションを作成していきます。まず今回は、Lightbend Reactive Platformがどういったものなのか詳細に見ていきましょう。

Lightbend Reactive Platformとは

 前回も紹介しましたが、Lightbend Reactive Platformとは、Lightbend社(※旧Typesafe社)が開発したリアクティブなアプリケーションを構築するための開発プラットフォームです。

Lightbend Reactive Platformの概要(公式サイトから引用)

 図にあるように、Lightbend Reactive Platformでは開発者向け機能と、サブスクリプションを購入することで使えるProduction機能があります。

 開発者向け機能の方は、「Play framework」「Akka」などのコア部分を構成するアプリケーションフレームワークやランタイムライブラリで構成されており、全てオープンソースとして公開されています。

 一方Production機能の方は、アプリの管理やモニタリング機能、さらに分析機能や統合のためのツールなどを提供します。

開発者向け機能

 では、Lightbend Reactive Platformを構成する各製品について簡単に説明していきましょう。

Play――ステートレスで軽量なアプリケーションフレームワーク

Play framework

 Play framework(以下、Play)は、ステートレスで軽量なアプリケーションフレームワークです。JavaかScalaを用いてコーディングします。

 PlayはAkkaや「Akka Streams」をベースに構築されており、ステートレス、非同期、非ブロッキングで動作します。そして、高い応答性や弾力性など、リアクティブシステムが持つメリットを備えています。

 2017年7月現在、2.6.2が最新のバージョンとなっています。Playについて詳細を確認したい方は下記をご覧ください。

Akka――アクターモデルのメッセージ駆動型ランタイムライブラリとAkka Streams

 Akkaはアクターモデルのメッセージ駆動型ランタイムライブラリで、伸縮性や拡張性、耐障害性を持っています。Playでも標準で採用されており、導入のための手間がかかりません。

  • アクターモデル

 アクターと呼ばれるオブジェクトがメッセージを送受信して処理をします。それぞれのアクターはメッセージ受信用のメールボックスをもっており、受信したメッセージに対応した処理を行えます。

 また、Akka Streamsは「Reactive Streams」(ノンブロッキング&Back Pressureで非同期ストリーム処理の仕様)のAkka実装です。

  • Back Pressure

 Publisher/Subscriberモデルを考えた場合、Subscriber側のバッファー溢れやそれを過剰に考慮したPublisherの処理をなくすために、Subscriberが許容できる処理量をPublisherに対してリクエストを送ることで効率よく処理する仕組みです。

 リアクティブなアプリを開発していく際に、Akka/Akka Streamsは非常に重要な位置付けのプロダクトです。Akka/AkkaStreamsについては今後の連載で解説していく予定です。

Lagom――AkkaとPlayで構築されたマイクロサービスアーキテクチャ向けフレームワーク

 「Lagom」は、AkkaとPlayで構築されたマイクロサービスアーキテクチャ向けフレームワークです。マイクロサービスの開発やデプロイを簡単にできるよう設計されており、Scala/Java向けのAPIが提供されています。なお、Lagomはスウェーデン語で「ちょうどいい大きさ」という意味です。

 マイクロサービスアーキテクチャとは、小さなサービスを組み合わせてアプリケーションを構築していくアーキテクチャで、サービス同士はRESTなどで連携します。システムがシンプルになり変化に強くなるのが特徴です。

 Lagomの特徴には下記のようなものがあります。

  • 【Lagomの特徴1】疎結合なコンポーネント

 マイクロサービスの特徴にあるように、サービス同士を疎結合で連携させることで、変化に強く自律したシステムを構築できます。

  • 【Lagomの特徴2】内部APIは全て非同期で実装

 基本的にはメッセージとストリームでやりとりしますが、場合によってはRESTでの通信も可能です。

  • 【Lagomの特徴3】永続化API

 デフォルトではイベントベース(イベントソーシングとCQRS)ですが、「Java Persistence API」やNoSQL系のデータベースも使用可能です。

 CQRS(コマンドクエリ責務分離)とは、サーバの機能を「コマンド」(更新)と「クエリ」(参照)で分離するという考え方です。

 一般的な手法では状態変化の理由や経緯が分かりませんが、イベントソーシングでは状態が永続化されるのでなく、発生したイベントを永続化します。

  • 【Lagomの特徴4】外部APIはCircuit Breakerが有効

 Circuit Breakerとは、外部アクセスの成功と失敗をカウントし、エラーが閾値をオーバーしたときに自動でアクセスを遮断する仕組みです。

 Lagomを使用することで個々のサービスをマイクロサービスとして構築、デプロイし、サービス間のやりとりもシンプルに実現できるようになります。

Spark――大規模ストリーミングデータを処理するための分散処理フレームワーク

 「Apache Spark」(以下、Spark)は、大規模ストリーミングデータを処理するための分散処理フレームワークです。もともとはカリフォルニア大学バークレー校で開発され、後にApache Foundationに寄贈されました。大規模なデータをメモリ上で高速に処理できるように設計され、APIはScalaやJava、Pythonなどで提供しています。

 分散処理とは、任意の処理を複数のコンピュータを用いて並列に処理する手法です。非常に大きなデータを処理する場合に短い時間で処理することができます。スポット的にサーバを多数用意して処理を割り当てられるため、コストを抑えて高速に処理を行えます。

 同じ系統のフレームワークとしては、「Apache Hadoop」があります。主な違いとしては、Hadoopが毎回ストレージにアクセスするのに対し、Sparkではメモリ上で処理してストレージへのアクセスをなるべく少なくしています。このため、メモリに収まるデータを処理したい場合にはSparkが適任といえるでしょう。

 詳細は、記事「Apache Sparkとは何か――使い方や基礎知識を徹底解説」をご参照ください。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。