셀 기반 아키텍처(Cell-Based Architecture)는 서비스를 독립적이고 자기완결적인 "셀(cell)"로 분할해 장애 반경(blast radius)을 제한하고 확장성을 높이는 패턴이다. Amazon, Netflix 등 대규모 클라우드 시스템에서 사용된다.
셀(Cell)이란?
셀 = 독립적으로 동작하는 시스템 단위
- 자체 컴퓨팅, 스토리지, 네트워크
- 다른 셀에 의존하지 않음
- 동일한 기능을 여러 셀이 수행
vs 가용 영역(AZ):
AZ: 물리 인프라 격리
셀: 논리적 서비스 격리 (하나의 AZ에 여러 셀 가능)
구조
라우터 (사용자를 셀로 라우팅)
┌────┬────┬────┐
▼ ▼ ▼ ▼
셀1 셀2 셀3 셀4
[앱+DB] [앱+DB] [앱+DB] [앱+DB]
사용자 사용자 사용자 사용자
1-1000 1001- 2001- 3001-
2000 3000 4000
셀 크기 결정:
너무 크면: 장애 범위 큼
너무 작으면: 관리 오버헤드
일반적: 수천~수만 사용자/셀
라우팅 전략
typescript
// 사용자를 셀로 라우팅
function routeToCell(userId: string): string {
// 일관된 해싱으로 셀 결정
const hash = consistentHash(userId, NUM_CELLS);
return `cell-${hash}`;
}
// 셀 라우터 (API Gateway 레벨)
app.use('/api/*', async (req, res) => {
const userId = req.headers['x-user-id'];
const cellId = routeToCell(userId);
const cellEndpoint = await cellRegistry.get(cellId);
proxy.forward(req, res, cellEndpoint);
});
장애 격리
셀 1 장애:
✅ 셀 1 사용자만 영향
✅ 셀 2, 3, 4는 정상
✅ 전체 서비스 75%는 정상 운영
vs 전통적 MSA:
공유 DB 장애 → 모든 사용자 영향
셀 추가로 수평 확장
트래픽 증가:
현재 4셀, 셀당 1000 TPS 처리
목표: 2배 증가
해결: 셀 8개로 확장
사용자 재분배 (일부 사용자 셀 이동)
새 셀에 트래픽 점진적 이동
관련 개념