2020/12/16

分散システムの開発におけるFaasの概要

I.はじめに

FaaSとは何かを理解する前に、サーバーレス・コンピューティング(Serverless computing)というもう1つの非常に重要な用語を理解する必要があります。

サーバーレス・コンピューティング(Serverless computing)とは、抽象的なサーバー(abstract server)と低レベルのインフラストラクチャの管理を目的としたモデルです。

このモデルでは、リソース割り当ては、開発者ではなく、クラウドサービスプロバイダーによって管理されますので、いくつかの大きなメリットがもたらされます。 つまり、サーバーレスモデルは、開発者がアプリケーションのプログラミングに集中できるようにするを目的としています。サーバーに関連するものは、クラウドサービスプロバイダーによって処理されます。

II. Faas

FaaS(Function as a Service)とは、新しいコンセプトで、現在AWS Lambda、Google Cloud Function、IBM OpenWhisk、Microsoft Azure Functionなどのサービスに展開されています。これは、サーバーレスの夢を実現する手段を提供します。これにより、開発者は、イベントが起こったときに、複雑なインフラストラクチャを構築・維持する必要でなくサービスとしている関数が呼び出される場合に応じてコードを作成できます。 つまり、機能モジュールをクラウドにデプロイして、それらの機能を独立して実行することしかできません。

開発者が作成するコードは、クラウドにデプロイされる関数になります。以下はHTTPリクエストを使用してHello WorldまたはHelloを表示し、パラメータ名があればその後に誰かの名前が表示し続く簡単な関数です。

/**

 * HTTP Cloud Function.

 *

 * @param {Object} req Cloud Function request context.

 * @param {Object} res Cloud Function response context.

 */

exports.helloHttp = function helloHttp (req, res) {

res.send(`Hello ${req.body.name || ‘World’}!`);

また、以下はGoogle Cloud Storageバケットの変更(ファイルのアップロード、ファイルの削除、メタデータの変更など)に応答できる関数です。

/**

 * Background Cloud Function to be triggered by Cloud Storage.

 *

 * @param {object} event The Cloud Functions event.

 * @param {function} callback The callback function.

 */

exports.helloGCS = function (event, callback) {

const file = event.data;

if (file.resourceState === ‘not_exists’) {

console.log(`File ${file.name} deleted.`);

} else if (file.metageneration === ‘1’) {

// metageneration attribute is updated on metadata changes.

// on create value is 1

console.log(`File ${file.name} uploaded.`);

} else {

console.log(`File ${file.name} metadata updated.`);

}

callback();

};

III. Faasのメリット

  1. 開発者はアプリケーション開発に集中できます。インフラストラクチャに関連するものは、クラウドサービスプロバイダーによって処理されます。
  2. デプロイされた関数を使用するリクエストがない場合、開発者は支払う必要はありません。
  3. ロジックは小さなモジュールに分割されます。具体的には再利用性、柔軟性を増やし、システムを拡張および維持する関数です。

IV. Faasのデメリット

  1. システムの透明性を減らすので、システム全体の動作を理解するのが困難になる可能性があります。
  1. 各関数が独立しているため、一般にデバッグが困難です。
  1. 現在、ステートレスリクエストの間でキャッシングリソースを解決するソリューションはありません。

V.Faasの用途

Faasは、Webアプリ、バックエンド、データ/ストリーム処理、チャットボット、スケジュールタスク、IT自動化に関連する問題を解決するためによく使用されます。

V. 結論

Faasには多くの利点と不利な点があるため、現時点では完全なソリューションではありませんが、大きなソリューションの一部だけです。つまり、問題を解決するために他のソリューションと組み合わせ、いくつかの固定場合でfaasを使用します。したがって、いつFaasを正しく使用するかを決定することが重要です。

たとえば、ウェブシステムの開発では、Google Cloudバケットにファイルをアップロードした場合、faasを使用して、そのウェブサイトの管理者としてユーザーに通知できます。又は、誰かが新しいアカウントの登録が完了した場合、faasを使用して登録に成功したことを通知する電子メールを送信できます。