원문 캡처 · dbos.dev
원문 캡처 · dbos.dev

DBOS는 PgDog로 Postgres를 샤딩해 내구성 워크플로 처리량을 초당 2만 건에서 100만 건으로 늘렸다고 밝혔다. 이 결과는 16코어·메모리 64GB의 RDS Postgres 서버 50대와 워커 프로세스 2,400개를 사용한 벤치마크에서 나왔다.

벤치마크는 단계가 없는 간단한 워크플로를 사용했다. 각 샤드에 초당 2만 건씩 넣고, 워크플로를 샤드 전체에 균등하게 분산했다. DBOS는 단일 샤드가 처리할 수 있는 지속 처리량을 초당 2만 건으로 설정했다고 설명했다. 벤치마크 코드는 GitHub에서 공개했다.

DBOS는 샤딩한 워크로드가 선형적으로 확장되려면 각 쿼리가 한 샤드에서 처리돼야 한다고 설명했다. 이를 위해 워크플로와 관련 테이블에 shard_key를 두고, 한 워크플로의 정보와 작업을 같은 샤드에 배치했다. 워커는 여러 샤드에서 한꺼번에 작업을 가져오는 대신 샤드별로 순회하며 큐를 확인한다.

초기 테스트에서는 샤드가 약 8~16개, 처리량이 초당 약 20만 건을 넘어서면 특정 샤드가 잠시 느려진 뒤 전체 성능이 무너지고 회복되지 않는 불안정성이 나타났다. DBOS는 작업을 가져오는 쿼리의 잠금 경쟁이 이 부정적 피드백 루프를 일으켰다고 설명했다. 이를 완화하기 위해 각 샤드에 제한된 수의 Postgres 어드바이저리 잠금을 두고, 잠금을 얻지 못한 프로세스는 기다리지 않고 다음 샤드로 이동하도록 했다.

DBOS는 이 방식이 특정 샤드의 과부하를 막아 초당 100만 건까지 안정적으로 확장할 수 있게 했다고 밝혔다. 다만 제시된 벤치마크는 단계가 없는 단순 워크플로를 대상으로 했으며, DBOS는 PgDog 외의 샤딩 엔진에서도 비슷한 결과를 낼 수 있다고 덧붙였다.