普段 IBM Bluemix の紹介ばかりしている。ので、少し毛色の違うエントリにしてみます。IaaS と PaaS の共生というか、共存環境についてです。


IBM Bluemix をはじめとする PaaS(Platform as a Service) の特徴の1つはアジャイル性だと思っています。オンプレミス環境や IaaS(Infrastructure as a Service) の環境と比べて、目的のサーバー環境を短時間&少手間で用意できる、という点です。

もう少し詳しく説明すると、例えばこのような構成が必要なアプリケーションの実行環境を作るケースを考えてみるとわかりやすいかもしれません。


(概念図ですが)Java アプリケーションサーバーとデータベースを使って動くアプリケーションがあるとします。この図ではそれぞれが1台ずつで構成されているのですが、小規模利用であればこのままの構成で使うこともあるでしょう(A):
2015081101


この環境を IaaS で作るべきか、PaaS で作るべきか、を判断するケースは珍しくないでしょう。後述する自由度の問題もありますが、このプラットフォームの環境構築に絞って考えると、具体的には手順というか、手間は全く異なります。IaaS だと最初に用意されるのは最小限のネットワーク構成がなされた最小構成の Linux や Windows といった "OS" です。ここにログインしてネットワーク構成を変えたり、場合によってはファイアウォールの変更もした上で Java のアプリケーションサーバーを導入し、セットアップします。ここまでの手順を経てようやく Java アプリケーションサーバーとして利用可能になります。 一方 PaaS であれば、はじめからプラットフォームとして「Java アプリケーションサーバー」を選べばいいので、サーバーの稼働と同時に Java アプリケーションサーバーが使えるようになります。極端な言い方になりますが、「楽に作るなら PaaS」で「自分なりの設定をしたいなら IaaS」という感じになりますかね。どちらかいいのか、の答はケースバイケースだと思います:
2015081103


また、同じアプリケーションを大規模に利用しようとすると少し構成が変わります。ユーザーからの大量アクセスに備えてアプリケーション部分を複数台構成にする必要が出てきます。ということはそれらの振り分けを行うロードバランサも必要になります(B):
2015081102



これら (A) と (B) は同じアプリケーションを異なるお客様が利用するケースといえます。IaaS で (B) の環境を作ろうとした場合に、(A) で行った環境構築の作業をサーバー数の分だけ繰り返して行う、という必要はありません(1つ作った環境をコピーすればよい)が、ロードバランシングの設定は必要です。

一方、PaaS の場合は初めからアプリケーションサーバー目的でインスタンスを作ることを想定しているということもあり、IBM Bluemix を含む多くのケースでロードバランサが内蔵または標準装備されています。要はそもそも1台で動かすのか複数台で動かすのかの違いを意識する必要がないような提供形態になっています。


このように、アプリケーションプラットフォームの構築において、PaaS は単に「手間がかからない」というだけでなく、構成自体がアプリケーションサーバー用に最適化されていることで、同じアプリケーションでも色々なパターンでの提供にアジャイルに対応できる、という特徴があると考えています。


でも PaaS にも弱点があります。それが「自由度」です。PaaS はアプリケーションプラットフォームを提供する形態であるため、「アプリケーションサーバーのインスタンスを作る」ことに最適化されています。ただアプリケーションプラットフォーム全体の中にはアプリケーションサーバー以外の用途で使いたいインスタンスが存在しているケースもあります。

例えば「クローラー」と呼ばれるエージェント機能がその典型です。インターネットやイントラネット上の情報をかき集め、構造化してデータベースに記録して、ウェブのアプリケーションから利用できるような情報を収集する機能です。ユーザーからのリクエストに応じて動く機能ではなく、基本的には24時間365日、バックグラウンドでずっと動き続ける機能といえます。

このクローラー機能に関しては IaaS であれば何通りかの方法で実現できます。典型的なものが cron と呼ばれるスケジュールタスク機能を使って、定期的に指定のアプリケーションを実行させて、この中でクローラーを動かすことで実現できます。常に動かす必要がないクローラーに関しても、サーバーに直接ログインしてコマンドを実行すれば動かすことができるので、自由度高くクローラーを実現することができます。

一方でこのクローラー機能に関しては PaaS は不利です。もともとがウェブアプリケーションプラットフォームを便利に提供するためのサービスであり、ウェブアプリケーションサーバー以外の機能については本体だけでは提供されていないことも多くあって、なんらかの外部サービス等で補足する必要があったりします。

ちなみに IBM Bluemix の場合であれば、スケジュールされたタスクを動かす "Workload Scheduler" サービスを使うことで cron ライクな機能をランタイム内に実現することができるようになっています。なので Bluemix 環境に限ってはこのサービスを使う方法もありますが、必ずしも全ての PaaS 環境で実現されているわけではありません。また Bluemix 環境でもこのサービスの仕様にある程度は依存してしまうので、自由度の面ではやはり不利といえなくもありません。この「クローラー」機能を実装するようなケースは、PaaS のアジャイル性が不利になってしまうケースと言えます。


ただ、これらを調べていくことでクラウドプラットフォームの中での IaaS/PaaS の使い分けや共存に関するヒントが見えてくるように感じます。要は「適材適所に得意分野を任せる」という考え方です。上記のようなアジャイル性が求められる部分が PaaS で、クローリングやスケジュールタスクに関する部分は IaaS で、というのはその一例と言えます。他にも基本機能は PaaS の実装が理想であるが、一部にネットワークパフォーマンスが求められる特定処理があるケースであれば、その部分がボトルネックにならないよう、その処理はネットワークパフォーマンスの高いプラットフォーム(例えば IBM SoftLayer)を使う、という選択肢も考慮に入れるべきです。

クラウドが普通になってくると、IaaS と PaaS の共存も普通になっていくのでしょうかね。そういった際の考慮ポイントを理解するためにも、IaaS / PaaS それぞれの得意/不得意分野を正しく理解しておくことが大事になるのだと思います。


・・・で、長い前置きに続いて、ここからは宣伝です(笑)。

実はこのような内容のセミナーを9月2日(水)の SoftLayer Bluemix サミット2015 内の一講演としてさせていただくつもりです:
http://softlayer.connpass.com/event/17037/

※↑TrackE の 16:30 - 17:00 の回です


講演では IaaS と PaaS の両方を使って構築するようなアプリケーションの実例を紹介し、具体的にどのような構成が理想的なのか、というポイントをアプリケーションの特性に合わせながら考えていくような内容にする予定です。 Bluemix に限った内容ではなく、PaaS/IaaS 全般に対する内容にするつもりです。

興味とお時間があれば、是非9月2日にベルサール渋谷へお越しください。お待ちしております。

以上、宣伝でした(笑)。