메시지 모델 중의 하나로 발행(Publish)과 구독(Subscribe) 역할로 개념화 한 형태
발행자와 구독자는 서로에 대한 정보 없이 특정 주제(topic or channel)를 매개로 송수신한다.
메시징 미들웨어 제품들 : kafka, RabbitMQ, ActiveMQ 등이 있다.
비동기
: 통신의 비동기 처리낮은 결합도
: 송신자와 수신자가 직접 서로 의존하지 않고 공통 미들웨어에 의존탄력성
: 구성원들간에 느슨한 연결로 인해 일부 장애가 생겨도 영향이 최소화됨RabbitMQ는 원래 이 구조이고, Redis도 이 구조로 구현이 가능했다!
실시간으로 빠르게 전송되어야 하는 메시지
메시지 유실을 감내할 수 있는 케이스(메시지의 한시적
으로만 유용한 케이스)
최대 1회 전송(at-most-once)패턴이 적합한 경우
Subscriber들이 다양한 채널을 유동적으로 바꾸면서 한시적으로 구독하는 경우
가장 대표적인 예가 채팅방
이다.
소수만 사용하는 작은 채팅 시스템은 상관없지만, 많은 사람들이 사용하는 채팅 데이터는 Redis같은 NoSQL가 많이 사용된다.
짧은 시간에 많은 데이터 입력이 처리가 되고, 한정된 규모의 복잡성이 높은 데이터에서 단순한 대량의 데이터가 쌓이는데
조회, 삽입이 빈번하게 일어나면 RDBMS의 경우 Lock이 자주 발생할 수 있기 때문이다.
redis로 채팅방 구현은 다음 블로그를 참고
https://velog.io/@mooh2jj/Redis-pubsub-채팅방-구현
https://medium.com/@nemesis1825/redis%EC%99%80-rabbitmq%EC%9D%98-%EC%B0%A8%EC%9D%B4-af48dbe9a7ed