AWS 커스텀 클라이언트에서 Message bus 사용 중이인데, 도움 좀 주세요 :)

먼저, 권장되는 Discourse 설정에 대해 잘 알고 있지만, 안타깝게도 현재로서는 제가 통제할 수 있는 범위를 벗어납니다.

문제로 넘어가 보겠습니다. 클라이언트가 Discourse를 백엔드 앱으로 사용하는 커스텀 React 프런트엔드를 구축했습니다. 이 프로젝트는 좋지 않은 상태로 인계받았고, 이전 개발자들이 ActionCable을 Discourse에 억지로 끼워 맞추려 했었습니다. Discourse는 이미 실시간 기능을 위해 Message bus를 사용하고 있으므로, 이 방식을 사용하는 것이 더 나을 것 같다고 생각했습니다.

로컬 환경에서는 성공적이었습니다. Message bus는 ‘그냥 동작하며’, 기본 Discourse 메시지 버스 채널에 구독할 수 있었고, 자체 채널도 몇 개 만들 수 있었습니다.

문제가 발생하는 곳은 원격 환경입니다. 우리는 ALB 뒤에 위치한 AWS EC2 인스턴스에 배포하고 있으며, 환경을 직접 구축하고 있습니다. Docker 경로를 따르고 싶었지만, 프로젝트의 이 단계에서 변경 사항에 시간을 할애할 예산이 클라이언트에 없었습니다 :sadpanda:

주요 증상은 Message bus가 심하게 지연된다는 것입니다. 실제로 실시간이라고 할 수 있는 것이 없지만, 로컬에서는 잘 작동하므로 메시지 버스 설정 자체는 문제없다고 알고 있습니다. 따라서 다른 원인이 있을 것입니다.

또한 거의 기본 Discourse nginx 설정을 사용하고 있습니다. 처음에는 메시지 버스 nginx 설정이 누락되어 이것이 문제라고 생각했지만, 추가한 후에도 우리가 겪고 있는 문제가 해결되지 않았습니다.

Chrome의 네트워크 탭을 확인해 보니, /poll 요청이 25초를 기다린 후 몇 밀리초 만에 콘텐츠를 다운로드하고 있으므로 명확히 문제가 있는 것으로 보입니다. 로컬에서 실행할 때나 meta에서와 같이 그 반대여야 합니다.

이것이 AWS ALB 문제일 수도 있다는 점은 알고 있지만, 어디서부터 시작해야 할지 전혀 감이 잡히지 않습니다. @sam 님이 문제의 원인에 대해 어떤 아이디어를 가지고 계신지, 혹은 올바른 방향으로 안내해 주실 수 있을지 궁금합니다.

항상 그렇듯, 모든 도움이 진심으로 감사하겠습니다!

메시지 버스가 ALB와 함께 작동하도록 설정되어 있으며, 실제로 메타는 AWS에 호스팅되어 있습니다.

스택 어딘가에 요청 버퍼링이 활성화되어 있어 요청이 장기간 유지되고 있는 것으로 보입니다.

가장 가능성 높은 원인은 NGINX의 proxy_buffering이 off가 아닌 on으로 설정되어 있는 것입니다.

@sam님 안녕하세요

제안해 주셔서 감사합니다. 네트워크 패널에서 문제가 해결된 것 같습니다. 이제 요청이 완료되면 다운로드된 콘텐츠가 25초로 표시되고, 대기 시간이 35ms로 표시됩니다.

그러나 메시지는 수신되는 즉시 처리되어야 한다고 생각했습니다. 하지만 우리 앱은 여전히 폴링이 완료될 때까지 대기한 후에야 수신된 메시지를 처리하는 것 같습니다.

장 폴링(long polling)과 청크 인코딩(chunked encoding)이 활성화되어 있으며, 앞서 언급했듯이 백엔드로 Discourse를 사용하고 있으므로 해당 설정에서 추가 구성이 필요하지 않을 것이라고 추정합니다.

아무런 아이디어가 있으신가요? 감사합니다