현재 제 Discourse 설치 환경에는 DigitalOcean의 관리형 PostgreSQL 데이터베이스와 DigitalOcean의 관리형 Redis 인스턴스가 사용되고 있습니다. 관리형 Redis 서버가 꼭 필요한가요?
Discourse가 Redis에 영구적인 데이터를 저장하는지, 아니면 캐싱이나 기타 임시 데이터에만 사용되는지 궁금합니다.
현재 제 설정(확실히 과잉 투자가 되지만, 필요할 경우 확장을 쉽게 할 수 있도록 하기 위함입니다):
DigitalOcean 관리형 PostgreSQL 서버
DigitalOcean 관리형 Redis 인스턴스
DigitalOcean 로드 밸런서
Discourse를 실행하는 DigitalOcean 드롭렛 2대
더 단순한 설정으로 고려 중인 것은 다음과 같습니다:
DigitalOcean 관리형 PostgreSQL 서버
Redis와 Discourse 애플리케이션을 모두 실행하는 단일 서버 (필요할 경우 백업 서버로 전환할 수 있도록 플로팅 IP 사용)
외부 Redis 서버 덕분에 현재 설정에서는 사용자가 인지하지 못하는 사이 웹 서버를 무리 없이 전환할 수 있다고 생각합니다. 더 단순한 설정의 경우, 백업 서버가 필요할 때 사용자가 로그아웃될 것 같은데, 이것이 Redis를 Discourse와 동일한 서버에 두는 주요 단점인가요?
Discourse는 Ruby로 작성된 오픈 소스 작업 스케줄러인 Sidekiq를 사용합니다. Sidekiq는 일반적으로(그리고 기본적으로) 작업을 실행하는 것만 수행하고 스케줄링은 하지 않습니다. 적어도 참고 자료들이 그렇게 말하고 있지요(아마도 상황이 변했을 수도 있겠네요). 그러나 제 이해로는 Sidekiq의 엔터프라이즈 버전에는 스케줄링 기능이 기본으로(OOTB) 포함되어 있다고 합니다.
Sidekiq는 Redis를 인메모리 데이터 구조 저장소로 사용하며, 이 또한 Ruby로 작성되었습니다. Sidekiq는 선입선출 (FIFO) 모델을 사용하여 Redis 큐에서 작업을 읽어 작업을 처리합니다. 작업 처리는 비동기적으로 이루어지며, 백그라운드에서 실행되도록 "스케줄링"할 수 있는 무거운 작업을 처리하는 대신 웹 스레드가 실시간 요청을 처리할 수 있도록 합니다.
Sidekiq는 "잘 알려진 큐 처리 소프트웨어"로 설명되며, Discourse에서는 웹 애플리케이션 요청 내에서 직접 실행되지 않고 백그라운드 태스크로 실행되도록 설계된 작업에 사용됩니다.
위에서 간략히 개요를 살펴본 대로, Discourse가 실행하는 다양한 유형의 작업을 Discourse 저장소에서 살펴볼 수 있습니다:
Redis는 Discourse 아키텍처의 다른 부분에서도 사용될 수 있지만, 머릿속에 떠오르는 바로는 Redis의 주요 용도는 Sidekiq의 “동반자”, 즉 “작업 담당자” 역할을 하는 것입니다. Discourse HLA에서 저보다 더 똑똑한 Discourse 팀 구성원들이 Redis가 Discourse HLA 내에서 어떻게 사용되는지에 대해 더 자세한 정보를 제공해 줄 수 있을 것입니다.