「サーバレスコンピューティング」活用法、パブリッククラウドのコスト削減効果とは:適したアプリケーションは?
サーバレスコンピューティングはパブリッククラウドでアプリケーションを実行するコストを削減できる。ただしコスト削減をはじめとする各種のメリットを享受するには、適切なスキルセットが必要だ。
関連キーワード
Amazon Web Services | Microsoft Azure | API | Google Compute Engine | クラウドコンピューティング | クラウドサービス
「サーバレスコンピューティング」によって、企業はクラウドアプリケーションをより細かい単位で設計し、導入できる。従来のモノリシックなアプリケーションとは異なり、サーバレスアプリケーションはワークロードを複数の関数に分割し、トリガーとなるイベントに呼び出された場合にのみ実行する。
名前に“サーバレス”とあるが、サーバレスコンピューティングはサーバが全く不要なわけではなく、関数をロードして実行するときにのみ使用する。こうしてリソースの使用を最小限に抑えることで、パブリッククラウドの利用料金を抑えようというわけだ。
主要なパブリッククラウド事業者は現在、何かしらの形でサーバレスコンピューティングを提供している。Amazon Web Services(AWS)の「AWS Lambda」、Microsoftの「Microsoft Azure Functions」、Googleの「Google Cloud Functions」などだ。本稿ではサーバレスコンピューティングとは何かを説明し、この最新技術を最大限に活用するための留意点を紹介する。
併せて読みたいお薦めの記事
サーバレスコンピューティングについて
「AWS Lambda」「Azure Functions」を比較
AWS Lambdaに関する記事
サーバレスコンピューティングに必要なスキル
サーバレスコンピューティングは、アプリケーションの設計と管理方法が従来とは根本的に異なる。そのため、この技術を最大限に活用するには、開発者にもクラウド管理者にも軌道修正が必要だ。
開発者にとって最大の違いは、アプリケーションの構造だ。従来型のモノリシックなアプリケーションは多くの場合、変数を介してデータをやりとりするルーチンに依存する。この方法を進化させたのがマイクロサービスだ。マイクロサービスはソフトウェアを小さな機能要素に分割した上で、機能要素を個別にスケーリングし、APIを介してデータをやりとりする。これをさらに極端にしたのがサーバレスコンピューティングだ。サーバレスコンピューティングはソフトウェアの機能を個別の関数に分割し、必要なときにだけ起動する。こうして核となるアプリケーションを小さくすることで、クラウドコンピューティングのインスタンスを小さくし、コストを抑えることが可能だ。
サーバレスコンピューティングの影響はクラウド管理者にも及ぶ。クラウド管理者は例えば、何十もの関数のアベイラビリティとパフォーマンスを監視しなければならない。各関数について、パフォーマンスを監視し、トラブルシューティングを実施し、利用状況とコストを追跡して、そうしたコストをアプリケーション全体のコストとして集計する必要がある。関数の分析と評価には、Azure Functionsの「モニター」タブなど、パブリッククラウド事業者が提供する監視機能を利用できる。
さらにクラウド管理者は、継続的な管理データを開発者と共有するためのメカニズムも構築しなければならない。こうすることで、サーバレスアプリケーションを継続的に改善し、パフォーマンスとコストの最適化を図ることができる。
サーバレスコンピューティングに適したアプリケーションとは
サーバレスコンピューティングが最も適しているのは、多くのリソースを必要とせず、依存関係が最小限で、実行に長時間を要さない、小さくてステートレスな関数だ。関数はできる限り素早く、始動、実行、終了する必要がある。実行に大量のリソースや長い時間を必要とするタスクは、従来型の仮想マシン(VM)やコンテナ導入の方が向いている。
関数は通常、リソースと同時処理数と導入規模に制限がある。クラウド事業者はインスタンスを迅速にスピンアップ(起動処理)し、関数のコードをロードして実行するためのリソースを提供する必要があるからだ。例えば、AWS Lambdaのリソース制限は現在、一時ディスク容量が512MB、ファイル記述子の数が1024個、プロセスとスレッドの数は合わせて1024個、リクエスト当たりの最大実行時間は300秒となっている。
パブリッククラウドのコストを削減
サーバレスコンピューティングの強みの1つは、パブリッククラウドにおいてオンデマンドで仮想マシン(VM)インスタンスを使う場合と比べて、アプリケーションの設計によってはコストを削減できる点だ。コスト削減の規模はアプリケーションの性質によって異なる他、アプリケーションがどの程度イベント駆動型の関数として設計、導入されているかや、関数を呼び出す頻度によっても異なる。イベントが発生したとき以外、アプリケーションの大半がアイドル状態にあるようなら、コストの削減を見込める。
ただしパブリッククラウドにおいてオンデマンドでVMインスタンスを使用する場合と比べて、コストを常に削減できるわけではない。無料層を除けば、関数の呼び出しは常に料金が発生する。関数ベースのアプリケーションのコストはおおよそ各関数のコストの合計となる。各関数のコストは基本的には、呼び出し回数に呼び出し1回当たりのコストを掛けた数字だ。
例えば50〜100個程度の関数で構成されるサーバレスアプリケーションを、数万あるいは数十万という規模のモバイルユーザーベースが利用するとする。このような場合、クラウドの利用料金が請求されるころには、関数の呼び出し回数が膨大な数にふくれ上がっている可能性もある。そうなれば、従来型のアーキテクチャで設計した場合よりもコストがかさむ。ここでの問題は、一部には利用予測が不明確なことにある。大半の開発者は、関数がどのくらいの頻度で呼び出されることになるかを把握していない。そのためコスト分析が難しくなる。
サーバレスアプリケーションのコストを予測するには、関数の使用規模とユーザーベースの規模を慎重に評価する必要がある。アプリケーションの設計の違いが運転コストにどのような影響を及ぼすかについての検討も重要だ。アプリケーションの設計に変更を加え、一部の関数の多用を回避することで、コストを減らせる場合もある。
導入前の留意点
Copyright © ITmedia, Inc. All Rights Reserved.