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為每位使用者保留狀態,就得按小時付費
每位使用者一個行程是最簡單的設計,但一直執行的話,使用者不在時也要付費。在這裡,每個鍵的執行個體在請求之間休眠,只為它保存的內容付費。
鍵如何分配請求
把 keys.from 設為某個標頭或路徑中的某一段。新鍵的第一個請求會建立它的執行個體;之後的每個請求都會到達同一個執行個體,連同它的記憶體和磁碟。沒有鍵的請求共用應用程式的執行個體。
每位使用者的執行個體能得到什麼
選擇架構:共用執行個體,或每個使用者的鍵一個執行個體。
鍵來自請求,放在標頭或路徑中;第一個請求會建立它的執行個體。
每位使用者各有狀態:休眠前後記憶體都保留,還有自己的磁碟和一個磁碟區。
費用:休眠時不計 CPU,只計它保存的內容。
存續時間由你決定:休眠超過這段時間就刪除,之後再由它的鍵重新建立。
按鍵統計用量:每個執行個體都把它的鍵當作標籤帶著。
閱讀文件
示意預覽
實測,而非承諾
在沒有其他負載的裸機上測得的中位數:這是最佳情況,我們也明白標示。依鍵分配的執行個體與沙箱是同一種,這些數字就是在沙箱上測得的。 我們如何測量
服務開放後,你可以用自己的鍵親自驗證:喚醒執行個體的請求,在日誌中的那一行會註明喚醒花了多久。
glac cube logs notes -f
# one line a request; one that woke an instance says how long it took用到的產品
一個月的費用試算
一萬位使用者,每位都有專屬的執行個體,按定價計算。 估算你自己的用量
使用情境
- 10,000 位使用者,每位都有專屬的執行個體,使用 256 MiB。
- 每位使用者每天發出 300 個請求,持續 30 天,每個請求使用 20 毫秒 CPU、回應 5 KB,時間隨機。
- 這個應用程式設定為執行個體停止 1 秒後就真正休眠(scale.suspend_after_ms 1000),流量這麼稀疏時就該這樣設定:同一位使用者的請求相隔好幾分鐘,執行個體如果在這之間一直暫停在記憶體中,那段記憶體就一直在計費。所以每個執行個體只在回應時和之後 1 秒醒著,再暫停 1 秒,接著保存記憶體、真正休眠,保存的內容約 100 MB。
- 代價是:請求遇到休眠中的執行個體時,6.7 毫秒得到回應,遇到暫停中的則是 0.43 到 1.72 毫秒;每次休眠和喚醒還要花 25.6 毫秒 CPU,已計入當月的 CPU。
按定價計算的一個月
- CPU42.95億 CPU 毫秒 × $0.01 / 百萬$42.95
- 記憶體12,581 GiB 小時 × $0.008$100.65
- 請求9000萬 × $0.30 / 百萬$27.00
- 傳出流量450 GB × $0.004$1.80
- 休眠保存1,000 GB 月 × $0.02$20.00
改用付費版,這個月是 $189.60:月費 $5,加上超出內含額度的 $184.60,按同樣的價格從餘額扣除。
給每位使用者專屬的執行個體
取得金鑰,然後用一次呼叫部署設定了 keys.from 的應用程式。