13.6.4.2 소스(Source) 노드 데이터 전송 동결(Pause) 및 큐(Queue) 배수 처리 런북
미친 듯이 회전하며 초당 4K 데이터 프레임을 뿜어내는 자율주행 파이프라인의 숨통을 영원히 죽이거나(Destroy), 혹은 일시적으로 제어권을 탈취하기 위해서는, 시스템 아키텍트가 달리는 열차의 브레이크를 아주 우아하고도 완벽한 통제력으로 잡을 줄 알아야 한다.
강제로 서버 전원 코드를 뽑아버리거나 프로세스를 리눅스 커널의 kill -9 명줄 끊기로 학살하면, 파이프관 내부에 반쯤 걸쳐 흐르고 있던 텐서 데이터(In-flight Bytes)들이 미가공 상태로 증발(Corruption)해 버려 데이터베이스 저장소(Data Lake)의 무결성(Integrity)이 영구적으로 산산조각 난다.
본 절에서는 “달리는 큐(Queue)를 찢어발기지 않고, 소스의 심장 박동에 거대한 동결(Pause) 족쇄를 채운 뒤, 잔류 데이터가 끝까지 배수구(Drain)를 타고 무사히 빠져나가도록 유도하는” 최정상급 파이프라인 정지 런북을 설파한다.
1. 외부 무력(SIGKILL) 개입의 끔찍한 파국
로봇의 LiDAR 센서가 앞의 쓰레기통을 보고 브레이크를 밟으라는 긴급 탈출 데이터(Brake Cmd)를 연산 중이라고 치자.
파이프라인의 관(Link) 안에는 입력(Raw) -> 필터링(Voxel) -> 판단(Detect) -> 출력(CAN) 이라는 연결 고리 위에 각 연산 단계 데이터들이 한 덩어리씩 둥둥 떠가고 있다.
그런데 이때 인프라 관리자가 로봇 애플리케이션 업데이트를 한답시고 Zenoh-Flow 파이프라인 데몬을 그냥 물리적으로 셧다운 시켜 버린다면?
판단(Detect) 노드까지 흘러갔던 데이터 메모리는 즉시 운영체제에 의해 허공으로 날아가 버린다. 자동차는 카메라상 쓰레기통을 인지했음에불구하고 브레이크(CAN) 엑추에이터에는 최종 명령을 전혀 내리지 못하고 충돌(Crash)하게 되는, 이른바 인-플라이트 추락(In-flight Data Loss) 사태가 터진다.
2. 데이터 유입 1선 차단: Source Node 동결(Pause)의 미학
진정한 시스템 통치자의 정지 런북(Pause)은 무력을 쓰지 않는다.
파이프라인의 생명수 근원, 즉 맨 앞단의 댐 밸브에 서 있는 Source(소스) 노드의 목만을 먼저 정밀하게 조른다.
# [Zenoh-Flow 파이프라인 동결(Pause) 발동 런북]
zfctl pause 550e8400-e29b-41d4-a716-446655440000
관리자가 pause 명령을 치는 순간, 스웜 망을 타고 마스터 데몬이 전파한 제어 코드는 오직 Source 노드 역할의 클래스 내부에 정의된 pause() 라이프사이클 훅(Hook) 만을 타격하여 발동시킨다. 중간 단의 AI 필터 연산 노드들이나 최종 Sink 노드는 아예 건드리지 않는다!
# [소스 노드를 코딩한 엣지 개발자의 Python 런북]
class CameraDmaSource:
def pause(self):
# 파이프라인 엔진이 나(Source)에게 동결을 명령했다!
logging.info("Pause Invoked! Freezing DMA sensor capture...")
# 여기서 하드웨어 카메라 셔터 스레드를 멈추어, 파이프라인망 안으로
# 더 이상의 신규 프레임 캡슐을 생산/삽입하지 않도록 댐을 차단한다.
self.hardware.disable_interrupt()
3. 잔류 버퍼 배수(Drain)의 완성과 완벽한 진공(Vacuum)
소스(Source) 댐 밸브가 단단히 닫혔다 (신규 유입 0).
하지만 앞서도 말했듯, 파이프라인 배관(MPSC 큐, TCP 소켓 터널) 안에는 아직도 수 분의 일 초 전에 생산된 Yolo 추론 직전의 데이터들이, 관성을 타고 남은 파이프 구멍을 맹렬히 헤엄치고 있다.
Zenoh-Flow 런타임은 소스를 막은 직후, 시스템 전체의 큐 내부 잔류량 카운터가 완전히 제로(Zero) 가 될 때까지 숨을 죽이고 기다린다. 이것이 시스템 공학의 절정인 배수(Drain) 페이즈다.
중간 오퍼레이터들은 새로 들어오는 밥(Data)이 없으니 큐에 남아있던 잔반들만 빠르게 처치(Process)하고 앞쪽 큐를 모두 비워버리며 점차 휴면(Sleep) 상태로 들어간다. 이 잔류 바이트 덩어리들이 결국 종착역 노드(Sink)의 포트까지 무사히 도착해 안착하여 “클라우드 데이터베이스의 INSERT” 커밋을 완수하는 100% 무결점 스가타가 끝났을 때 비로소 파이프라인 그래프의 위상은 완전한 동결(Paused), 즉 진공 상태로 전환되었음을 선포한다.
더 이상의 데이터 드랍(Drop)도 잃어버리는 비명도 없다.
엔지니어가 파이프를 끊어 코끼리 심장을 도려내기 전에 동맥의 피를 먼저 통제(Pause)하고, 정맥에 남은 잔혈마저 완벽히 빼내어 종착지(Sink)로 몰아넣은 뒤(Drain)에 마취를 완료하는 이 외과적 설계론이야말로, 분산 백엔드 스트림 데이터베이스의 무결점 보존주의(Conservationism)를 이룩하는 궁극의 동결 기만전술이다.