各社のサービスから見える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等のアプリケーション実行環境を指すと思ってます