Перейти к содержимому

РешенияБэкенд для каждого пользователя

Отдельный экземпляр для каждого пользователя

Ключ в запросе направляет каждого пользователя, арендатора или агента в собственный экземпляр, который сохраняет память и диск и спит между запросами.

Подробнее об экземплярах по ключу

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

Состояние на пользователя — и плата за каждый час

Процесс на каждого пользователя — самая простая схема, но если держать его запущенным, вы платите и тогда, когда пользователя нет. Здесь экземпляр каждого ключа спит между запросами, и вы платите только за то, что он хранит.

в месяц только за память 10 000 постоянно работающих экземпляров по 256 MiB, по прайс-листу1
$14,600.00
за те же экземпляры во сне, каждый из которых хранит 100 MB1
$20.00

Как работает маршрутизация по ключу

Укажите в keys.from заголовок или сегмент пути. Первый запрос с новым ключом создаёт его экземпляр; все следующие попадают в тот же экземпляр, с его памятью и диском. Запросы без ключа делят общие экземпляры приложения.

Приложение и его экземпляры: с ключами каждый экземпляр принадлежит одному ключу, просыпается на его запросы и засыпает после них.

Что получает экземпляр каждого пользователя

  • Выберите схему: общие экземпляры или отдельный на ключ каждого пользователя.

  • Ключ из запроса — в заголовке или пути; первый запрос создаёт экземпляр.

  • Состояние на каждого пользователя: память, которая сохраняется во сне, собственный диск и том.

  • Сколько это стоит: во сне — ничего за 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

Используемые продукты

Расчёт на месяц

Десять тысяч пользователей, у каждого собственный экземпляр, по прайс-листу. Рассчитать свой вариант

Нагрузка

  • 10 000 пользователей, у каждого собственный экземпляр, используется 256 MiB.
  • Каждый пользователь делает 300 запросов в день в течение 30 дней, каждый на 20 мс CPU и с ответом 5 KB, в случайное время.
  • Приложение настроено так, чтобы экземпляр засыпал по-настоящему через секунду после остановки (scale.suspend_after_ms 1000): это настройка для такого редкого трафика. Запросы одного пользователя приходят с интервалом в несколько минут, а экземпляр, приостановленный в памяти между ними, всё это время оплачивается за эту память. Поэтому каждый экземпляр активен, пока отвечает, и ещё 1 с после, затем ещё 1 с приостановлен, а потом спит с сохранённой памятью и хранит около 100 MB.
  • Чего это стоит: запрос, который застаёт свой экземпляр спящим, получает ответ за 6.7 мс, а приостановленный экземпляр ответил бы за 0.43–1.72 мс; кроме того, каждое засыпание и пробуждение занимает 25.6 мс CPU, и это учтено в CPU за месяц.

Месяц по прайс-листу

$192.40

  • CPU4.3 миллиарда CPU-мс × $0.01 / млн$42.95
  • Память12 581 GiB-ч × $0.008$100.65
  • Запросы90 миллионов × $0.30 / млн$27.00
  • Исходящий трафик450 GB × $0.004$1.80
  • Хранится во сне1 000 GB-месяца × $0.02$20.00

На тарифе «Платный» этот месяц обойдётся в $189.60: плата $5 и $184.60 сверх включённых объёмов — с баланса по тем же ценам.

Дайте каждому пользователю свой экземпляр

Ключ, а затем приложение с keys.from, развёрнутое одним вызовом.

КубSDK для Python