はじめに
サーバレスに本格的に取り組む前にサーバレスの定義について、一度自分の中で整理してみたかったので、まとめてみました。
サーバレスって?
顧客がコードやデータのみを提供し、インフラ管理を必要としないクラウドサービスのことで、仮想化技術の一つ。
「レス」だからサーバがないのか?と初めてサーバレスの言葉を聞いた時は思いましたが、もちろん意識しないだけで、クラウドサービスプロバイダのサーバ上で動いています。
なお、Wikipedia(English)では、サーバレスのことを、誤称(misnomer)
と書いてました。
課金形態は従量課金(Pay-as-you-go/Usage-based-pricing)の使った分だけ課金といった形態になっています。
ただし、どこまでサーバを意識しなくて良いのかや、サーバを意識はしなくて良いけど、時間制課金だったり最低料金があったりなど、サービス内容は様々です。
サーバーレスは厳密な定義があるというよりもスペクトラム(グラデーション)として捉えるべきだと思います。
サーバレスのリトマス紙
一方、memontoは以下の基準を満たさないサーバレスのサービスをfaux-serverless(偽りのサーバレス)
と呼んでたりします。
- プロビジョニング不要、管理も不要
- 最低料金なしの使用量ベースの料金体系
- 単一のAPIコールですぐに利用可能
- 計画的なダウンタイムなし
- インスタンスなし
サーバレスの形態
主要形態として、Function as a Service (FaaS)および、Backend as a Service (BaaS)の2つがあると思います。
Function as a Service (FaaS)
イベント駆動で必要な時だけ実行される関数単位のサービス。
コードさえあれば、インフラの管理を行うことなく、実行可能となっています。
AWSだと、Lambdaが該当します。
Backend as a Service (BaaS)
バックエンドに必要な機能を包括的あるいは個別に提供するサービス。
認証・認可、データベース、キャッシュ、データストア、通知、ワークフロー等があります。
AWSだと、Amplify・Cognito・SNS等が該当します。
なぜサーバレスなのか?
では、何故サーバレスを選択するのか、理由をいくつか考えてみました。
コスト効率の向上
処理数・時間に応じた従量課金制のため、リソースを無駄なく利用できます。
またサーバの維持管理コストが不要で、インフラ関連の人件費も削減できます。
私は経営者ではありませんが、固定費として重くのしかかるインフラコストが変動費化できることはかなり重要なことらしいです。
特に新型コロナウイルスの時のような、急に需要が落ちてしまうような時にこの従量課金の仕組みは相性が良いとのこと。
開発効率・俊敏性向上
インフラ管理(構築、デプロイやスケーリング)の負担が軽減され、開発者は差別化できる作業に集中できます。
インフラ管理はサービスを継続していく上で重要なことですが、直接は利益を産むわけではありません。
ビジネスとして価値を生む(差別化できるところ)に、エンジニアのリソースを集中することができます。
信頼性とスケーラビリティ
これまでは1年に一度だけ負荷のピークが訪れる場合でも、そこを想定したインフラ構築が必要でした。
サーバレスの場合、クラウドサービスプロバイダーが提供する高可用性インフラを活用できます。
さいごに
サーバレスの定義をまとまるだけだったのですが、結構色々と調べたり、考えたりすることがあって時間がかかりました。
上手くまとめられてないですが、今回はここまでとします。