본문으로 건너뛰기

솔루션사용자별 백엔드

사용자마다 인스턴스 하나

요청에 담긴 키가 사용자, 테넌트, 에이전트를 각자의 전용 인스턴스로 보내며, 인스턴스는 메모리와 디스크를 유지하고 요청 사이에는 잠듭니다.

키별 인스턴스 알아보기

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

사용자별 상태, 시간마다 나가는 비용

사용자마다 프로세스 하나가 가장 단순한 설계지만, 계속 실행해 두면 사용자가 없는 동안에도 비용이 나갑니다. 여기서는 키마다 인스턴스가 요청 사이에 잠들고, 보관하는 데이터만큼만 냅니다.

256 MiB 인스턴스 10,000개를 계속 실행할 때 메모리에만 드는 한 달 비용(정가 기준)1
$14,600.00
같은 인스턴스가 각각 100 MB를 보관한 채 잠들 때1
$20.00

키로 라우팅하는 방법

keys.from을 헤더나 경로의 한 부분으로 지정하세요. 새 키의 첫 요청이 인스턴스를 만들고, 이후 요청은 모두 메모리와 디스크가 그대로인 같은 인스턴스로 갑니다. 키가 없는 요청은 앱의 공유 인스턴스를 씁니다.

앱과 인스턴스: 키를 쓰면 각 인스턴스가 키 하나에 속하며, 그 키의 요청에 깨어나고 요청이 끝나면 잠듭니다.

사용자별 인스턴스에 제공되는 기능

  • 구성 선택: 공유 인스턴스, 또는 사용자 키마다 하나.

  • 요청에서 꺼내는 키: 헤더나 경로에 담기며, 첫 요청이 인스턴스를 만듭니다.

  • 사용자별 상태: 잠들어도 유지되는 메모리, 전용 디스크, 볼륨.

  • 비용: 잠든 동안 CPU 비용은 없고, 보관하는 데이터만.

  • 수명은 직접 지정: 정한 시간만큼 잠들어 있으면 삭제되고, 키로 다시 만들어집니다.

  • 키별 사용량: 각 인스턴스가 라벨로 지닌 키로 집계합니다.

문서 읽기

이해를 돕기 위한 예시 그림

약속이 아닌 측정값

다른 작업이 없는 베어메탈에서 잰 중앙값입니다. 최선의 경우이며, 그렇다고 밝힙니다. 키별 인스턴스는 이 수치를 측정한 샌드박스와 같은 종류입니다. 측정 방법

잠든 인스턴스를 깨우는 시간2
3.5 ms
깨운 호출의 전송부터 응답까지2
6.7 ms
메모리와 프로세스를 그대로 둔 채 재우는 시간2
2.3 ms

서비스가 열리면 직접 만든 키에서도 확인할 수 있습니다. 인스턴스를 깨운 요청의 로그 줄에 깨우는 데 걸린 시간이 나옵니다.

셸
glac cube logs notes -f
# one line a request; one that woke an instance says how long it took

사용하는 제품

한 달 비용 계산

사용자 1만 명이 각자 전용 인스턴스를 쓸 때를 정가로 계산했습니다. 직접 계산해 보기

사용 조건

  • 사용자 10,000명, 각자 전용 인스턴스, 메모리 256 MiB 사용.
  • 사용자마다 30일 동안 하루 300건씩 무작위 시각에 요청하며, 요청마다 CPU 20 ms를 쓰고 5 KB를 응답합니다.
  • 앱은 인스턴스가 멈추고 1초 뒤에 실제로 잠들도록 설정했습니다(scale.suspend_after_ms 1000). 이처럼 드문 트래픽에 맞는 설정입니다. 사용자의 요청은 몇 분 간격으로 오는데, 그 사이 인스턴스를 메모리에 일시 정지해 두면 그동안 내내 그 메모리가 과금되기 때문입니다. 그래서 각 인스턴스는 응답하는 동안과 그 뒤 1초 동안 깨어 있고, 1초 더 일시 정지되었다가, 메모리를 저장하고 잠들어 약 100 MB를 보관합니다.
  • 그 대가는 이렇습니다. 잠든 인스턴스에 닿은 요청은 6.7 ms 만에 응답을 받지만, 일시 정지된 인스턴스라면 0.43~1.72 ms 만에 응답을 받습니다. 그리고 잠들고 깨어날 때마다 CPU 25.6 ms가 들며, 이는 그달의 CPU에 포함됩니다.

정가로 계산한 한 달

$192.40

  • CPU42.95억 CPU-밀리초 × $0.01 / 100만$42.95
  • 메모리12,581 GiB-시간 × $0.008$100.65
  • 요청9000만건 × $0.30 / 100만 건$27.00
  • 송신 트래픽450 GB × $0.004$1.80
  • 잠든 동안 보관1,000 GB-월 × $0.02$20.00

유료 요금제라면 이 한 달은 $189.60입니다. 기본료 $5에, 포함 사용량을 넘는 $184.60를 같은 가격으로 잔액에서 냅니다.

사용자마다 전용 인스턴스를

키를 받고, keys.from을 지정한 앱을 호출 한 번으로 배포합니다.

큐브Python SDK 문서