SoluzioniBackend per utente
Un’istanza per ogni utente
Una chiave nella richiesta indirizza ogni utente, tenant o agente alla sua istanza, che conserva memoria e disco e dorme tra una richiesta e l’altra.
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 codeStato per utente, pagato ora dopo ora
Un processo per ogni utente è il design più semplice, e se resta in esecuzione si paga anche mentre l’utente è assente. Qui l’istanza di ogni chiave dorme tra una richiesta e l’altra e paga solo ciò che conserva.
Come instrada una chiave
Imposta keys.from su un’intestazione o su un segmento del percorso. La prima richiesta di una nuova chiave crea la sua istanza; ogni richiesta successiva raggiunge la stessa istanza, con la sua memoria e il suo disco. Le richieste senza chiave condividono le istanze dell’app.
Cosa ottiene l’istanza di ogni utente
Scegli la struttura: istanze condivise, o una per la chiave di ogni utente.
Una chiave dalla richiesta, in un’intestazione o nel percorso; la prima crea la sua istanza.
Stato per utente: memoria conservata durante il sonno, un disco suo e un volume.
Quanto costa: mentre dorme, niente CPU, solo ciò che conserva.
Una durata che scegli tu: cancellata dopo aver dormito per quel tempo, ricreata dalla sua chiave.
Utilizzo per chiave, dalla chiave che ogni istanza porta come etichetta.
Anteprime illustrative
Misurato, non promesso
Mediane su bare metal con nient’altro in esecuzione: il caso più favorevole, e lo diciamo. L’istanza di una chiave è dello stesso tipo di una sandbox, dove sono state misurate. Come misuriamo
- per svegliare un’istanza dormiente2
- 3.5 ms
- per la chiamata che l’ha svegliata, dall’invio alla risposta2
- 6.7 ms
- per addormentarla, con la sua memoria e i suoi processi2
- 2.3 ms
Lo vedrai per le tue chiavi quando il servizio aprirà: la riga di log di una richiesta che ha svegliato un’istanza dice quanto è durato il risveglio.
glac cube logs notes -f
# one line a request; one that woke an instance says how long it tookI prodotti che usa
- CuboQualsiasi immagine container come app che dorme tra una richiesta e l’altraL’app, con le chiavi: un’istanza per ogni utente, tenant o agente.
- VolumeI dischi di Cubo, che sopravvivono alla loro istanzaDischi per ciò che deve sopravvivere all’istanza di un utente.
- SandboxUn computer tutto suo per ogni agenteUn agente per ogni utente, pilotato tramite l’API.
Un mese, fatti i conti
Diecimila utenti, ciascuno con la propria istanza, a prezzo di listino. Fai la tua stima
Lo scenario
- 10 000 utenti, ciascuno con la propria istanza, 256 MiB in uso.
- Ogni utente fa 300 richieste al giorno per 30 giorni, ciascuna da 20 ms di CPU e 5 KB di risposta, in momenti casuali.
- L’app è impostata per addormentarsi davvero un secondo dopo che un’istanza si è fermata (scale.suspend_after_ms 1000), l’impostazione giusta per un traffico così rado: le richieste di un utente arrivano a minuti di distanza, e un’istanza tenuta in pausa in memoria tra l’una e l’altra viene fatturata per quella memoria per tutto il tempo. Così ognuna resta sveglia mentre risponde e per 1 s dopo, rimane in pausa ancora 1 s, poi si addormenta con la memoria salvata e conserva circa 100 MB.
- Il prezzo di questa scelta: una richiesta che trova la sua istanza addormentata riceve risposta in 6.7 ms, mentre se la trova in pausa la riceve in un tempo tra 0.43 e 1.72 ms; e ogni sonno con il relativo risveglio richiede 25.6 ms di CPU, conteggiati nella CPU del mese.
Un mese a prezzo di listino
- CPU4.3 miliardi di CPU-ms × $0.01 / M$42.95
- Memoria12 581 GiB-h × $0.008$100.65
- Richieste90 milioni × $0.30 / M$27.00
- Traffico in uscita450 GB × $0.004$1.80
- Conservato durante il sonno1 000 GB-mese × $0.02$20.00
Con il piano a pagamento questo mese costa $189.60: il canone di $5 e $184.60 oltre ciò che coprono le quantità incluse, pagati dal tuo saldo agli stessi prezzi.
Dai a ogni utente la sua
Una chiave, poi un’app con keys.from, con il deploy in una sola chiamata.