アリババクラウドFunction Computeを使用したサーバーレスの一般的なアプリケーション

近年、サーバーレスアーキテクチャが急速に台頭してきています。本記事では、**Alibaba Cloud Function Compute**を用いて、**サーバーレス**の一般的なアプリケーションを探っていきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/4-use-cases-of-serverless-architecture_593862)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

サーバーレスアーキテクチャは、近年、新しい技術コンセプトとして急速に台頭してきています。このアーキテクチャを使用することで、開発者は様々な業界向けの様々なアプリケーションを作成することができます。すでに多くの企業が、[Alibaba Cloud Function Compute](https://www.alibabacloud.com/product/function-compute?spm=a2c65.11461447.0.0.7c2e66fbkgNcQp)などのサーバーレス製品をソリューションに採用し始めています。サーバーレスソリューションは、軽量で柔軟性が高く、ステートレスなアプリケーションを簡単に構築するのに役立ちます。この記事では、Alibaba Cloud Function Computeを利用したサーバーレスの4つの一般的なアプリケーションを探っていきます。

始める前に、サーバーレスアーキテクチャの歴史と特徴をよく理解しておきましょう。

#サーバーレス化の進化
開発者は、ソフトウェア開発ライフサイクルを維持するためのより効果的な方法を常に模索しています。新しい技術コンセプトが導入されるたびに、生産性が向上します。同様に、ビジネスがアプリケーション開発に集中できるようにするために、サーバーレスアーキテクチャが導入されました。サーバーレス化により、企業はサーバーインフラの心配をする必要がなくなり、開発コストを削減し、開発サイクルを短縮することができます。

サーバレスアーキテクチャの開発プロセスは、仮想化（クラウドコンピューティング）から始まったこれまでの実績の上に構築されています。このプロセスはかなり連続的ではありますが、いくつかの注目すべきマイルストーンがあります。

1、大規模な物理サーバーを個々のVMリソースに仮想化するための仮想化技術が導入。
2、仮想化クラスタをクラウドコンピューティングプラットフォームに移行し、簡単なO&Mを実現。
3、運用スペースを最小限に抑えるという原則に基づいて、各VMがDockerコンテナに細分化。
4、Dockerコンテナ上に構築されたアプリケーションは、ランタイム環境の管理を必要とせず、コアコードのためのサーバーレスアーキテクチャのみを必要とします。
5、サーバーレスを導入することで、開発者がサーバーインフラよりもアプリケーションロジックに集中できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/54159e17-c523-436f-4f1c-6359423f5c08.png)


#サーバーレスアーキテクチャの特徴
サーバーレスアーキテクチャには以下のような特徴があります。

1、粒度の高いコンピューティングリソース
2、リソースを事前に割り当てる必要はありません。
3、拡張性と柔軟性に優れたアーキテクチャ
4、利用者は利用するリソースに対してのみ支払いをする必要があります。

具体的には、[Alibaba Cloud Function Compute](https://www.alibabacloud.com/product/function-compute?spm=a2c65.11461447.0.0.7c2e66fbkgNcQp)では以下のようなメリットがあります。

1、インフラ管理は不要です。Function Computeを利用することで、運用・保守コストを抑えてメインのビジネスロジックの開発に専念することができます。
2、Alibabaクラウドサービスとのシームレスな統合。Function Computeは、アプリケーションを迅速に構築するのに役立ちます。例えば、画像や動画のデータ処理のためにOSSにファンクションをフックアップすることができます。新しいデータがOSSにアップロードされると、アップロードされたデータを処理するための関数が自動的にトリガーされます。
3、ミリ秒単位の弾性的なスケーリング Function Computeは、どのようなスケールでも瞬時にすべてのトラフィクスを吸収します。
4、あなたが実際に使用したコンピューティングリソースに対してのみ課金されるため、コストを大幅に削減できます。予測不可能なトラフィックパターンを持つビジネスシナリオに適しています。

|　　　　　　　　|Function Compute             |コンピューティング環境|
|:-----------|-----------------------|:------------:|
|メンテナンス性|	1、サンドボックス実行環境は設定不要<br> 2、自動スケーリングと負荷分散|1、ランタイム環境の設定が必要<br>2、スケーリング機構とロードバランサーの独立した構築が必要|
|信頼性|コードとコンフィグレーションは、自動で複数レベルの冗長化されたバックアップによりOSSに保存される	|1、特定のハードウェアの信頼性によって制限される<br>2、手動でのデータ復旧は複雑で時間がかかる|
|コスト|1、利用状況に応じて課金<br>2、無料アップリンクトラフィック<br>3、メンテナンススタッフやホスティング料金は不要<br>4、アリババクラウド製品間での無料内部転送|1、ビジネスリクエストのピークに対応するために、リソースのサイズ変更を常に行う必要あり<br>2、ランタイム環境とハードウェアリソースの保守は、指定された担当者が行う必要あり<br>3、インターネット上での製品間の通信は、追加のトラフィック料金が発生する可能性あり|
|セキュリティ	|1、サンドボックスは、Alibaba Cloudのエンタープライズグレードのセキュリティ環境で動作<br>2、サーバーレベルの分離により、異なるユーザーを分離<br>3、プライマリーアカウントおよびサブアカウントの各種サービス認可|1、トラフィッククレンジングとブラックホールの機器を別途購入する必要あり<br>2、アクセスセキュリティの仕組みは、独立して実装されている必要あり|

#サーバーレスアーキテクチャの代表的なアプリケーション
###シナリオ 1: イベントトリガー型コンピューティング
サーバーレスは、携帯電話やPCなど複数の機器が画像や動画、テキストファイルなどをアップロードするなど、様々なファイルに複数の機器がアクセスする場面に適用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/610830ef-e936-db1e-de9d-5802541a901d.png)



Function Compute with Object Storage Service（OSS）を利用することで、Alibaba Cloud上で同様のユースケースにサーバーレスアーキテクチャを適用することができます。ユーザーが動画ファイルをOSSにアップロードすると、Function Computeが起動してオブジェクトのメタデータを取得し、コアアルゴリズムライブラリに送信します。アルゴリズムに基づいて、コアアルゴリズムライブラリは、関連する動画ファイルをCDNオリジンサイトにプッシュし、指定された動画をホットロードします。別のシナリオでは、動画ファイルがOSSにアップロードされた後、Function Computeを起動して複数のトランスコーディングレートを同期させ、処理した動画ファイルをOSSに格納します。これにより、軽量なデータ処理ソリューションを提供します。

マルチメディア処理のシナリオでは、大量のファイルが、透かし、トランスコーディング、ファイル属性データのフェッチなどの処理のためにOSSにアップロードされることがよくあります。Function Computeは、これらの機能を通じて、ユーザがイベントトリガーのコンピューティングシナリオにおける技術的な困難に容易に対処するのをサポートすることができます。

1、Function Computeでは、イベント通知を受け取るためのOSSトリガーを設定することができます。Function Computeでは、コードを書いてファイルを処理したり、イントラネット経由でOSSにファイルを送信したりすることができます。全体のプロセスはシンプルでスケーラブルです。
2、あなたのコアコードをFunction Computeに構築し、イベント通知を同時に処理するコードを使用することができます。
3、Function Computeは現在、他の製品との内部インタラクションをサポートしています。

###シナリオ2: ライブビデオ放送用のエラスティックリサイズ
サーバーレスアーキテクチャは、ライブビデオ放送のシナリオに最適です。下の図では、クライアントはホストと視聴者からオーディオとビデオのストリームを収集し、それらを多重化のためにFunction Computeに送ります。Function Computeは、収集したデータを合成のために多重化サービスに送り、合成されたビデオストリームをCDNにプッシュします。視聴者はリアルタイムでライブストリームを引っ張ってきて、多重化され合成されたビデオを見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f15c96ca-5d67-ca83-5a23-d53105ba1efb.png)


特定のライブビデオシナリオでは、複数の視聴者メンバーが対話することができるので、ホストは同時に複数のマイクに接続されます。ホストは、複数の視聴者メンバーまたは友人を画面に接続し、画像を単一のシナリオに合成して、ライブストリーム視聴者に提供することができます。

サーバーレスアーキテクチャは、このようなシナリオで発生する可能性のある困難に対処します。ホストと接続されたマイクのためのリアルタイムオーディオおよびビデオ転送クラスタとして、Function Computeは、リアルタイムデータストリームを処理するために使用される複数の実行環境のサイズを、同時に発生するボリュームに基づいて自動的に変更します。トラフィックのピーク後、Function Computeは適切にリソースボリュームを減らすことができます。コード管理機能はクラウド上に展開され、いつでもコードの反復を修正して維持することができ、複数のソフトウェアランタイム環境を管理する必要がなくなります。

###シナリオ3：IoTデータ処理
サーバーレスアーキテクチャは、以下に示すようなInternet of Things (IoT)のシナリオに適用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/586aece6-fe2a-b672-2e12-17ee0ca765b6.png)

アーキテクチャは2つの部分に分かれています。

1、ウェブアプリケーション：ソーシャルメディアのコンテンツ更新とデータ処理の流れをシミュレートします。ウェブユーザからのリクエストは、処理のためにAPI GatewayからFunction Computeに転送されます。その後、Function Computeはデータベース内の処理されたコンテンツを更新し、インデックスを更新します。別のFunction Computeインスタンスは、インデックスの更新を検索エンジンにプッシュし、新しいコンテンツは外部の顧客によって検索されます。これは、クローズドループのデータプロセスです。
2、スマートデバイス：IoTゲートウェイは、処理のためにスマートデバイスのステータスをFunction Computeにプッシュします。Function ComputeはAPIを使用してMobile Pushにメッセージを送信し、ステータス確認と管理のためにモバイル端末にメッセージをプッシュします。

スマートデバイスのステータス処理には、いくつかの重要な技術的な困難も発生します。多数のデバイスからIoTプラットフォームへのステータスデータを処理するために、効率的な非ポーリング技術フレームワークを設計する必要があります。次に、データベースへの書き込みやモバイル端末へのデータのプッシュなど、処理されたデータを効率的かつ透過的に他の製品に送信する方法が必要です。

###シナリオ4：共同配送型派遣システム
顧客は派遣プラットフォームを利用して、食品の注文や商品の購入など、様々な販売者が提供するサービスの中から選択することができます。そして、派遣プラットフォームは、最寄りの配送担当者に通知して、最寄りの販売者から該当する商品を受け取り、顧客に商品を届けます。簡単なプロセスは下図のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b61229bb-201f-6df6-6462-fb1e1e78497a.png)

プロセスの詳細：

1、顧客は派遣プラットフォームに商品を注文するように知らせます。
2、派遣プラットフォームは、最寄りの配送スタッフに通知します。
3、派遣プラットフォームは、同時に売り手に製品を販売することを通知します。
4、配達スタッフは、製品をピックアップするために指定された販売元に行きます。
5、配送スタッフは、顧客の場所に製品を提供します。
このようなプロセスは、サーバーレスアーキテクチャで簡単に実装することができます。下の図では、他の製品と一緒にAlibaba Cloud Function Computeを利用して、配送ディスパッチシステムを開発しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/01b0a646-e858-6b8a-231f-e365cf66a7bf.png)

プロセスの詳細：

1、顧客アプリは、API Gatewayを介して透過的に注文リクエストをFunction Computeに送信します。
2、Function Computeは、処理されたデータをTable Storeに送信します。
3、Table Storeは、ルートデータ、販売者情報、位置情報を格納します。
このソリューションでは、Function Computeはダイナミックなリサイズ機能を提供することができ、API Gatewayは認証を行い、安全なアクセスを保証します。Function Computeは、他のリソースやコンテンツをシームレスに利用するために、複数の製品と通信することができます。処理されたデータはすべてTable Storeデータベースに保存され、すべてのログは、その後のデータレポートのために直接Log Serviceにロードされます。

#概要
前述のシナリオを通して、サーバーレスアーキテクチャは、開発者だけでなく企業にも多くのメリットをもたらすと結論づけることができます。[Alibaba Cloud Function Compute](https://www.alibabacloud.com/product/function-compute?spm=a2c65.11461447.0.0.7c2e66fbkgNcQp)は、コスト、効率性、および接続性に関する考慮事項に対処しながら、サーバーレスアーキテクチャの開発を支援します。

Function Computeは、多くのシナリオに適用可能ですが、万能なソリューションではありません。例えば、リクエストの変動が大きくないビジネスにとっては、最もコスト効率の良いソリューションとは言えないかもしれません。さらに、Function Computeの実行環境は状態を記録しないので、サーバレスフレームワークは緊密に結合されたアプリケーションにはあまり適していません。しかし、サーバーレスフレームワークは、新興技術であるため、開発者や企業にとってはまだその可能性を十分に発揮できていません。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*