SoluçõesBack-ends por usuário
Uma instância para cada usuário
Uma chave na requisição encaminha cada usuário, tenant ou agente para uma instância própria, que mantém a memória e o disco e dorme entre as requisições.
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 codeEstado por usuário, pago hora após hora
Um processo para cada usuário é o design mais simples, e, mantido rodando, ele é pago enquanto o usuário está ausente. Aqui, a instância de cada chave dorme entre as requisições, e só se paga pelo que ela guarda.
Como funciona o roteamento por chave
Defina keys.from como um cabeçalho ou um segmento do caminho. A primeira requisição de uma chave nova cria a instância dela; todas as seguintes chegam à mesma instância, com a memória e o disco. Requisições sem chave compartilham as instâncias da aplicação.
O que a instância de cada usuário recebe
Escolha o formato: instâncias compartilhadas ou uma para a chave de cada usuário.
Uma chave vinda da requisição, em um cabeçalho ou no caminho; a primeira cria a instância.
Estado por usuário: memória mantida durante o sono, disco próprio e um volume.
Quanto custa: dormindo, nada de CPU, só o que guarda.
Um tempo de vida que você escolhe: excluída depois de dormir esse tempo, criada de novo pela chave dela.
Uso por chave, a partir da chave que cada instância leva como rótulo.
Prévias ilustrativas
Medido, não prometido
Medianas em bare metal sem mais nada rodando: o melhor caso, e dizemos isso. A instância de uma chave é do mesmo tipo que um sandbox, onde estes números foram medidos. Como medimos
- para acordar uma instância adormecida2
- 3.5 ms
- para a chamada que acordou a máquina, do envio à resposta2
- 6.7 ms
- para colocar a máquina para dormir, com a memória e os processos2
- 2.3 ms
Veja isso para as suas próprias chaves quando o serviço abrir: a linha do log de uma requisição que acordou uma instância diz quanto tempo levou para acordar.
glac cube logs notes -f
# one line a request; one that woke an instance says how long it tookOs produtos usados
- CuboQualquer imagem de contêiner como uma aplicação que dorme entre as requisiçõesA aplicação, com chaves: uma instância para cada usuário, tenant ou agente.
- VolumeOs discos do Cubo, que sobrevivem à sua instânciaDiscos para o que precisa sobreviver à instância de um usuário.
- SandboxUm computador próprio para cada agenteUm agente para cada usuário, controlado pela API.
Um mês na ponta do lápis
Dez mil usuários, cada um com uma instância própria, a preços de tabela. Faça a sua estimativa
O cenário
- 10 000 usuários, cada um com uma instância própria, 256 MiB em uso.
- Cada usuário faz 300 requisições por dia durante 30 dias, com 20 ms de CPU e 5 KB de resposta cada, em horários aleatórios.
- A aplicação configurada para dormir de verdade um segundo depois que uma instância para (scale.suspend_after_ms 1000), o ajuste indicado para um tráfego tão esparso: as requisições de um usuário chegam com minutos de intervalo, e uma instância mantida pausada na memória entre elas é cobrada por essa memória o tempo todo. Assim, cada uma fica acordada enquanto responde e por 1 s depois, pausada por mais 1 s, e então dorme com a memória salva, guardando cerca de 100 MB.
- O que isso custa: uma requisição que encontra a instância dormindo é respondida em 6.7 ms, contra 0.43 a 1.72 ms quando a encontra pausada; e cada vez que ela dorme e acorda consome 25.6 ms de CPU, contados na CPU do mês.
Um mês a preços de tabela
- CPU4.3 bilhões × $0.01 por milhão de ms de CPU$42.95
- Memória12 581 GiB-h × $0.008$100.65
- Requisições90 milhões × $0.30 por milhão$27.00
- Tráfego de saída450 GB × $0.004$1.80
- Guardado enquanto dorme1 000 GB-meses × $0.02$20.00
No Pago, este mês sai por $189.60: a mensalidade de $5 e $184.60 além do que as franquias cobrem, debitados do seu saldo aos mesmos preços.
Dê a cada usuário a própria instância
Uma chave e, depois, uma aplicação com keys.from, publicada com uma chamada.