(O) A 쇼핑몰에서는 남자옷(서버), 여자옷(서버),아기옷(서버) 가 각각 서버가 분리되서 사용중이고 사용자(서버)에는 옷을 구매할때 쓸 수 있는 포인트 정보가 있다.
물론 포인트 DB에 각 서버별로 붙어서 업데이트된 포인트를 읽어 올수도 있지만 이러면 서버를 분리한 의미가 없다. 포인트 DB에 종속적이되고 포인트 DB가 장애가 발생한다면 포인트 DB를 사용하는 서버들도 다 장애가 발생할 것이다.
그래서 옷?서버들은 포인트 정보를 캐시하고 있다. 이런 경우 Aws Sns FanOut을 이용하여 캐시를 손쉽게 삭제할 수 있다.
이것도 메시지 푸시를 받게 되는것과 다르지 않은데...
(R) AWS 에서는 Sns를 이용해 Pub/Sub 구조를 만들어 메시지를 발생하면 메시지가 구독자들은 그 메시지를 받을 수 있도록 한다. Fanout도 그 기능 중 하나이다.
간단하게 설명하자면 하나의 채널이 있고 그 채널을 서버들이 구독하고 있다.
그 채널에 새로운 메시지 현재 사용자 정보의 포인트 캐시를 삭제해주세요. 라고 메시지를 보내면 각 구독하고 있는 서비스들에서 그 메시지를 받아 사용자 정보의 포인트 캐시를 삭제한다.
fanout 이란?
(E) 간단히 어떻게 설계할지는 위 설명이 되었고 각 서버에서는 구독한 메시지를 받을 수 있도록 구독을 생성하고 EndPoint를 등록한다.
각각의 서버별 Endpoint를 등록한다. 서버별 Endpoint에서 캐시를 삭제해야하는 로직을 추가적으로 들어가야 하지만 이 작을 통해 사용자의 포인트가 변경되는 경우 채널에 메시지만 만들면 각 구독하고 있는 서버들의 자동적으로 캐시가 삭제되게 설계가 가능하다.
이후 채널 쪽에서 구독확인을 해주면 준비 끝
(O) Sns Fanout을 이용하여 사용자 캐시 삭제에 대한 추가 및 삭제를 조금더 편리하게 사용할 수 있게 되었다.
캐시 삭제가 필요 없다면 구독 취소를 캐시삭제가 필요하다면 구독을 통해 메시지를 받으면 된다.
물론 서버별로 Endpoint에 해당하는 로직은 직접 개발해야한다.
마지막으로 요즘 마이크로서비스를 구현하는 회사들이 많아지는데
Fanout을 이용하면 조금더 편하게 개발 및 설계를 하지 않을지 생각해 본다.
끄읏