【Momento】サーバレスとは何か 〜サーバレスの真の定義〜


## はじめに

この記事はMomento Blogにあるブログを読み、考えを整理していく記事です。

今回は`Fighting off faux-serverless bandits with the true definition of serverless`(訳：サーバレスの真の定義で、偽サーバレス賊を撃退する)を読み、考えを整理してサーバレスとはなんだったかを見ていきます。
時折、自分の見解も含めて書いていきます。

[サーバーレスの真の定義で、偽サーバーレス賊を撃退する - 参考](https://jp.gomomento.com/blog/fighting-off-fake-serverless-bandits-with-the-true-definition-of-serverless/)

 [（英語）Fighting off faux-serverless bandits with the true definition of serverless](https://www.gomomento.com/blog/fighting-off-fake-serverless-bandits-with-the-true-definition-of-serverless)

## まずはざっくり読んでいこう

> The term serverless became widely accepted about seven years ago—but its mission has been around for almost two decades. In fact, Simple Queuing Service (SQS) and S3—launched 2004 and 2006—have always been serverless. T....以下略

冒頭を簡単に要約すると。。。

数年前、およそ2004年と2006年にS3やSQSといったサーバレスのクラウドサービスが登場した。
サーバレスがプロビジョニングされた容量に関連するコストと複雑さを軽減することで
それからものすごい速さでクラウドは普及した。

クラウド普及時には明らかにクラウドの定義とかけ離れたサービスをクラウドと呼ぶこともあった。
似たようなことがサーバレスに起きている。
この記事では何がサーバレスかどうかを見分ける方法について説明する。

## What is serverless? And what isn’t?

> The serverless mission is to accelerate experimentation and innovation by reducing the barriers to entry (cost, complexity, and time-to-market).以下略

冒頭を簡単に要約すると

サーバレスの真のミッションは
`クラウドサービス利用のへの参入障壁を減らし、試行錯誤に対する時間投下を最大限に伸ばすこと`である。

また、クラウドサービスを利用する際には`インフラの管理をほとんどあるいは全くといって良いほどしない`ことです。

上記の考えをいくつかの原則に落とし込むと具体的には下記の通りになります。

## サーバレスの核となる考え方

- より高いシンプルさと抽象度
- 呼び出したら起動するインスタント感
- 弾力性
- 組み込み済みのベストプラクティス

わかりそうでわからないとところがあると思うので順番に見ていきましょう。

### より高いシンプルさと抽象度

簡単に説明すると使い始める時に複雑さがないということになるかなと思います。
特別な設定は入れることなく、デフォルトで動くというイメージです。

ただし、デフォルトで動くからといって何もしなくて良いというわけではありません。
細かいコンフィギュレーションを設定する責任はユーザにあります。

### 呼び出したら起動するインスタント感

サーバレスではないサービスではインスタンスやクラスターを起動する必要があります。
サーバレスのサービスはそういった準備の必要がなく、利用できます。

厳密には使い始める時に初めて起動されます。たとえば、AWS Lambdaはその典型です。

### 弾力性

通常、クラウドを利用することなく、仮想サーバなどをプロビジョニングした場合
アクセス数などに応じて手動でスケールする必要があります。

昨今のクラウドではオートスケールするキャパシティは当たり前であり、それがサーバレスにもあるべきだということです。

### 組み込み済みのベストプラクティス

`より高いシンプルさと抽象度`にもつながる話ですが、シンプルさを求める場合はあらかじめベストプラクティスが設定されている必要があります。ベストプラクティスに従っていれば、少なくとも自分でプラクティスを考える必要はほとんどありません。

ただし、ベストプラクティスが全てのケースに当てはまることはないということは気をつけておくべき点です。
サーバレスは`何をやって良いのかもしくは悪いのか`がすでにベストプラクティスによって定められています。

## サーバレスかどうかを見極める（Faux-serverless bandit tricks）

では原則や考えを理解できたところで実際にはどのようにして見極めていけば良いのか
ブログの内容とともに見ていきましょう。

## 見極めのルール

具体的には下記の5つがサーバレスのルールです。

- Provisioned capacityがあるかないか
- インスタンスのオートスケーリングに言及されていない
- 最低収容のキャパシティ
- インスタンスが存在しない
- メンテナンス・ウィンドウが存在しない

なかなかキャッチーなことが書いてあるように見えますが、実際のところどんな意味なのでしょうか。
これも順番に見ていきましょう。

### Provisioned capacityがあるかないか

簡単に説明すると予約済みの容量のことです。`サーバレスの核となる考え方`にもあるとおり呼び出したときだけ利用するオンデマンドタイプであることがわかります。

つまりはインフラを構築する際にある程度の目星をつけてコストを見積もり、あらかじめ容量を予約すするということをしません。キーワードは`必要な時に必要な分だけを調達する`ということです。

### インスタンスのオートスケーリングに言及されていない

これは`Provisioned capacity`の話にも関連する話ですが、簡単に説明するとほとんどの場合で`容量を管理しない`ということです。あるいは気にしなくても良いということになります。

たとえばですが、オンデマンドなDynamoDBにはオートスケールという機能がありません。
※DynamoDB オートスケーリングというものは存在します。

### 最低収容のキャパシティ

簡単に説明すると最低でもN個消費するといったルールがキャパシティ管理に存在しないということです。つまりは使わない時はゼロにスケールするということです。

### インスタンスが存在しない

シンプルであることの条件に含まれるといっても過言ではないですが、サーバレスではインスタンスという概念が存在しません。何がどう動いているのかということをサーバレスでは気にする必要がありません。また、何が動いているかが見える必要がありません。

しかし、`インスタンスが存在しない`ということが必ずしも良いかというとそれは違います。理由は`インスタンスが見えない`という特徴はオブザーバビリティという観点において不利になることが多いからです。

インスタンスがあるからこそ正常性をモニタリングできるということを忘れないようにしてください。

### メンテナンス・ウィンドウが存在しない

最後にメンテナンスウィンドウが存在しないということです。サーバレスではないサービスには時折、メンテナンスが発生します。

サーバレスサービスでは自分たちの知らないところでデプロイ、アップグレード、スケーリングのイベントが発生します。

## まとめ

今回は`サーバレスとは何か`についてブログを通して考えをまとめていきました。
なお、今回の引用元であるMomentoはMomento Cacheという真のサーバレスの定義をすべて満たしているすごいキャッシュサービスを提供しています。

最後に`サーバーレスのリトマス試験紙：すべてをまとめよう`では最後に具体例が書いてありますが、いろんな事情で書くのが難しいため、割愛します。
気になる方はブログをチェックしましょう。

[サーバーレスの真の定義で、偽サーバーレス賊を撃退する](https://jp.gomomento.com/blog/fighting-off-fake-serverless-bandits-with-the-true-definition-of-serverless/)

## 所感

真のサーバレスに当てはまるサービスは世の中にどれくらいあるのか
そして、自分が日頃触っているサービスは真のサーバレスなのか気になりました。

少しだけ頭の片隅においてサービスを見ていこうと思います。

## おわり