다섯 살도 알 수 있게 · SRE
벌크헤드가 뭐예요?
벌크헤드 패턴을 구역마다 자기 몫의 자원만 쓰게 나눈 놀이공원 이야기로 풀어봤어요.
기구 하나에서 생긴 문제가 옆 기구로 번져 공원 전체가 멈춰요.고장이 담장 없이 그대로 옆으로, 또 옆으로 넘어가요.
모든 기구가 같은 자원을 같이 쓰면, 하나가 다 써버려요.발전기도 직원도 하나뿐이라 전부 같이 걸려요.
구역을 나누면, 한 구역이 문제여도 다른 구역은 멀쩡해요.배의 방수 격벽과 같아요.
구역을 나눠요담을 세워요
구역마다 자기 몫만인원·전력 따로요
한 구역만 영향받아요다른 구역은 그대로
중요한 구역엔 더 넉넉히핵심 구역부터 챙겨요
한 구역만 자원을 다 써도, 나머지 세 구역은 정상이에요.지도로 보면 어느 구역이 문제인지 바로 보여요.
너무 잘게 나누면 관리가 번거롭고 자원이 낭비돼요.적당한 크기로 나누는 게 중요해요.
한 줄로
벌크헤드 = 공원을 구역으로 나눠 구역마다 자기 몫의 자원만 쓰게 하는 일. 한 구역이 문제여도 다른 구역은 멀쩡해요.
배의 방수 격벽에서 이름을 딴 패턴이에요. 스레드 풀, 커넥션 풀, 서버 인스턴스 같은 자원을 구역(테넌트, 서비스)별로 나눠 하나의 과부하가 전체로 캐스케이딩 실패하는 걸 막아요. 너무 잘게 나누면 관리 비용과 자원 낭비가 커져요.
어른들은 이렇게 불러요
- 벌크헤드 패턴
Bulkhead pattern - 공원을 구역으로 나누는 설계. 한 구역의 문제가 다른 구역으로 안 넘어가게 해요.
- 격리
Isolation - 구역 사이를 담으로 막는 것. 벌크헤드가 하는 일의 핵심이에요.
- 자원 풀
Resource pool - 발전기나 직원처럼 같이 쓰는 몫. 나누지 않으면 하나가 다 써버려요.
- 스레드 풀 격리
Thread pool isolation - 일꾼(스레드)을 구역별로 따로 두는 것. 벌크헤드의 가장 흔한 적용 방법이에요.
- 테넌트 격리
Tenant isolation - 손님 그룹(테넌트)별로 자원을 나누는 것. 한 테넌트가 몰려도 다른 테넌트는 안전해요.
- 캐스케이딩 실패
Cascading failure - 기구 하나의 문제가 옆으로, 또 옆으로 번지는 것. 벌크헤드가 막으려는 바로 그 일이에요.
- 서킷 브레이커
Circuit breaker - 고장난 곳에 아예 안 보내는 빨간 버튼. 구역을 나누는 벌크헤드와 짝을 이뤄 같이 써요. → 고장나면 누르는 빨간 버튼
- 우아한 저하
Graceful degradation - 일부만 고장나도 나머지는 그대로 여는 것. 벌크헤드로 구역을 나눠 두면 이게 더 쉬워져요.
다음 이야기
고장나면 누르는 빨간 버튼 →