Предполагая, что у меня есть кластер из n Erlang узлов, некоторые из которых могут быть в моей локальной сети, в то время как другие могут быть подключены с помощью WAN (то есть через Интернет), какие механизмы являются подходящими для обслуживают: а) различную доступность / поведение полосы пропускания (например, вызванную задержку) и б) узлы с различной вычислительной мощностью (или даже ограничениями памяти)?
Другими словами, как мне назначить приоритеты локальным узлам, обладающим большой вычислительной мощностью, по сравнению с теми, которые имеют большую задержку и могут быть менее мощными, или как бы я идеально расставил приоритеты для высокопроизводительных удаленных узлов с высокими задержками передачи, чтобы конкретно те процессы с относительно большим соотношением вычислений / передачи (то есть выполненной работы на сообщение, в единицу времени)?
Я в основном думаю о том, чтобы провести базовый бенчмаркинг каждого узла в кластере, отправив им тестовый процесс для запуска во время инициализации, чтобы можно было рассчитать задержки, связанные с обменом сообщениями, а также общую скорость вычислений (то есть использование специфичного для узла таймера для определения того, как быстро узел завершает выполнение любой задачи).
Вероятно, что-то подобное нужно было бы делать повторно, с одной стороны, чтобы получить репрезентативные данные (то есть усреднение данных), а с другой стороны, это могло бы быть даже полезно во время выполнения, чтобы иметь возможность динамически приспосабливаться к изменяющимся условиям выполнения.
(В том же смысле, вероятно, хотелось бы установить приоритеты локально работающих узлов над узлами, работающими на других машинах)
Это должно было бы помочь оптимизировать внутреннюю диспетчеризацию, чтобы определенные узлы обрабатывали определенные задания.