푸시 스로틀링

1 분 소요

모이고 푸시 스로틀링을 통한 TOPIC_RATE_EXCEEDED 에러 방지

단일 기기에 대한 최대 메시지 속도

FCM 에러 목록

모이고 기능 개발도중 FCM에 TOPIC RATE EXCEEDED 에러가 발생했다.

해당 에러의 발생 사유는 아래와 같다.
특정 주제의 구독자에게 전달되는 메시지 비율이 너무 높습니다. 이 주제로 보내는 메시지 수를 줄이세요. 바로 다시 보내도록 시도해서는 안 됩니다


일단, 단일 기기에 대한 최대 메세지 속도 제한을 보고 접근했다.

문서 상에서 FCM의 클라이언트 수신 가능한 최대 개수가 분당 240개. 시간당 5000개까지 제한하고 있다.
분당 240개를 잡고 계산했을 때, 0.25초당 1개의 푸시만 클라이언트에 전송되어야 한다.
물론, 최대로 잡았을 떄 저렇다는 거지, 실제로는 더 적게 보내야 한다.

당장 보내는 메세지의 수를 많이 줄이는 것은 어렵다고 판단했다.
따라서, 최근에 해당 부분에 대해서 작업하여, 0.25초마다 한번씩만 푸시를 하도록 하였다.
여러개의 푸시가 한번에 몰려도 토픽당 1초에 최대 4번까지만 전송한다는 이야기다.
코드 상에서는 각 토픽마다 gen_server를 global로 띄운후에, 요청 function 을 호출하면, 띄워진 토픽에 해당하는 gen_server로 푸시요청이 넘겨지고, 매 0.25초 마다 한번씩 해당 푸시를 전송하도록 하였다.

이후, 해당에러는 발생하지 않게 되었다.

채팅을 제공하고, 여러가지 동작에 대해서 클라이언트간 싱크를 지원하기 위해 각 동작마다 FCM을 전송하고 있기 때문에, 위 방법은 임시조치일 뿐, 해결방법이 되지는 못한다.
따라서, 지금 생각해본 해결방법은 포그라운드일 경우, WebSocket을 통해 데이터를 받고, 백그라운드일 경우, FCM Notification만 클라이언트에 전송하는 방법이다.
해당 부분에 대해 개선을 하게 되면, 추후 포스팅을 통해, 문제가 되었던 점과 어떤것을 고민했는지 남길 예정이다.

카테고리:

업데이트: