Discord Sharding: Các bot lớn chia máy chủ thế nào
Sharding là cách một bot Discord lớn chia máy chủ của nó qua nhiều kết nối gateway, gọi là shard, để không kết nối nào phải gánh quá nhiều. Discord yêu cầu điều này khi bot có mặt trong 2.500 máy chủ, và mỗi máy chủ luôn thuộc về đúng một shard.
Shard là gì
Kết nối trực tiếp của bot đến Discord, tức gateway, chỉ xử lý được một lượng lưu lượng nhất định. Vượt quá một mức, một kết nối không thể theo kịp các sự kiện từ hàng nghìn máy chủ. Discord giải quyết việc này bằng cách cho phép một bot mở nhiều kết nối và cho mỗi kết nối biết nó sở hữu những máy chủ nào. Mỗi kết nối là một shard.
Máy chủ được phân công thế nào
Shard của một máy chủ được tính từ ID của nó, bằng một công thức chia guild ID (sau khi bỏ phần thời gian của snowflake) cho số lượng shard và giữ lại phần dư. Vì vậy một máy chủ nhất định luôn nằm trên cùng một shard trừ khi số lượng shard thay đổi. Tin nhắn riêng luôn đi đến shard 0.
Khi kết nối, bot gửi một cặp số: số thứ tự shard của nó và tổng số shard. Discord sau đó chỉ gửi các sự kiện cho những máy chủ khớp.
Khi nào nó trở thành bắt buộc
- Dưới 2.500 máy chủ: một kết nối là đủ.
- Ở mức 2.500 máy chủ: Discord từ chối một kết nối đơn và bot phải chia shard.
- Các bot lớn thường thêm shard trước giới hạn rất lâu, để chia tải và bộ nhớ.
Các shard có thể chạy trong một tiến trình hoặc trên các máy riêng. Lựa chọn thứ hai cho phép một shard khởi động lại mà không làm sập các shard khác.
Điều đó có ý nghĩa gì với bạn
Phần lớn là không có gì. Thành viên sẽ không thấy khác biệt. Hiệu ứng thực tế xuất hiện khi có sự cố: nếu một shard offline, chỉ các máy chủ trên đó mất bot, trong khi các máy chủ khác vẫn hoạt động. Nếu bot của bạn chỉ offline trong máy chủ của bạn còn những nơi khác vẫn ổn, đó là dấu hiệu của sự cố shard chứ không phải điều gì bạn đã thay đổi.
Sharding cũng có tương tác với giới hạn tần suất. Khởi động nhiều shard cùng lúc bị giới hạn, nên một bot lớn khởi động lại chúng theo từng đợt.
Sharding và Noxyr
Bạn không cần cấu hình gì cho Noxyr. Trang trạng thái và ping cho biết bot có đang phản hồi hay không, và hướng dẫn bot offline liệt kê những gì cần kiểm tra trước. Nếu bạn muốn chạy ứng dụng riêng với kết nối riêng, một bot tùy chỉnh sẽ chạy các tính năng của Noxyr dưới tên bạn, và bài viết về các node lưu trữ và thời gian hoạt động giải thích cách những bot đó được duy trì hoạt động.
Câu hỏi thường gặp
Bot phải chia shard ở bao nhiêu máy chủ?
Discord yêu cầu chia shard ở 2.500 máy chủ. Nhiều bot lớn chia sớm hơn để phân tải.
Một máy chủ có thể nằm trên hai shard không?
Không. Một máy chủ luôn thuộc về đúng một shard, được chọn từ ID của nó và số lượng shard.
Sharding có thay đổi điều gì với thành viên của tôi không?
Không. Đó là chi tiết nội bộ. Nó chỉ quan trọng khi có sự cố, khi một shard có thể lỗi mà không ảnh hưởng đến các shard khác.