Система распределения нагрузки в Discord включает несколько механизмов:
Распределение работы по отправке сообщений. 2 Для этого используется библиотека Manifold, которая группирует идентификаторы процессов Erlang (PID) по удалённому узлу и отправляет на Manifold.Partitioner каждого из этих узлов. 2 Разделитель затем хеширует PID, группирует их по количеству ядер, а потом отправляет дочерним воркеры. 2 Так можно не только распределять нагрузку на CPU при помощи разделения сообщений, но и сокращать трафик сети между узлами. 2
Балансировка нагрузки при создании звонков. 3 Определяется наименее удалённый от пользователя сервер, если он загружен, то выбирается следующий. 3 При создании звонка выстраивается список серверов, отсортированных по возрастанию удаленности от пользователя. 3 Далее выбирается первый и подсчитывается количество активных звонков на нём. 3 Если оно максимально возможное, то смотрят на следующий сервер. 3 Так, пока не найдётся подходящий. 3 В итоге передают IP-адрес сервера пользователю и назначают его в базе для созданной конференции. 3
Оптимизация распределения ресурсов через аппаратное ускорение. 1 По умолчанию эта функция активна и переназначает некоторую нагрузку на GPU, оптимизируя тем самым распределение ресурсов комплектующих. 1 Её нужно отключить, если на компьютере установлена слабая видеокарта, поскольку она может не справиться с нагрузкой. 1