2.3.4 네트워크 파티셔닝(Partitioning) 대응 및 동적 재구성(Dynamic Reconfiguration)
버전 알림: 본 문서는 Zenoh 1.0.0 (및 1.0.0-rc 분기) 코어 아키텍처 규격을 기준으로 작성되었다.
CAP 정리(CAP Theorem)의 저주 아래 놓인 모든 분산 아키텍처는 일관성(Consistency)과 가용성(Availability), 그리고 네트워크 분할 내성(Partition Tolerance)의 트릴레마 속에서 반드시 한 가지 이상을 포기하도록 압박받는다. 스마트 팩토리나 군집 자율주행(UAV Swarm) 드론망이 펼쳐져 있는 가혹한 무선 환경에서는 방화벽, 장애물, 무선 간섭 등에 의해 멀쩡하던 통신망 지형이 반 토막 혹은 수십 조각으로 갈라지는 물리적 파티셔닝(Network Partitioning) 재난이 밥 먹듯이 발생한다.
DDS나 MQTT와 같은 과거 미들웨어는 메인 브로커 혹은 로컬 서브넷 단절과 함께 끔찍한 타임아웃 셧다운(Shutdown Crash) 에러를 뿜어내며 시스템 붕괴를 초래했다. 이 공포의 망 단절을 역으로 지능적 방어(Self-Healing) 기회로 승화해 낸 Zenoh(제노) 기술 철학, 동적 재구성 메커니즘을 본 절에서 철저히 해부한다.
1. Split-Brain의 회피: 파단면 너머의 로컬 자치(Autonomy on Partition)와 임시 메쉬망 결합
거대한 엣지 어항망이 특정 라우터 통신 허브 단자의 절약이나 전파 방해 공격에 의해 분절(Split)되어 50대씩 두 개의 고립된 섬(Island)으로 쪼개졌다고 가정하라. 낡은 인터넷 인프라는 상위 1티어 쿼럼(Quorum Consensus Server)의 응답을 얻지 못하면 안전을 명분으로(Split-brain Avoidance) 두 섬 안의 모든 통신 권한을 즉시 스스로 잠가버린다(Deadlock Termination).
Zenoh의 노드 엔진은 중앙의 권력에 종속된 적이 없는 진정한 브로커리스(Brokerless) 이니셔티브 유전자를 갖고 있다. 섬 안에 고립된 50대의 피어(Peer)나 클라이언트들은 단절 타임아웃 이벤트(Partition Timeout Alarm)가 떨어지는 찰나의 순간에도, 패닉이나 런타임 종료 오류 코드(Exception Dump)를 상단 응용 애플리케이션에 띄우지 않는다. 이들은 즉시 내부 하트비트 스캐닝의 스텝을 벼락처럼 끌어올려(Aggressive Scouting Discovery Mode) 생존해 있는 피어들끼리의 멀티캐스트 잔해 조각 핑퐁을 미친 듯이 결합한다.
결과적으로, 글로벌 광역망(WAN)은 붕괴되어 클라우드로 토픽이 나가지 못할지언정, 고립된 섬광 안에 남겨진 로컬 피어들끼리는 몇 밀리초(ms) 단위로 자기들만의 완벽한 50대 규모 미니-라우팅 메쉬 지형도(Temporary Mesh FIB Reconfiguration)를 오토 재생성해 버린다. 로컬 안에서의 하드 리얼타임 긴급 제동 패킷이나 서로의 쿼리 응답(Query/Reply)들은 외부 인프라의 사망 여부와 무관무결하게, 철폐된 자치 생태계로서 그 영속성(Liveline Guarantee) 루프를 끊이지 않고 돌린다.
2. 점진적 트래픽 보류 전술: In-network Store-and-Forward 캐싱의 댐(Dam) 역할 방어
데이터 포워딩의 가장 가혹한 순간은, 파티셔닝이 진행되는 가운데 생성된 데이터들을 허공으로 유실(Data Loss Error)시킬 것인가, 살려둘 것인가 하는 저장 영속성(Persistence) 딜레마이다. 중앙 통계 관제 서버로 밀어 올려야만 하는 중요한 시계열 로그 덤프들이 통신선 붕괴에 막혔다.
Zenoh 라우터 아키텍처는 이 지점에서 인-네트워크(In-network) 스토리지 플러그인의 무서운 위력을 해방시킨다. 고립섬 가장자리에 남겨져 버린 최후의 포그(Fog) 라우터는 상단 터널링 TCP 소켓이 차단당한 것을 감지하자마자, 어플리케이션이 끊임없이 자신에게 밀어 넣는 퍼블리시 페이로드(Publish Event Stream)들을 즉시 파기(Drop)하거나 거부하지 않는다. 라우터 데몬은 이 트래픽들을 고스란히 자신의 로컬 인-메모리 캐시 링 버퍼(In-memory Circular Buffer)와 부착된 백엔드 로컬 디스크 플러그인(RocksDB 등)으로 즉각 터닝(Offline Storage Dumping)하여 거대한 저수지 댐처럼 무실시간으로 보류 저장(Store-and-Forward Standby)하기 시작한다. 네트워크가 찢어진 가혹한 시간 속에서도 패킷 손실률 0%를 위해 미들웨어가 창고 역할의 방주(Ark)로 자생적 변이(Metamorphosis)를 도모하는 런북 오프라인 대피소 설계이다.
3. 네트워크 재접합(Re-Join): 섬들의 트리 병합 통일 충돌 파괴 엔진(Re-merging Reconciliation)
시간이 흘러 분절된 무선 안테나 스위치가 복원되고 두 개의 고립된 섬이 다시 물리 계층 핑(Ping) 끈으로 맞닿는 경이로운 이벤트 지점(Connectivity Re-Join)에 도달한다. 이 재접합의 순간 수많은 통신망은 라우팅 무결성(Routing Integrity) 오류나 중복 IP 테이블 충돌 폭풍(Routing Broadcast Collisions Storm)으로 지독한 스레드 데드락 셧다운 오류를 낳았다.
하지만 파편화된 다중 Zenoh 토폴로지 대장 노드들의 재접합 협상은 소름 돋게 조용하고 완벽한 오토-스위칭 춤이다. 양측 섬의 보스격인 라우터는 상대방을 스카우팅(Scouting Beacon Handshake)으로 식별하는 동시에, 서로가 독립되어 살아가는 동안 만들어낸 텅 빈 라우팅 테이블(FIB) 지도의 변경 분기점을 부분 델타 동기화(Delta-Sync FIB Path Differences) 방식으로 교환한다. 전체 테이블을 몽땅 쏟아붓는 것이 아니라 서로 부족했던 잃어버린 트리 리소스 식별자 링크를 본드로 붙여 최단 경로 망(Shortest Path Map) 지도를 찰나에 통일 재구축해 버린다.
이어지는 하이라이트는 그동안 라우터 댐(Dam)에 갇혀 보류(Stored) 중이던 저수지의 과거 트래픽들이다. 이 트래픽은 단순하게 앞으로 치고 나가지 않고 복원된 클라우드 라우터를 향해 압축된 벌크 어레이(Bulk Arrays) 형태로 미친 듯이 연쇄 배출(Sequential Delivery Drain)되어, 관제단의 시간 축(Timeseries Database) 데이터 싱크 로스를 완벽 무결의 빈틈없이 메우는 기적의 동기화를 종결짓는다. 파티셔닝에 맞서는 Zenoh의 동적 재구성은 인간 데브옵스를 철저히 소외시킨 아키텍처 극단 진화의 승전보이다.