kisenon

개념

브랜치, 엔드포인트, 0으로 스케일 — Kisenon 뒤에 있는 모델.

Kisenon은 Neon이 하는 방식으로 스토리지컴퓨트를 분리합니다. 그 분리를 이해하면 나머지 모든 것이 자연스럽게 따라옵니다.

리소스 모델

모든 것은 조직 아래에 중첩됩니다:

organization ── the unit of membership + billing
└── project ── isolation boundary: one storage volume
    └── branch ── a copy-on-write LSN pointer
        └── endpoint ── the ephemeral Postgres compute

조직은 프로젝트, 멤버, 그리고 청구를 소유합니다. 모든 프로젝트는 정확히 하나의 조직에 속합니다. 프로젝트는 격리 경계입니다 — 하나의 스토리지 볼륨, 자체 브랜치와 엔드포인트. 브랜치는 그 스토리지의 로그 시퀀스 번호를 가리키고, 엔드포인트는 그것을 서비스하는 컴퓨트입니다. 멤버십과 역할은 조직을 참조하세요.

스토리지

스토리지는 내구성이 있고, 복제되며, 프로젝트의 모든 브랜치에 걸쳐 공유됩니다. 쓰기는 safekeeper(Paxos 정족수)를 거쳐 pageserver에 안착하며, pageserver는 요청 시 과거 읽기를 서비스합니다.

스토리지 용량을 직접 관리하지 않습니다. 프로젝트별 단일 숫자로 보게 되며, 실제로 영속화한 바이트와 시간 여행을 위해 보존된 WAL에 대해서만 비용을 지불합니다.

브랜치

브랜치는 스토리지 내 로그 시퀀스 번호(LSN)를 가리키는 포인터입니다. 브랜치를 생성하는 것은 O(1) 데이터베이스 행 삽입이며 데이터를 복사하지 않습니다. 브랜치의 읽기는 브랜치가 분기할 때까지 부모로 떨어지며, 분기하는 시점에는 델타만 저장됩니다.

이것이 브랜치를 다음과 같이 만듭니다:

  • 델타 아래로는 무료. 작은 브랜치 10개가 있는 100 GB 프로젝트는 여전히 ~100 GB로 청구됩니다.
  • 빠름. 브랜치를 생성하는 것은 1초 미만입니다.
  • 일회용. 브랜치에서 파괴적인 마이그레이션을 실행하고 브랜치를 버리면 부모는 손대지 않은 채 남습니다.

엔드포인트

엔드포인트는 클라이언트와 통신하는 Postgres 프로세스입니다. 매 순간 정확히 하나의 브랜치와 짝을 이룹니다.

엔드포인트는 임시 컴퓨트입니다. 이들은:

  • 첫 패킷에 깨어납니다(일반적으로 클라이언트의 연결 타임아웃보다 빠릅니다).
  • 클라이언트 활동이 5분간 없으면 일시 중지됩니다.
  • 생성하고 파괴하는 비용이 저렴합니다 — 브랜치와 동일한 비용 모델입니다.

같은 브랜치에 여러 엔드포인트를 둘 수 있습니다(예: 하나는 앱용, 하나는 분석용) — 이들은 기저 스토리지를 공유하되 로컬 캐시는 독립적으로 유지됩니다.

0으로 스케일

유휴 엔드포인트는 컴퓨트 비용이 0입니다. 스토리지만 지불합니다.

구체적으로: 하루에 한 시간 사용되는 엔드포인트 하나가 있는 프로젝트는 항상 켜져 있는 동등물의 대략 1/24 비용이 듭니다. 스토리지 비용은 어느 쪽이든 같습니다.

이것이 Kisenon이 이름을 따온 원조 비활성 기체 아이디어입니다 — Xenon-54를 뜻하는 (sen, "은둔자").

호환성

Kisenon은 바닐라 Postgres 와이어 프로토콜을 구사합니다. Postgres와 통신하는 것이라면 무엇이든 Kisenon과 통신합니다: psql, pg_dump, pgbench, 모든 언어의 드라이버, Drizzle, Prisma, SQLAlchemy, 일반적인 ORM들.

Kisenon 고유의 SQL은 없습니다. 브랜치와 엔드포인트는 컨트롤 플레인 API 또는 CLI를 통해 관리됩니다 — SQL을 통해서는 절대 아닙니다.