Play、Akka、Akka Streams、Lagom、Apache Spark――Lightbend Reactive Platformとは何か:リアクティブプログラミング超入門(2)(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では開発者向け機能と、サブスクリプションを購入することで使えるProduction機能があります。
開発者向け機能の方は、「Play framework」「Akka」などのコア部分を構成するアプリケーションフレームワークやランタイムライブラリで構成されており、全てオープンソースとして公開されています。
一方Production機能の方は、アプリの管理やモニタリング機能、さらに分析機能や統合のためのツールなどを提供します。
開発者向け機能
では、Lightbend Reactive Platformを構成する各製品について簡単に説明していきましょう。
Play――ステートレスで軽量なアプリケーションフレームワーク
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とは何か――使い方や基礎知識を徹底解説」をご参照ください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Java EE 8/9はマイクロサービス、リアクティブに向かう――MVCは生き残れるのか
デジタルトランスフォーメーション時代に生き残れるエンジニアに求められるものとは何か。長らく、日本のJavaコミュニティで存在感を示し続け、現在は日本マイクロソフトでJavaエバンジェリストとして活動する寺田佳央氏に聞いた。 - EJB、SOA、マイクロサービスへと至る大規模システム向けアーキテクチャの変遷
2000年前後からのアプリケーションアーキテクチャやEJB、SOAに触れながら、今後、大規模システム構築で主流になるであろう「マイクロサービス」アーキテクチャの意義と価値を考える。