RozwiązaniaBackend dla każdego użytkownika
Instancja dla każdego użytkownika
Klucz w żądaniu kieruje każdego użytkownika, tenanta lub agenta do jego własnej instancji, która zachowuje pamięć i dysk, a między żądaniami zasypia.
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 codeZa stan każdego użytkownika płacisz co godzinę
Osobny proces dla każdego użytkownika to najprostsza architektura, ale gdy działa bez przerwy, płacisz za niego także wtedy, gdy użytkownika nie ma. Tutaj instancja każdego klucza zasypia między żądaniami, a Ty płacisz tylko za to, co przechowuje.
Jak klucz kieruje ruchem
Ustaw keys.from na nagłówek lub segment ścieżki. Pierwsze żądanie z nowym kluczem tworzy jego instancję; każde kolejne trafia do tej samej instancji, z tą samą pamięcią i dyskiem. Żądania bez klucza dzielą instancje aplikacji.
Co dostaje instancja każdego użytkownika
Wybierz układ: wspólne instancje albo osobna dla klucza każdego użytkownika.
Klucz z żądania, w nagłówku lub ścieżce; pierwsze żądanie tworzy jego instancję.
Stan dla każdego użytkownika: pamięć zachowana w uśpieniu, własny dysk i wolumin.
Ile to kosztuje: w uśpieniu nie płacisz za CPU, tylko za to, co przechowuje.
Czas życia do wyboru: usuwana po wybranym czasie uśpienia, tworzona ponownie przez swój klucz.
Zużycie według klucza, z klucza, który każda instancja nosi jako etykietę.
Ilustracje poglądowe
Zmierzone, nie obiecane
Mediany na serwerze bare metal, na którym nic innego nie działało: najlepszy przypadek, i mówimy to wprost. Instancja klucza jest tego samego rodzaju co piaskownica, na której to zmierzono. Jak mierzymy
- na wybudzenie uśpionej instancji2
- 3.5 ms
- na wywołanie, które ją wybudziło, od wysłania do odpowiedzi2
- 6.7 ms
- na uśpienie z zachowaniem pamięci i procesów2
- 2.3 ms
Po otwarciu usługi zobaczysz to dla własnych kluczy: wiersz logu dla żądania, które wybudziło instancję, podaje czas wybudzenia.
glac cube logs notes -f
# one line a request; one that woke an instance says how long it tookProdukty, z których korzysta
- KostkaDowolny obraz kontenera jako aplikacja, która śpi między żądaniamiAplikacja z kluczami: jedna instancja dla każdego użytkownika, tenanta lub agenta.
- WoluminDyski Kostki, które przeżywają swoją instancjęDyski na to, co musi przetrwać instancję użytkownika.
- PiaskownicaOsobny komputer dla każdego agentaAgent dla każdego użytkownika, sterowany przez API.
Miesiąc w liczbach
Dziesięć tysięcy użytkowników, każdy z własną instancją, po cenach katalogowych. Oszacuj własny koszt
Zastosowanie
- 10 000 użytkowników, każdy z własną instancją, 256 MiB w użyciu.
- Każdy użytkownik wysyła 300 żądań dziennie przez 30 dni, każde po 20 ms CPU i 5 KB odpowiedzi, w losowych momentach.
- Aplikacja ustawiona tak, by instancja zasypiała na dobre sekundę po zatrzymaniu (scale.suspend_after_ms 1000) – to ustawienie właściwe dla tak rzadkiego ruchu: żądania jednego użytkownika dzielą minuty, a instancja wstrzymana między nimi w pamięci jest przez cały ten czas rozliczana za tę pamięć. Każda instancja jest więc aktywna, gdy odpowiada, i jeszcze przez 1 s, potem przez kolejne 1 s wstrzymana, a następnie śpi z zapisaną pamięcią i przechowuje około 100 MB.
- Koszt takiego ustawienia: żądanie, które zastaje swoją instancję uśpioną, dostaje odpowiedź po 6.7 ms, a gdy instancja jest tylko wstrzymana – po 0.43–1.72 ms; każde uśpienie i wybudzenie to 25.6 ms CPU, wliczane do CPU za cały miesiąc.
Miesiąc po cenach katalogowych
- CPU4.3 miliarda ms CPU × $0.01 / mln$42.95
- Pamięć12 581 GiB-h × $0.008$100.65
- Żądania90 milionów × $0.30 / mln$27.00
- Ruch wychodzący450 GB × $0.004$1.80
- Przechowywane w uśpieniu1 000 GB-miesiąca × $0.02$20.00
W planie Płatnym ten miesiąc kosztuje $189.60: opłata $5 oraz $184.60 ponad to, co pokrywają pule, z Twojego salda po tych samych cenach.
Daj każdemu użytkownikowi własną instancję
Klucz, a potem aplikacja z keys.from, wdrożona jednym wywołaniem.