概要
サーバーレスアーキテクチャを理解したかったので、「AWSによるサーバーレスアーキテクチャを読んだ。
「サーバーレスアーキテクチャとはどういうものか」がざっくり理解できたので、概要レベルでまとめる。
サーバーレスアーキテクチャとは
サーバーレス≠サーバーがない
サーバーレス=サーバー管理が不要
サーバーレスアーキテクチャとは、プロビジョニングやメンテナンスが必要なく、スケーラビリティも確保されているアーキテクチャのこと。
ただし、厳密な定義はない。
AWS + Firebaseでの具体例
フロントエンドが直接サービス、データベースにアクセスする。一部のサービスはAPIGatewayを介してコンピュートサービス関数(AWS Lambda)の背後に隠し、この関数の中で追加的にセキュリティ関連の操作や正当性チェックを行う必要がある。
FaaSについて
FaaSはサーバーレスアーキテクチャの根幹をなす技術。
Faas = Function as a Service
Function、つまり関数を実行できる環境のこと。開発者はコードを書くだけで実行することができる。
特徴
- コードは、イベントがトリガーとなり実行される(イベントドリブン方式)
- コードはコンテナ上で実行され、実行後破棄される
- 料金は使った分だけなため、サーバーを立ち上げている時間請求されるIaasよりもコスト削減が期待できる
AWSでは、AWS LambdaがFaasに該当するサービス。
サーバーレスアーキテクチャの原則
- オンデマンドでコードを実行するために、(サーバーではなく)コンピューティングサービスを使う
- 目的が1つでステートレスな関数を書く
- プッシュベースのイベント駆動パイプラインを設計する
例) 動画をアップロードすると、違う形式に変換し保存するサービス
動画のアップロード
→トランスコードジョブの作成(AWS Lambda)
→動画のトランスコード(Amazon Elastic Transcoder)
→トランスコード済みの動画の保存(Amazon S3) - サードパーティサービスを活用する
- より厚く、より強力なフロントエンドを作る(SPA)
メリット・デメリット
メリット
- プロビジョニングやメンテナンスなどのサーバー管理が不用
- 低コスト(EC2など他のクラウドサービスと比較して)
- 開発時間短縮
- 実装がシンプル、コード量減る可能性がある
- スケーラブルで柔軟、並列処理が得意
デメリット
- レイテンシーに厳しい制約のあるAPIには向かない
- ベンダーロックイン
- パブリッククラウドが提供できる水準よりも高いパフォーマンス、信頼性が求めらえるミッションクリティカルサービスに向かない
- サービス分散化による、リモート呼び出し、ネットワーク越しのエラー処理、レイテンシーの増加
- OSのカスタマイズやその下のインスタンスの調整はできない