Discord 샤딩: 대형 봇이 서버를 나누는 방식
샤딩은 대형 Discord 봇이 서버를 여러 게이트웨이 연결, 즉 샤드에 나눠서, 어떤 단일 연결도 너무 많은 것을 맡지 않게 하는 방법입니다. Discord는 봇이 서버 2,500개에 들어가면 샤딩을 요구하며, 각 서버는 항상 정확히 하나의 샤드에 속합니다.
샤드란 무엇인가
봇과 Discord의 실시간 연결, 즉 게이트웨이는 처리할 수 있는 트래픽에 한계가 있습니다. 어느 지점을 넘으면, 한 연결이 수천 개 서버의 이벤트를 따라잡을 수 없습니다. Discord는 봇이 여러 연결을 열고 각 연결에 맡을 서버를 알려 주게 해서 이를 해결합니다. 각 연결이 샤드입니다.
서버는 어떻게 배정되는가
서버의 샤드는 그 ID에서 나옵니다. 공식은 길드 ID에서 스노플레이크의 시간 부분을 밀어낸 뒤, 샤드 수로 나누고 나머지를 취하는 것입니다. 그러므로 샤드 수가 바뀌지 않는 한 주어진 서버는 항상 같은 샤드에 갑니다. 다이렉트 메시지는 항상 샤드 0으로 갑니다.
봇은 연결할 때 한 쌍의 숫자, 즉 자신의 샤드 번호와 전체 샤드 수를 보냅니다. 그러면 Discord는 일치하는 서버의 이벤트만 보냅니다.
언제 필요해지는가
- 서버 2,500개 미만: 연결 하나로 충분합니다.
- 서버 2,500개: Discord는 단일 연결을 거부하며, 봇은 샤딩해야 합니다.
- 대형 봇은 보통 부하와 메모리를 나누기 위해 한계보다 훨씬 전에 샤드를 추가합니다.
샤드는 하나의 프로세스에서 돌 수도 있고, 별도의 머신에서 돌 수도 있습니다. 두 번째 방법은 한 샤드를 재시작해도 다른 샤드를 쓰러뜨리지 않게 합니다.
여러분에게 무엇을 뜻하는가
대부분 아무것도 아닙니다. 멤버는 차이를 보지 못합니다. 실제 효과는 장애에서 나타납니다. 한 샤드가 오프라인이 되면, 그 샤드의 서버만 봇을 잃고, 다른 서버는 계속 작동합니다. 다른 서버는 괜찮은데 여러분의 서버에서만 봇이 오프라인이라면, 여러분이 바꾼 것이 아니라 샤드 문제일 가능성을 시사합니다.
샤딩은 속도 제한과도 상호작용합니다. 많은 샤드를 한꺼번에 시작하는 것은 제한되므로, 대형 봇은 그것을 묶음으로 재시작합니다.
샤딩과 Noxyr
Noxyr에서는 아무것도 설정할 필요가 없습니다. 상태와 핑 페이지가 봇이 응답하는지 보여 주고, 봇 오프라인 가이드가 먼저 확인할 것을 나열합니다. 자신의 애플리케이션을 자신의 연결로 돌리고 싶다면, 커스텀 봇이 Noxyr의 기능을 여러분의 이름으로 돌리며, 호스팅 노드와 가동 시간 글이 그 봇들이 어떻게 계속 돌아가는지 설명합니다.
자주 묻는 질문
봇은 서버가 몇 개일 때 샤딩해야 하나요?
Discord는 서버 2,500개에서 샤딩을 요구합니다. 많은 대형 봇은 부하를 나누기 위해 더 일찍 샤딩합니다.
한 서버가 샤드 두 개에 있을 수 있나요?
아니요. 서버는 항상 정확히 하나의 샤드에 속하며, 그 ID와 샤드 수로 골라집니다.
샤딩이 멤버에게 무엇을 바꾸나요?
아무것도 바꾸지 않습니다. 내부 세부 사항입니다. 장애 때만 중요하며, 그때도 한 샤드가 실패해도 다른 샤드에는 영향이 없습니다.