ソリューションユーザーごとのバックエンド
ユーザーごとに専用のインスタンス
リクエスト内のキーで、ユーザー、テナント、エージェントをそれぞれ専用のインスタンスへ振り分けます。インスタンスはメモリとディスクを保持し、リクエストの合間はスリープします。
from glac import Glac
glac = Glac()
app = glac.cube.deploy(
"ghcr.io/acme/notes:2", name="notes", port=8080,
keys={"from": {"header": "X-User"}, # the key
"delete_after_idle_ms": 30 * 86_400_000},
scale={"suspend_after_ms": 1000}) # sparse traffic: asleep a second after
# a request with X-User: ada reaches ada's own instance
ada = app.instance("ada") # or make or wake it from codeユーザーごとに状態を持てば、時間単位で料金がかかる
ユーザーごとにプロセスを持つのは最も単純な設計ですが、動かし続けるとユーザーがいない間も料金がかかります。Glac では各キーのインスタンスがリクエストの合間にスリープするので、支払いは保持するデータの分だけです。
キーによるルーティングの仕組み
keys.from にヘッダーまたはパスのセグメントを指定します。新しいキーの最初のリクエストでそのインスタンスが作られ、以降のリクエストはすべて、メモリとディスクを持つ同じインスタンスに届きます。キーのないリクエストは、アプリの共有インスタンスで処理されます。
各ユーザーのインスタンスが得られるもの
構成を選べる:共有インスタンスか、ユーザーのキーごとに 1 つか。
リクエストからキーを取得:ヘッダーまたはパスから。最初のリクエストでインスタンスが作られます。
ユーザーごとの状態:スリープをまたいで保持されるメモリ、専用のディスク、そしてボリューム。
料金:スリープ中は CPU の課金なし。保持するデータの分だけです。
存続期間を選べる:指定した時間スリープが続くと削除され、同じキーで再び作られます。
キーごとの使用量:各インスタンスがラベルとして持つキーから集計します。
画面はイメージです
約束ではなく実測
ほかに何も動いていないベアメタルでの中央値です。最良のケースであり、そう明記しています。キー別インスタンスは、これらを測定したサンドボックスと同じ種類のものです。 測定方法
サービス開始後は、ご自身のキーでも確認できます。インスタンスを復帰させたリクエストのログ行に、復帰にかかった時間が記録されます。
glac cube logs notes -f
# one line a request; one that woke an instance says how long it took使用する製品
1 か月の試算
1 万人のユーザーにそれぞれ専用のインスタンスを、定価で。 ご自身で見積もる
前提とする使い方
- 10,000 人のユーザーが、それぞれ専用のインスタンス(使用メモリ 256 MiB)を使用。
- 各ユーザーは 30 日間、1 日 300 回のリクエストをランダムな時刻に送り、各リクエストは CPU 時間 20 ミリ秒、レスポンス 5 KB。
- インスタンスが停止してから 1 秒後に、メモリを保存して完全にスリープするようアプリを設定(scale.suspend_after_ms 1000)。これほどまばらなトラフィックにはこの設定が合います。ユーザーのリクエストは数分おきにしか届かず、その間インスタンスをメモリ上で一時停止させておくと、ずっとそのメモリに課金されるからです。そのため各インスタンスは、応答中とその後 1 秒だけ稼働し、さらに 1 秒一時停止してから、メモリを保存してスリープし、約 100 MB を保持します。
- その代わり、スリープ中のインスタンスへのリクエストは応答まで 6.7 ミリ秒かかります(一時停止中なら 0.43〜1.72 ミリ秒)。また、スリープと復帰のたびに CPU 時間が 25.6 ミリ秒かかり、その月の CPU に計上されます。
定価での 1 か月
- CPU42.95億 CPU ミリ秒 × $0.01 / 100万$42.95
- メモリ12,581 GiB-時間 × $0.008$100.65
- リクエスト9000万 × $0.30 / 100万$27.00
- 送信トラフィック450 GB × $0.004$1.80
- スリープ中の保持データ1,000 GB-月 × $0.02$20.00
有料プランでは、この 1 か月は $189.60 です。内訳は、月額料金 $5 と、利用枠を超えた分の $184.60(同じ料金で残高から支払い)です。
ユーザー一人ひとりに専用のインスタンスを
キーを用意し、keys.from を設定したアプリを 1 回の呼び出しでデプロイ。