내부적으로 RabbitMQ는 Erlang/OTP(동시적, 분산적, 내결함성 시스템에 적합) 위에 구축되어, exchange를 통해 queue로 메시지를 라우팅하고 메시지 저장, 메모리, 흐름 제어를 관리합니다. 내부 구조를 이해하면 RabbitMQ의 동작에 대한 이해가 깊어집니다.
Erlang/OTP 위에 구축됨
RabbitMQ는 ERLANG으로 작성됨 (OTP 프레임워크 위):
→ Erlang은 동시적, 분산적, 내결함성 시스템을 위해 설계됨 (통신 분야 기원)
→ 경량 프로세스, 메시지 전달, 감독(supervision) → message broker에 잘 맞음
→ RabbitMQ의 동시성, clustering, 신뢰성을 가능하게 함
→ Erlang 기반이 RabbitMQ가 많은 connection을 다루고 내결함성을 갖는 이유
메시지 흐름과 저장
→ 발행된 메시지 → EXCHANGE → (binding을 통한 라우팅) → QUEUE → consumer
→ 저장: 속도를 위해 메시지를 메모리에 보유; PERSISTENT 메시지는 디스크에도 기록
(durable); 메모리 압박 시 메시지가 디스크로 PAGE될 수 있음
→ LAZY QUEUE → 메시지를 디스크에 유지 (큰 queue용, 메모리 적게)
→ queue는 프로세스; broker가 라우팅, 전달, ack를 관리
