시스템 아키텍트시스템 아키텍트

마이크로서비스 생태계에서 서비스 경계를 초월하는 순환 대기 종속성을 실시간으로 식별하고, 비즈니스 중요도 휴리스틱에 따라 희생자 선택을 자동으로 조정하며, 네트워크 분할 동안 중앙 집중식 조정 없이 생존성을 보장하는 분산 교착 상태 탐지 및 해결 기초를 선도하시오.

Hintsage AI 어시스턴트로 면접 통과

질문에 대한 답변

질문의 역사

분산 교착 상태 탐지는 2010년대 중반 모놀리식 아키텍처에서 세분화된 마이크로서비스로의 전환 중 중요한 문제로 떠올랐습니다. 초기 분산 시스템은 시간 초과 기반의 취소나 중앙 집중식 잠금 관리기에 의존했지만, 고가용성과 분할 허용을 요구하는 클라우드 네이티브 환경에서는 적절하지 않았습니다. Chandy-Misra-Haas 알고리즘은 분산 그래프에서 엣지 추적의 이론적 기초를 확립했지만, 실용적인 구현은 잡음이 많은 네트워크 조건과 이질적인 서비스 스택에 어려움을 겪었습니다. 현대 아키텍처는 중앙 조정 없이 작동하는 자율 탐지 메커니즘을 요구합니다.

문제

마이크로서비스 생태계에서 트랜잭션은 여러 서비스 및 지속성 기술에 걸쳐 자주 발생하여, 서비스 A가 PostgreSQL에서 잠금을 보유하면서 서비스 B를 기다리는 분산 사이클을 생성하여, 서비스 B는 서비스 A를 기다리기 위해 MongoDB 잠금을 보유합니다. 중앙 집중식 교착 상태 감지기는 단일 실패 지점을 도입하고 네트워크 핫스팟을 만들어 마이크로서비스의 자율성 원칙을 위반합니다. 시간 초과 기반 접근법은 높은 지연 조건에서 잘못된 긍정 반응이 발생하며 느린 작업과 진정한 교착 상태를 구별할 수 없습니다. 기본적인 도전 과제는 노드가 실패하거나 예고 없이 도달 불가능해지는 동적 분할 그래프에서 사이클을 탐지하는 것입니다.

해결책

이 아키텍처는 Kubernetes를 통해 배포된 Envoy 사이드카 내에 내장된 Chandy-Misra-Haas 분산 엣지 추적 알고리즘을 사용합니다. 각 사이드카는 로컬 대기 그래프를 유지하고, 사이클을 탐지하기 위해 동기식 gRPC 호출 체인에 따라 Lamport 타임스탬프가 포함된 프로브 메시지를 전파합니다. Redis 클러스터는 프로브 손실을 처리하기 위해 TTL 만료가 있는 일시적인 대기 관계를 저장하며, Kafka는 비즈니스 우선 순위 점수에 기반하여 희생자 선택을 위한 해결 명령을 브로드캐스트합니다. 시스템은 제어 평면 분할 중 프로브 전파를 보장하기 위해 바람잡이 프로토콜을 활용하여 생존성을 보장합니다.

실제 상황

문제 설명

고빈도 거래 플랫폼의 블랙 프라이데이 이벤트 동안, 결제 조정 서비스는 외환 환율을 잠금하면서 연쇄 실패를 경험했습니다. Java 기반 FX 서비스는 Go 기반 컴플라이언스 검증기와 동기화되어 순환 의존성을 만들어 15,000개의 동시 트랜잭션을 18분 동안 중단시켰습니다. 수익 손실은 $2M을 초과했으며, 서비스 간의 동기식 REST 호출이 교착 상태에 빠지며 AWS 인프라 전반에 걸쳐 연쇄 회로 차단기 실패를 유발했습니다. 이 사건은 데이터베이스 수준의 시간 초과가 이질적인 기술 스택을 넘는 서비스 간 사이클을 감지할 수 없다는 것을 드러냈습니다.

고려된 다양한 솔루션

우리는 처음에 서비스 간 모든 리소스 잠금을 추적하는 글로벌 트랜잭션 조정기로 중앙 집중식 Oracle RAC 데이터베이스를 배포하는 것을 고려했습니다. 이 접근법은 표준 그래프 알고리즘을 사용한 간단한 사이클 탐지를 제공하고 즉각적인 충돌 해결을 가능하게 했습니다. 그러나 이는 모든 결제를 전세계적으로 동결시키는 치명적인 단일 실패 지점을 도입하게 되었고, 교차 지역 라운드 트립으로 인해 트랜잭션당 200ms의 지연 오버헤드를 추가했습니다. 네트워크 분할 동안 조정기가 사용할 수 없게 되면서 글로벌 차원에서 모든 결제 처리가 중단되었습니다.

팀은 공격적인 시간 초과 전략과 지수적 백오프를 평가하여, 5초를 초과하는 모든 트랜잭션을 중단하고 지터를 가지고 재시도했습니다. 이는 조정 오버헤드를 제거하고 Istio 가상 서비스 구성 외엔 인프라 변경을 요구하지 않았습니다. 불행히도, 이는 40%의 잘못된 긍정적인 중단을 초래하는 대규모 스래싱을 발생시켰습니다. 합법적인 느린 쿼리가 교착 상태로 잘못 인식되었고, 재시도 폭풍이 서비스 메쉬를 압도하여 원래의 교착 상태보다 더 심한 혼잡을 초래했습니다, 이는 지연 SLA를 위반하게 되었습니다.

우리는 애플리케이션 코드를 수정하지 않고 서비스 메쉬에 프로브 논리를 주입하기 위해 Envoy WASM 필터를 사용하는 분산 엣지 추적 메커니즘을 분석했습니다. 각 사이드카는 로컬 Redis 스트림으로 대기 엣지를 게시하고 30초 TTL을 유지하며, 백그라운드 에이전트는 Chandy-Misra-Haas 프로브를 사용하여 사이클을 확인했습니다. 희생자 선택은 비즈니스 중요도 점수를 쿼리하여 고수익 트랜잭션을 우선시하며, 저우선 대량 작업이 먼저 중단되도록 합니다. 이 아키텍처는 완전한 AWS 지역 재해를 견디면서 100ms 미만의 탐지 지연 시간을 약속했습니다.

선택된 솔루션과 그 이유

우리는 엣지 추적 접근법을 선택했는데, 이는 서비스 자율성을 유지하고 중앙 집중식 조정의 가용성 위험을 없애주었습니다. 이 솔루션은 비싼 메인프레임 업그레이드를 요구하지 않고 서비스 인스턴스 수에 따라 수평으로 확장할 수 있었으며, WASM 필터는 코드 변경 없이 JavaGo 마이크로서비스를 모두 지원하게 됩니다. 탐지를 인프라 계층에 내장함으로써 우리는 교착 상태 해결을 비즈니스 논리 진화와 분리하여, 탐지 기능의 독립적인 확장을 가능하게 했습니다.

결과

배포 후, 교착 상태로 인한 중단은 6개월 운영 동안 제로로 감소했으며, 두 번의 주요 판매 이벤트도 포함했습니다. 탐지 지연은 20배의 트래픽 급증 중에도 p99 기준으로 85ms로 안정적으로 유지되었으며, 자동 해결은 시뮬레이션된 지역 실패 동안 99.98%의 고우선 순위 트랜잭션을 보존했습니다. 개발자 생산성은 팀이 맞춤형 시간 초과 논리를 제거함에 따라 향상되었고, 사건 응답 시간이 몇 시간에서 자동 초단위로 단축되어 연간 약 $5M의 수익 손실을 방지했습니다.

후보자들이 자주 놓치는 것

어떻게 진정한 분산 교착 상태와 네트워크 지연으로 인한 잘못된 긍정 반응을 구별하나요?

후보자들은 종종 대기 종속성의 인과 순서를 설정하기 위해 프로브 메시지에 벡터 시계나 Lamport 타임스탬프의 필요성을 간과합니다. 논리 타임스탬프가 없으면, 지연된 프로브가 트랜잭션이 잠금을 해제한 이후에 도착할 수 있어 사이클을 잘못되게 나타내고 불필요한 중단을 유발할 수 있습니다. 이 솔루션은 프로브에 TTL 카운터를 구현하고 교착 상태를 선언하기 전에 역경로 확인을 요구하여 일시적인 네트워크 지연이 잘못된 희생자 선택을 유발하지 않도록 해야 합니다.

왜 데이터베이스 네이티브 교착 상태 탐지가 다중 리소스 지속성 아키텍처에서 교차 서비스 교착 상태를 해결하지 못하는가?

PostgreSQLMongoDB는 각각의 프로세스 경계 내에서만 사이클을 발견하며, 서비스가 PostgreSQL에서 행 잠금을 보유하고 MongoDB에서 문서 잠금을 기다리거나 RabbitMQ에서 메시지를 기다리는 경우와 같이 교차 리소스 종속성을 가진 상황을 알아차리지 못합니다. 후보자들은 교차 리소스 종속성을 추적하기 위해 애플리케이션 수준 또는 서비스 메쉬 계측이 필요하다는 점을 설명해야 합니다. 이는 일반적으로 이질적인 저장 시스템 간의 분산 대기 그래프를 재구성하기 위해 OpenTelemetry 스팬을 계측하여 수행됩니다.

어떻게 네트워크 분할 중에 시스템의 생존성을 유지하면서 여러 고립된 하위 그룹에 의한 동일한 교착 상태의 분할 뇌 해결을 방지하는가?

이는 분산 시스템에서 가용성과 안전성 간의 긴장을 드러냅니다. 분할 중에는 서비스가 교착된 피어와 도달 불가능한 피어를 구별할 수 없어, 후보자들은 가용성을 희생하거나 중복으로 중단할 위험이 있는 솔루션을 제안하게 됩니다. 올바른 접근 방식은 도달 가능한 노드 간의 희생자 선택을 위해 Byzantine fault-tolerant 합의를 사용하고, 대기 그래프 재조정을 위한 CRDT(Conflict-free Replicated Data Types)를 결합하여 분할이 치유될 때 시스템이 수동 개입 없이 일관된 해결책으로 수렴하도록 보장합니다.