Publickey新野淳一のIT羅針盤

新たなクラウドアプリケーションのトレンドとして注目される「サーバーレスコンピューティング」―― そのメリットとデメリットとは?

いまクラウドアプリケーションの新たなトレンドとして「サーバーレスコンピューティング」が注目されています。サーバーレスコンピューティングは従来のクラウドアプリケーションと何が違い、なぜ注目されているのでしょうか。その背景と理由を解説します。

「サーバーレスコンピューティング」もしくは「サーバーレスアーキテクチャー」(本稿では以下サーバーレスコンピューティングと表記)は、2014年にAmazon Web Services(AWS)が発表した新サービス「AWS Lambda」によって普及が始まった、クラウド上でプログラムを実行する新しい環境および手法のことです。

 

 

   2014年に発表されたAWS Labmdaはその後、対応するプログラミング言語やイベントなどを順調に増やしている。

2014年に発表されたAWS Labmdaはその後、
対応するプログラミング言語やイベントなどを順調に増やしています。
 

 

 

このサーバーレスコンピューティングがクラウドにおける新しいトレンドになりつつあります。AWS Lambdaに続いて、2016年2月にはGoogleが「Google Cloud Functions」を、IBMが「OpenWhisk」をそれぞれ発表し、さらに同年4月にはマイクロソフトも「Azure Functions」を発表するなど、相次いで大手クラウドベンダーがサーバーレスコンピューティング環境の提供を開始しました。

 

そして、このサーバーレスコンピューティングを採用した事例として、日本経済新聞社の日経電子版やID管理、クックパッドの運用監視、東急ハンズのポイントサービスなど多くの企業の名前が挙がっており、さまざまな分野での活用が始まろうとしています。

 

では、なぜサーバーレスコンピューティングが新たなトレンドになろうとしているのでしょうか。今回はその背景について解説しましょう。

 

 

サーバーの存在を意識することなくプログラムを実行・運用

 

サーバーレスコンピューティングと名付けられてはいても、プログラムの実行にサーバーを使っていないわけではありません。プログラマーがサーバーの存在を意識することなく、プログラムを実行・運用できることから、この名称が付けられました。

 

クラウド上でプログラムを実行するには、一般にIaaS型クラウドであれば、まず仮想サーバーを起動し、そこにプログラムを置いて実行することになります。サーバーレスコンピューティングでは仮想サーバーなどをユーザーが明示的に起動することはなく、あらかじめ用意されているクラウド上のプログラムの実行環境にプログラムを設置すれば、クラウドがそれを自動的に実行してくれます。

 

あらかじめクラウド上にプログラムの実行環境が用意されているという点では、サーバーレスコンピューティングはPaaS型クラウドのサービスに非常に似ています。また実行中のプログラムの負荷が高まってきた場合、自動的にスケールアウトして負荷に対応するといった運用の自動化の仕組み、いわゆる「マネージドサービス」として提供されることが一般的である点も、サーバーレスコンピューティングとPaaSは似ています。

 

逆に、サーバーレスコンピューティングが従来のPaaSともっとも異なるのは、プログラムの実行が「イベントドリブン」という点です。

 

 

イベントドリブンであることが大きな特徴

イベントドリブンとは、何らかのイベントをトリガーとしてプログラムが実行されるということです。イベントとは、AWS Lambdaの例を出すとAmazon S3のストレージにデータが保存されたときやデータベースのデータが更新されたとき、指定されたAPIにアクセスがあったとき、HTTPアクセスがあったときなど、さまざまなものが用意されています。

 

プログラマーは「このイベントのときにはこのプログラムを実行する」という形で、イベントごとに実行されるべきプログラムをそれぞれ用意し、それをサーバーレスコンピューティングの実行環境に登録しておくことができます。

 

そのプログラムは、例えば「ストレージにデータが保存されたら、それをJPEGの画像に変換し、同時にサムネイル用の小さな画像も生成する」「このAPIにアクセスがあったら、最新の情報をデータベースから取り出して別のAPIに渡す」といったものです。

 

これは一般的なプログラムの構造とはやや異なります。一般的なプログラムにはメインルーティーンがあり、メインルーティーンからさまざまな関数が呼び出されるという構造を備えています。そしてメインルーティーンは、誰かによって実行コマンドが入力されることで走り出します。

 

しかしサーバーレスコンピューティングでは、このメインルーティーンに相当するものはサーバーレスコンピューティングの実行環境の中にあり、これがイベントごとに登録されたプログラムを呼び出して実行します。すなわちプログラマーが開発すべきなのはメインルーティーンを持たず、イベントごとに呼び出されることを想定した、複数の関数なのです。

 

そしてサーバーレスコンピューティングでは、そこにプログラムを置くだけで、イベントが来れば自動的に実行されます。

 

このようにサーバーレスコンピューティングのアプリケーションは従来のアプリケーションとは構造が異なるため、従来のアプリケーションをそのままサーバーレスコンピューティング環境で実行することはできません。これもサーバーレスコンピューティングとPaaSの大きな違いです。

 

このようにサーバーレスコンピューティングとは、イベントに応じて関連付けられた関数を実行するサービスという意味で、IaaSやPaaSに対して「FaaS」(Function as a Service)と呼ぶこともあります。

 

ここまで説明したサーバーレスコンピューティングの特徴をまとめると、次のようになります。

 - クラウド上でプログラムの実行環境を提供するサービスである

 - 負荷に応じて自動的にスケールアウト/スケールインするなど、運用をクラウドに任せる「マネージドサービス」として提供される

 - プログラム(関数)の実行はイベントドリブンである

 

 

利用料金が安く、運用の手間がかからない

では、なぜサーバーレスコンピューティングがトレンドになろうとしているのでしょうか。そこにはいくつかのメリットがありますが、まず強調されやすい特徴のひとつとして、クラウドの利用料金が非常に安くなる可能性があるという点です。

 

従来のクラウドアプリケーションは、仮想マシンを起動し、そこにアプリケーションを展開して実行します。このときアプリケーションが実行されていても、実行されずにアイドリングしていたとしても、仮想マシンが起動されていれば課金対象になります。

 

一方、サーバーレスコンピューティングではイベントが発生し、プログラムが実行されたときだけ料金が発生します。アイドリング状態、すなわちイベント待ちの状態では課金されないのです。そして通常、イベントドリブンなプログラムの実行は短時間で終わります。

 

 

   イベントに対応する関数を登録しておき、イベントが発生したら関数を実行、実行終了したら何も残らない。

イベントに対応する関数を登録しておき、
イベントが発生したら関数を実行、実行終了したら何も残りません。

 

 

 

そのためサーバーレスコンピューティングの利用料金は、仮想サーバーを利用した場合と比較して10分の1程度とも言われています。

 

またマネージドサービスであり、運用の手間がかからないことも、サーバーレスコンピューティングのメリットとして重要な点です。たとえイベントが集中して大量の処理が必要になったとしても、クラウド側で自動的に処理をスケールアウトさせて処理してくれます。

 

サーバーレスコンピューティングの実行環境から呼び出された関数は、常に新規プロセスとして起動され、処理が終われば終了して消え去ります。長期間実行され続けてアプリケーションの動作が不安定になるといったことが起こりにくく、安定稼働させやすい点もメリットの1つと言えるでしょう。

 

そして、関数のような小さなプログラムが多数連動して1つのシステムを構築するというサーバーレスコンピューティングの考え方は、クラウド向けに適切とされる「マイクロサービスアーキテクチャ」に合致した構造を備えています。今後のクラウドアプリケーションのあり方を指し示すものとしても注目されています。

 

 

サーバーレスコンピューティングのデメリットとは

一方、サーバーレスコンピューティングのデメリットといえば、従来のアプリケーションがそのまま動かないため、すべて新たに開発しなければならない点が真っ先に挙げられます。

 

また、イベントドリブンに実行される関数を多数組み合わせて1つのシステムやアプリケーションを構築するという経験は、多くのプログラマーにとって未知の経験です。どんなイベントをトリガーとするのが適切なのか、そのイベントによってどのような処理を呼び出すのが適切なのかなど、考慮すべき点も多いのです。

 

さらに、前述のように関数はそのたびに起動され終了するので、永続的な状態は別途データベースなどに保存し、その都度参照しなければなりません。これも変数などでずっと状態を保持できる従来のアプリケーションとは考え方が異なります。

 

従来のアプリケーションとは異なる特徴を持つサーバーレスコンピューティングのアプリケーションがどのような分野に適しているのかといったことも、考えなければならないでしょう。

 

このようにサーバーレスコンピューティングを実際に利用するまでには多くのハードルがあります。その先に、前述した運用料金の大幅な削減やスケーラビリティ、容易な運用などのメリットがあるのです。

 

サーバーレスコンピューティングの導入には、こうしたメリットとデメリットのバランスを検討する必要があります。しかし前述のようにサーバーレスコンピューティングの考え方と実装はクラウドアプリケーションの将来の方向性と合致しています。そのため、今後さらに注目され、普及していくことは間違いないでしょう。

  

 

 

※このコラムは不定期連載です。

※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。

 

新野淳一

新野淳一/Junichi Niino

ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者

IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。