채팅 플러그인: 대규모 환경에서의 성능 - 데이터 보존 비활성화 및 과도한 API 사용?

Discourse Chat 플러그인의 대체 사용 사례를 검토하고 있으며, 특히 데이터 보존 정책과 대규모 API 사용과 관련된 성능 한계에 대해 몇 가지 질문이 있습니다.

배경 설명을 드리자면, 우리는 스레드형 댓글 시스템을 찾고 있습니다. Chat 플러그인의 “스레드형 답변” 기능은 표준적인 주제/게시물 구조보다 우리의 요구사항에 훨씬 가까운 사용자 경험을 제공합니다. 이 때문에 우리는 채팅 채널을 영구적인 댓글 스레드로 사용하는 것을 고려하고 있습니다.

이러한 사용 사례로 인해 채팅 히스토리를 무기한으로 유지해야 합니다. 이는 우리의 주요 우려 사항인 대규모 환경에서의 성능 문제로 이어집니다.

예상되는 사용량은 다음과 같습니다:

  • 총 메시지 수: 100만 건에서 1,000만 건 사이.

  • 채널 수: 약 150개에서 200개.

주요 질문은 다음과 같습니다:

  1. 채팅 보존 정책을 완전히 비활성화하거나, 언급된 메시지 수를 지원하도록 증가시킬 수 있는가? 예를 들어, 보존 기간을 0 또는 매우 큰 숫자로 설정하는 방식입니다.

  2. API 성능에 어떤 영향을 미칠 것인가? 외부 시스템과 통합하기 위해 Chat 플러그인의 API를 적극적으로 사용할 계획입니다. 주요 접근 패턴은 메인 채널과 스레드 모두에서 메시지를 **시간순(최신부터 오래된 순서로)**으로 가져오는 것입니다. 이러한 빈번한 API 폴링이 거대한 히스토리를 가진 채널에서 상당한 서버 부하를 유발할까요?

  3. 수백만 건의 채팅 메시지를 영구적으로 저장할 때 서버와 데이터베이스에 미칠 일반적인 성능 영향은 무엇인가? 구체적으로 다음과 같은 요소에 어떤 영향을 미칠까요:

    • 서버 CPU 및 RAM 사용량?

    • 사이트 전반의 반응 속도?

  4. 이러한 부하 하에서 시스템 성능이 현저히 저하되기 시작하는 알려진 "계기점"이나 소프트 제한이 있는가?

이것이 채팅 플러그인의 비전통적인 사용 방식이며, 보존 정책을 비활성화하는 것이 모범 사례가 아니라는 점을 이해하고 있습니다. 우리의 목표는 이 접근 방식을 채택하기 전에 UI와 API 모두에서 시스템의 구조적 한계를 파악하는 것입니다.

대규모로 채팅을 운영해 본 팀이나 커뮤니티 구성원의 통찰은 매우 가치 있을 것입니다.

안녕하세요 @Nima1, 몇 가지 질문에 대해 답변을 시작해 볼 수 있습니다:

네, 가능합니다. chat channel retention days를 "0"으로 설정하면 메시지를 영구적으로 보존할 수 있습니다 — 하지만 여러분이 진행 중인 작업의 규모를 고려할 때, 성능 영향에 대해 의문을 제기하는 것은 당연합니다. 또한 현재 채팅 메시지 검색은 지원하지 않습니다(고려 중이지만 현재 계획에는 없습니다). 이는 메시지를 영구적으로 보존하더라도, 여러분의 높은 프로젝트 사용량을 고려할 때 특정 메시지를 찾는 것이 실현 가능하지 않을 수 있음을 의미합니다.

이 질문에 대한 답변에 대해서는 확신이 서지 않습니다. 채팅 관련 작업을 가장 많이 수행한 엔지니어들에게 확인해 보겠습니다.

또한 여러분의 사용 사례에 대해 더 알고 싶습니다 — 진행 중인 작업에 대해 좀 더 자세히 공유해 주실 수 있으신가요?

린즈레이, 안녕하세요.

답변해 주시고 엔지니어링 팀에 확인해 주셔서 감사합니다. 저희 사용 사례에 대해 더 자세히 말씀드릴 수 있습니다.

저희는 암호화폐 애호가들을 위한 커뮤니티를 구축하고 있습니다. 각 주요 암호화폐 자산별로 실시간 토론을 위한 전용적이고 영구적인 채널을 만들고자 합니다.

표준적인 주제/게시물 모델이 이 목적에 이상적이지 않다고 판단한 이유는 다음과 같습니다.

  1. 속도 및 형식: 대화는 빠르게 진행되며 짧은 메시지, 업데이트, 반응으로 구성되어 있어 채팅 형식에 자연스럽게 부합합니다.

  2. 정보 흐름: 사용자는 최신 메시지를 먼저 보고, 최근 기록을 위로 스크롤하여 확인해야 하는데, 이는 채팅의 기본 동작 방식입니다. 반면, 주제(Topic)는 오래된 것부터 새로운 것까지 시간순으로 읽도록 설계되어 있습니다.

채팅 플러그인의 스레드형 답글과 역순(최신순) 표시 방식은 저희가 만들고자 하는 사용자 경험에 완벽하게 부합합니다.

저희의 주요 과제는 규모입니다. 각 자산별로 채널이 하나씩 존재하므로 수백 개의 채널이 필요할 것으로 예상되며, 각 채널에는 매우 긴 히스토리가 저장될 수 있습니다. 이것이 저희가 성능 한계에 대해 매우 관심을 갖는 이유입니다.

저희는 강력한 모더레이션, 사용자 관리, 게이미피케이션 기능을 갖춘 Discourse를 사용하기로 결정했습니다. 이러한 기능들은 건강한 커뮤니티를 구축하는 데 필수적이기 때문입니다.

엔지니어들의 의견을 기다리고 있습니다. 다시 한번 감사합니다!

어떤 일을 하고 싶으신지에 대해 더 자세히 공유해 주셔서 감사합니다, @Nima1님!

팀과 상의를 해 본 결과, 이 양의 메시지가 성능에 어떤 영향을 미칠지 단정적으로 말씀드리기 어렵습니다. 현재 이 규모로 채팅을 사용하는 사용자가 많지 않으며, 사이트를 어디에 호스팅하느냐에 따라 큰 차이가 날 수 있기 때문입니다.

Discourse를 직접 호스팅할 계획이 있으신가요?

안녕하세요, 빠른 답변과 팀에 확인해 주셔서 감사합니다!

질문에 대한 답변을 드리면, 네, 저희는 자체 호스팅(self-hosting)을 하고 있습니다. 인스턴스는 이미 설정해 두었습니다.