misc.tech.notes

主に技術的な雑記的な

各社のサービスから見えるServerlessの本質とは何か

前置き

ポエム系です。以下は私の見解ですが、異論は大いに認めます。

あと、エイプリルフールは全く関係ありません。ごめんなさい。

まず、本日2016.04.01、MicrosoftAzure Functionsというサービスを発表しました。

jp.techcrunch.com

azure.microsoft.com

これで、AWS LambdaGCPCloud FunctionsAzure Functionsという、三大(?)クラウドの所謂Serverlessと呼ばれるジャンルのサービスが出揃ったわけです。

AWS Lambda (サーバーレスでコードを実行・自動管理) | AWS

Google Cloud Functions Documentation  |  Cloud Functions  |  Google Cloud Platform

ドキュメントを読んで分かったAzure Functionsの実体

とりあえず、気になるサービスが出てきたらドキュメントを読んでみるようにしているのですが、そこでAzure Functionsがどんなものなのかなんとなく窺い知ることができました。

azure.microsoft.com

ランタイムとしてはC#, Node.js, Python, F#, PHP, batch, bash, Java等をサポートするようです。

「おお、多いなスゲー」とか思ったんですが、読み進めてみるとAzureのPaaS系サービスであるApp Serviceの一機能であるWebJobsと関連しているような記述が出てきます。

バックグラウンドジョブを行うWebJobsにスケジュール実行だけではないStorageQueueからのイベント実行を追加したようなものが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 + LambdaAPIシステム作るのがCoolだ」みたいな話ですね。

こんなことを言うとたぶん誰かに怒られる気がするのですが、

いや、普通にPaaS使った方が良いんじゃない?

っていう。全部がそうだとは言いませんが、けっこうそういうケースが多いんじゃないかなと。

扱いやすさを求めるならHerokuRailsとか、性能を求めるならApp EngineGolangとかで良いと思うんですよね。
最近なら、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がやっぱり一日の長があるといった印象です。

つまり何がいいたいかっていうと

あと、もう一つ

こちらからは以上です

*1:広義のPaaSはIaaSの上に乗るマネージドサービス全般、狭義のPaaSはHeroku,App Engine等のアプリケーション実行環境を指すと思ってます