CapyDB Knight/Valkyrie

K/V

데이터 바로 옆에서 자체 셀로 동작하는 키-값 저장소이자 속도 제한기이며, 데이터베이스가 없어도 문제없이 동작합니다.

01

무엇인가

프로젝트마다 하나씩 제공되는 관리형 키-값 저장소로, 자체 셀에서 동작합니다. 프로세스도, 메모리 상한도, 스토리지도 전용입니다. Valkey 기반이며 HTTPS 위의 Upstash REST 프로토콜과 와이어 상의 RESP라는 두 프로토콜을 사용하므로, 이미 보유한 클라이언트가 수정 없이 동작합니다.

테이블보다 카운터가 어울리는 일을 위한 것입니다. 속도 제한, 세션, 큐, 기능 플래그, 수명이 짧은 캐시가 여기에 해당합니다. Postgres로도 모두 할 수 있지만, 이만큼 저렴하게는 되지 않습니다.

02

속도 제한

이것이 통합의 전부입니다. 환경 변수 두 개와, 프레임워크가 이미 기대하는 제한기뿐입니다. 자격 증명의 출처를 빼면 CapyDB에 고유한 것은 없습니다.

import { Ratelimit } from '@upstash/ratelimit'
import { Redis } from '@upstash/redis'

const ratelimit = new Ratelimit({
  redis: new Redis({
    url: process.env.CAPYDB_KV_REST_URL!,
    token: process.env.CAPYDB_KV_REST_TOKEN!,
  }),
  limiter: Ratelimit.slidingWindow(10, '10 s'),
})

export async function POST(request: Request) {
  const { success } = await ratelimit.limit(userIdFrom(request))
  if (!success) return new Response('Too many requests', { status: 429 })
  // ...
}

03

단독으로

K/V는 데이터베이스에 덧붙인 기능이 아니라 그 자체로 완결된 기능입니다. 저장소를 추가하고 옆의 데이터베이스는 한 번도 열지 않아도 됩니다. 설계할 스키마도, 연결할 접속 문자열도, 실행할 마이그레이션도 없습니다. 속도 제한기만 필요한 애플리케이션은 많으며, 그것도 CapyDB를 온전히 쓰는 방식입니다.

그래도 저장소는 프로젝트에 속합니다. CapyDB가 과금과 접근 권한, 리전을 구분하는 단위가 프로젝트이기 때문입니다. 프로젝트에는 데이터베이스 셀이 남지만 무시해도 됩니다. 쓰지 않는 셀은 스스로 일시 중지되며 아무것도 소비하지 않습니다.

04

격리

K/V 저장소는 셀이며, 데이터베이스가 받는 것과 같은 런타임 기본 단위입니다. 공유 서버 안의 네임스페이스를 달리 표현한 말이 아닙니다.

  • -전용 프로세스를 가지며 메모리 상한과 CPU 몫은 커널이 강제합니다. 옆의 사용자가 여러분의 메모리를 소진할 수 없습니다.
  • -스토리지도, 자격 증명도, 소켓도 전용입니다. 공유 인스턴스도 없고 충돌할 공통 키 공간도 없습니다.
  • -인증된 엔드포인트로만 도달할 수 있습니다. 저장소 자체는 공개 인터넷으로도, 여러분의 데이터베이스로도 경로를 갖지 않습니다.

05

호환성

둘 다 표준인 두 프로토콜을 지원하므로, 이전은 URL과 토큰을 바꾸는 일로 끝납니다.

  • -Upstash REST 프로토콜. 파이프라이닝, 트랜잭션, base64 인코딩을 포함하며 @upstash/redis와 @upstash/ratelimit이 기본 설정 그대로 동작합니다.
  • -RESP. ioredis, node-redis, redis-py, go-redis, redis-cli 같은 일반적인 Redis® OSS 클라이언트를 위한 것이며 블로킹 명령과 pub/sub도 포함합니다.
  • -Valkey 기반입니다. Redis는 Redis Ltd.의 등록 상표입니다. CapyDB는 Redis Ltd.와 제휴 관계가 없으며 그로부터 보증을 받지도 않았습니다.

06

용량

K/V는 모든 요금제에 그 요금제의 크기로 포함됩니다. 별도의 K/V 구독도, 명령당 과금도 없습니다. 아래 수치가 저장소에 담을 수 있는 양입니다.

  • -CapyDB Vibe: 32 MB
  • -CapyDB Ship: 128 MB
  • -CapyDB Business: 512 MB

07

지속성에 관한 솔직한 이야기

K/V 저장소는 주기적 스냅숏을 유지하므로 재시작은 견디지만 데이터베이스는 아닙니다. 백업도, 특정 시점 복구도, 복제본도 없습니다. 저장소가 가득 차면 제거 정책이 키를 버립니다.

빠르고 버려도 되는 상태로 다루십시오. 카운터, 세션, 캐시, 잠금이 여기에 해당합니다. 잃으면 곤란한 것은 백업과 특정 시점 복구를 갖춘 옆의 데이터베이스 셀에 두십시오.

08

시작하기

대시보드에서 프로젝트의 K/V 탭을 열어 저장소를 추가하십시오. 몇 초 만에 프로비저닝되며 엔드포인트와 토큰을 한 번만 알려 줍니다. 토큰은 해시로만 저장되므로 그때 복사해 두십시오.