이벤트의 발행과 구독
- 분산 시스템을 구성할 때 시스템간 메세지를 주고 받을 수 있는 메세지통
- 전송, 수신, 삭제 3가지 기능을 제공
-
Queue(줄)
- Queue 안에 message가 들어가 있다.
- 여러가지용도의 메세지들을 그룹핑하여 관리의 편의성을 도모하기 위해 존재
- Queue에 Message를 올리는 것: SEND
- Queue에서 Message를 읽는 것: RECEIVE
- 이 때, Queue에서 리시브 된 Message는 보이지 않는 상태로 바뀐다.(사용자가 정해놓은 시간까지 - visibility timeout: 기본값 30초 )
- 만약 삭제되지 않는다면 다른 서버가 동일한 작업을 하게 될 수도 있기 때문에(즉, 분산서버 환경이기 때문에!)
- 그럼 아예 메시지를 삭제하면 되지 visibility timeout을 설정할까?
- 메세지를 receive한 서버가 장애가 나서 작업을 처리하지 못하는 경우를 대비
- 그럼 이 때 메세지는 처리가 되지 않은 상태임!
- 처리할 경우에는 message를 삭제하지만, 지금은 삭제되지 않았기 떄문에 visibility timeout 이후에 queue에 다시 message가 추가됨
- 메세지를 수신한 서버가 메세지를 처리하게 되면
- 해당 큐에 메세지 삭제 요청을 보낸다.
- 다음 작업을 위해 새로운 큐에 메세지를 추가한다. (SEND)
- 이 때, Queue에서 리시브 된 Message는 보이지 않는 상태로 바뀐다.(사용자가 정해놓은 시간까지 - visibility timeout: 기본값 30초 )
-
Message
- polling: 당겨오는 것
- start polling for message : 해당 큐에 있는 메세지를 가져오겠다! 이런 의미
- 서버가 정기적으로 큐에 접속해서 큐에 메세지가 있으면 가져오게 되는 것
- Message Available : 큐로부터 받을 수 있는 메세지 수
- Message in Filght : 현재 큐에서 보이지는 않지만 다른 서버로부터 처리되고 있는 메세지 수
- Receice Count : 몇 번이나 리시브가 일어났는지
- 두 개의 서버가 경합
- 서버1과 서버2가 하나의 큐에서 폴링하고 있을 떄
- 서버1이 메세지1을 가져가면 서버2는 visibility timeout동안 볼 수 없음
- polling: 당겨오는 것
- 구독중인 Service 또는 사용자(Client)에 메시지 전달, 전송을 조정 및 관리하는 웹서비스 (즉, 알림 서비스)
- SNS의 구독자는 승인을 해야 정보를 받아볼 수 있다(이메일)
- 사용자
- topic을 어떤 pub/sub이 통신할지를 결정하는 정책을 지정하므로써, 주제를 생성하고 액세스를 제어
- Topic(주제)
- 각각의 topic은 고유한 이름을 가지므로 publisher는 메시지를 게시하고 subscriber는 알림을 받을 수 있도록 구독할 수 있다.
- publisher가 게시하는 대상이자 Subscriber가 구독하는 대상
SQS와 SNS
- 분산 발행-구독 시스템
- 메시지는 게시자가 SNS로 보낼때와 같이 가입자에게 푸쉬됨
- 이메일, SMS, http엔드포인트, SQS와 같은 여러 엔드 포인트를 지원
- 분산 큐잉 시스템
- 메시지가 수신자에게 푸쉬되지 않음
- 수신자는 SQS에서 메시지를 폴링해야 함
- 메시지가 즉시 가입자에게 푸시되는 SNS와는 달리
- SQS에서 메시지 배달에 약간의 대기 시간을 제공
- 여러 수신자가 동시에 메시지를 수신할 수 없음
- 하나의 수신자가 하나의 메시지를 수신하여 처리하고 삭제할 수 있음