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