各社のサービスから見えるServerlessの本質とは何か
前置き
ポエム系です。以下は私の見解ですが、異論は大いに認めます。
あと、エイプリルフールは全く関係ありません。ごめんなさい。
まず、本日2016.04.01、MicrosoftがAzure Functions
というサービスを発表しました。
これで、AWS Lambda
・GCPのCloud Functions
・Azure Functions
という、三大(?)クラウドの所謂Serverless
と呼ばれるジャンルのサービスが出揃ったわけです。
AWS Lambda (サーバーレスでコードを実行・自動管理) | AWS
Google Cloud Functions Documentation | Cloud Functions | Google Cloud Platform
ドキュメントを読んで分かったAzure Functionsの実体
とりあえず、気になるサービスが出てきたらドキュメントを読んでみるようにしているのですが、そこでAzure Functions
がどんなものなのかなんとなく窺い知ることができました。
ランタイムとしてはC#
, Node.js
, Python
, F#
, PHP
, batch
, bash
, Java
等をサポートするようです。
「おお、多いなスゲー」とか思ったんですが、読み進めてみるとAzureのPaaS系サービスであるApp Service
の一機能であるWebJobs
と関連しているような記述が出てきます。
バックグラウンドジョブを行うWebJobs
にスケジュール実行だけではないStorage
やQueue
からのイベント実行を追加したようなものがAzure Functions
の今のところの実体のようです。
ちなみにCloud Functions
は今のところ基盤としてContainer Engine
を使用しており、コンテナクラスタからオンデマンドで実行環境(コンテナ)を割り当てていくような実装のようです。今はGKEインスタンスがユーザから見えちゃってるんですが、これは無くなってユーザは意識せずに使えるようになる予定のこと。
Lambda
は中身が全然見えないのですが、上記のCloud Functions
完成形って感じの雰囲気ですよね。
さて、ここで考えてみたいのは以下です。
PaaSとServerlessって何が違うの?
よく言われる、ユーザが管理しなくて良いマネージドサービスを使って運用フリーなシステムを作るっていうのがありますが、
それって(狭義の)PaaSでも一緒じゃね?*1
っていう話なんですね。
ここで注目したいのが、Azureが今までPaaSとして提供してきたものにEvent Drivenな要素を足してServerlessなサービスと銘打って出してきたということです。
つまり、"PaaS(狭義) + Event Driven = Serverless"であるという一つの定義が見いだせるわけです。
あとは、課金体系ですね。PaaSは基本的にアイドル状態でも課金が発生しますが、Serverless系のサービスは真に動いている分しか課金が発生しません。
Serverlessの本質とは
これは私の見解なので異論は大いに認めます(2回目)
まず、最近話題のServerless
(Architecture)と呼ばれているものについて、ずっと違和感を感じていました。
「API Gateway
+ Lambda
でAPIシステム作るのがCoolだ」みたいな話ですね。
こんなことを言うとたぶん誰かに怒られる気がするのですが、
いや、普通にPaaS使った方が良いんじゃない?
っていう。全部がそうだとは言いませんが、けっこうそういうケースが多いんじゃないかなと。
扱いやすさを求めるならHeroku
でRails
とか、性能を求めるならApp Engine
でGolang
とかで良いと思うんですよね。
最近なら、AWSにこだわりたいならAWS上でのライフサイクルを自動化してPaaSのように使わせてくれるMobingi
という手もあります。
https://mobingi.co.jp/mobingi.co.jp
ただ単に「インフラ運用したくない!!1」ってだけなら、そっちの方が管理も楽だし制約も少ないので良いと思うんです。
(管理が大変だからこういうツールを作りたくなるわけで)
じゃあ、何が本質でどんな場面でServerless
系のサービスが良いのかっていうと、そこで出てくるのがやっぱりEvent Driven
じゃないかと。
その中でAPI Gateway
がどんな存在になるかというと、Lambda
に対してWeb hook
だったりとか、ユーザの行動イベントをHTTPリクエストとして別システムから伝えるためのインターフェースだと思うわけです。
AWSはその辺り別サービスにして徹底的に疎結合になってるのがさすがって感じですね。だからこそ色んな使い方ができているというのはあると思います。(他はHTTPが単にトリガーの一つの扱いのはず)
クラウドのサービスとサービスの間をイベント連携する、あるいは他システムやユーザの行動を絡めたりもして、システムをイベント駆動で作り上げていく、それがServerlessの本質というか最大のメリットなのではないかと。
そういう風に考えると、多様なイベントに対応し、これからもどんどん増やしていくであろうAWS Lambda
がやっぱり一日の長があるといった印象です。
つまり何がいいたいかっていうと
っていうか、Lambdaのマイクロサービスとかサーバレスの話はもういいから、イベントドリブンコンピューティングの話しようぜ
— Masashi Terui (@marcy_terui) March 23, 2016
あと、もう一つ
App Engineを昔のCPU時間課金に戻して、Event Driven要素足せばそれだけで最強のServerless実行環境になるので、Google先生におかれましては是非ご検討のほどよろしくお願いします
— Masashi Terui (@marcy_terui) April 1, 2016
*1:広義のPaaSはIaaSの上に乗るマネージドサービス全般、狭義のPaaSはHeroku,App Engine等のアプリケーション実行環境を指すと思ってます