Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nota-ja/66ec5d391ba49e761468 to your computer and use it in GitHub Desktop.
Save nota-ja/66ec5d391ba49e761468 to your computer and use it in GitHub Desktop.
"What is PaaS?" に関する個人的な考え (Open PaaS Advent Calendar 2014-12-02)

このgistは Open PaaS Advent Calendar 2014 の2日目の記事です。2日目にしてさっそく投稿遅れて本当に申し訳ありません 😓

さて,この記事では「PaaSとは何か」について個人的な考えを書くのですが,

ので,あまり大きな期待はせず,気軽に読んでいただけたらと思います。

それでは,始めましょう。

PaaSとは何か(1):「IaaSとSaaSの間の何か」

いきなり何だそりゃ,という感じですが,PaaSの説明で一番多いのがこれです。例えばこちら
https://www.google.co.jp/search?q=paas&tbm=isch
を見ていただければ,それがわかるかと思います。

IaaSとSaaSについては,皆さんわりとイメージしやすいのではないかと思います。例えばIaaSは,「手元にあるPCが(仮想化されて)NWの向こう側で提供されるもの」でだいたい理解できると思いますし,同様にSaaSは,「手元のPCで動いていたアプリケーションがNWの向こう側で提供されてブラウザーから使えるようになるもの」でだいたい伝わるのではないかと思います。実際, 先程の画像検索の結果 も,多くの図ではそういう表現になっていると思います。

翻ってPaaSはというと,共通部分がある図も存在するものの,各々微妙に違っていて,なかなか「これ」というバシッとした定義は見つかりません。「OS + Middleware + 何か」をNWの向こう側で提供するのがPaaSとなっている図が多いのですが,最後の「+ 何か」が曲者で,各者各様です。

中には Gartner のように,PaaSをさらに細かく分類して,「aPaaS (Cloud Application platform services)」「almPaas (Cloud ALM services)」「bpmPaaS (Cloud BPM platform services)」「iPaaS (Cloud Integration services)」「baPaaS (Cloud Business Analytics services)」「dbPaaS (Cloud Database services)」「Portal PaaS (Cloud Horizontal Portal services)」, 等々を挙げているものもあります。ここまでくると,何がなんだかよくわかりません。

このようにPaaSの定義が曖昧であるせいかどうかはわかりませんが,昨年の今頃には,「PaaSはIaaS (またはSaaS)のおまけになる」「PaaSは始まる前から終わっている」という人たちも現れました。

ただ,その後 Docker が人気を博し,さらに Kubernetes のような新たな取り組みが現れてPaaS界隈が盛り上がりを見せたため,現在はこうした議論は影を潜めているように見えます。

他方,Dockerの登場により,「PaaSとは何か」に関する世の人々の解釈は,さらに混乱したようなきがしないでもありません。それについては,次項で述べたいと思います。

PaaSとは何か(2):「アプリケーション(のソースコード)を投げ込むと,起動して,動かし続けてくれるもの」

私の個人的なPaaSの定義はこれです。長過ぎますし,括弧が入っていたりして若干歯切れが悪いのが残念ですが,実は 今年3月の段階 では括弧なしで単に「ソースコードを投げ込むと,起動して,動かし続けてくれるもの」としていました。多少短いし,歯切れも今のものより良いと思います。ただ,今のPaaSの多くは,ソースコードだけでなく,バイナリを投げ込んでも動くので,正確を期してこういう表現になりました。

実は重要なポイントは,前半ではなく後半の「起動して,動かし続けてくれる」にあります。

まず最初の「起動して」。

IaaSの上でアプリケーションを起動しようとすると,依存するライブラリーやサービスのインストール,依存するサービスの設定と起動,それらを踏まえたアプリケーションの設定など,様々な作業が必要になります。

PaaSではこれらの作業を可能な限り自動化し,PaaSの利用者はほとんどアプリケーションのソースコード(もしくはバイナリ)を投げ込むだけで,PaaSがそのアプリケーションを起動してくれます。これが,PaaSが利用者にもたらすメリットその一です。

そしてメリットその二が,起動したアプリケーションを「動かし続けてくれる」ことです。

アプリケーションをNWの向こう側で動かす利点は,「いつでも,どこでも,誰とでも」そのアプリケーションを使えることにあります。特に最後の「誰とでも」を実現するためには,そのアプリケーションを自分だけの都合で止めたり起動したりできないので,アプリケーションを「動かし続ける」ことがとても重要になります。

現在提供されているほとんど全てのPaaSは,この「アプリケーションを動かし続ける」ための仕組みを持っています。具体的には,アプリケーションの起動状態を監視して,落ちたら起動し直すような仕組みです。そしてこの仕組みこそが,PaaSと素のDockerを区別するものであると,私は考えています。

「アプリケーションを起動してくれる」ことだけであれば,Dockerなどを用いた「immutable infrastructure」でも同様のことが実現できます。アプリケーション起動に限らず,同一環境の自動的な構築を実現することが,Dockerなどの基本的な達成価値だと思います。

しかし,PaaSがクラウド・サービスとして価値を持つためには,投げ込まれたアプリケーションを起動するだけでなく,動かし続けなければなりません。つまり,PaaSはソフトウェア開発者のデプロイを楽にするだけのものではなく,サービス運用者の運用を楽にするものでもある,というのが,私の考えです。DevelopmentとOperationを自動化して,楽にする。つまり,PaaSはdevopsを側面からサポートするサービスと考えることもできます。

さて。

これまでの話の流れからわかるように,PaaSは,サービスの開発者/運用者という比較的小さい利用者群を対象にしたサービスだと一般的には考えられています。IaaSは計算機資源を使う人/企業全て,またSaaSはアプリケーション・ソフトウェアを使う人/企業全てが対象と考えられるので,その2つと比べると,PaaSの利用者がサービス開発者/運用者に限定されているのは,市場規模が小さいと考えられても,そしてそれ故にIaaSやSaaSのオマケになると考えられても,仕方がないかもしれません。しかし,本当にPaaSの利用者はサービスの開発者/運用者だけなのでしょうか?

ここで改めて本節の定義の前半に注目します。「アプリケーション(のソースコード)を投げ込むと」の部分です。「 アプリケーション(のソースコード) 」を投げ込めばいいのであれば,それは何も自分が作ったアプリケーション(のソースコード)でなくてもいいはずです。今,世の中にはたくさんオープンソースのアプリケーションが転がっています。そうしたアプリケーションを持ってきて,自分のPaaS環境に投げ込めば,後はよしなに起動して動かし続けてくれる。自分のスマートフォンにいろいろなアプリを入れて使うように,自分のPaaS環境にさまざまなオープンソースのアプリケーションをデプロイして使う。そういう使い方がされうるのであれば,PaaSの対象利用者はもっと広がる可能性もありそうです。

PaaSとは何か(3):「APIで操作」

これはPaaSというよりはXaaS全般の特徴ですが,PaaSが「aaS」の一種であるためには,操作インターフェイスをAPIで提供しなければなりません。というわけで,ちょっと半端ですが,独立した一項を設けました。

まとめ

私の個人的な定義では,PaaSとは,

  • IaaSとSaaSの間の何かであり,
  • アプリケーション(のソースコード)を投げ込むと,起動して,動かし続けてくれるものであり,
  • APIで操作するものである

となります。

そろそろお後がよろしいようで。 明日(ではなくもう今日ですが)は jacopen さんの「Cloud Foundryで12 factor apsを実現する方法(その1)」です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment