本文へスキップ

ソリューションユーザーごとのバックエンド

ユーザーごとに専用のインスタンス

リクエスト内のキーで、ユーザー、テナント、エージェントをそれぞれ専用のインスタンスへ振り分けます。インスタンスはメモリとディスクを保持し、リクエストの合間はスリープします。

キー別インスタンスについて読む

Python
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 では各キーのインスタンスがリクエストの合間にスリープするので、支払いは保持するデータの分だけです。

256 MiB のインスタンス 10,000 個を動かし続けた場合の、メモリだけの 1 か月分の定価1
$14,600.00
同じインスタンスがスリープし、それぞれ 100 MB を保持する場合1
$20.00

キーによるルーティングの仕組み

keys.from にヘッダーまたはパスのセグメントを指定します。新しいキーの最初のリクエストでそのインスタンスが作られ、以降のリクエストはすべて、メモリとディスクを持つ同じインスタンスに届きます。キーのないリクエストは、アプリの共有インスタンスで処理されます。

アプリとそのインスタンス:キーを使うと各インスタンスは 1 つのキー専用になり、そのリクエストのために稼働し、終わるとスリープします。

各ユーザーのインスタンスが得られるもの

  • 構成を選べる:共有インスタンスか、ユーザーのキーごとに 1 つか。

  • リクエストからキーを取得:ヘッダーまたはパスから。最初のリクエストでインスタンスが作られます。

  • ユーザーごとの状態:スリープをまたいで保持されるメモリ、専用のディスク、そしてボリューム。

  • 料金:スリープ中は CPU の課金なし。保持するデータの分だけです。

  • 存続期間を選べる:指定した時間スリープが続くと削除され、同じキーで再び作られます。

  • キーごとの使用量:各インスタンスがラベルとして持つキーから集計します。

ドキュメントを読む

画面はイメージです

約束ではなく実測

ほかに何も動いていないベアメタルでの中央値です。最良のケースであり、そう明記しています。キー別インスタンスは、これらを測定したサンドボックスと同じ種類のものです。 測定方法

スリープ中のインスタンスの復帰にかかる時間2
3.5 ミリ秒
復帰させた呼び出しの、送信から応答までの時間2
6.7 ミリ秒
メモリとプロセスを保ったままスリープさせるのにかかる時間2
2.3 ミリ秒

サービス開始後は、ご自身のキーでも確認できます。インスタンスを復帰させたリクエストのログ行に、復帰にかかった時間が記録されます。

シェル
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 か月

$192.40

  • 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 回の呼び出しでデプロイ。

キューブPython 用 SDK