Существуют различные формы отказов узлов.
Наиболее распространенным является просто переход узла в автономный режим из-за закрытия приложения, в котором запущен DHT.
Изменение динамического IP-адреса внутреннего интернет-соединения, по сути, имеет несколько иной эффект, поскольку оно делает недействительными все существующие записи таблицы маршрутизации, но общее количество узлов не уменьшается. Вы теряете один и получаете новый.
Другой распространенной проблемой являются проблемы доступности из-за NAT. Видимость этого узла может зависеть от типа NAT и от того, связывались ли вы с ним в последнее время.
Результирующие эффекты оттока могут быть довольно сложными. Прежде всего, время безотказной работы отдельных узлов обычно следует экспоненциальному распределению. Многие из них доступны только в течение короткого времени, и очень немногие остаются стабильными в течение нескольких дней или месяцев.
Предположим, что у вас есть стабильное ядро из узлов со средним или долгим сроком службы, которые на самом деле составляют 90% сети. 10% одних и тех же узлов, постоянно появляющихся и исчезающих, вызовут некоторый избыточный трафик, но они не нанесут большого вреда сети. У вас много оттока, но мало влияния.
Если 10 % популяции узлов отключаются через 10 минут и заменяются совершенно новым набором узлов из неактивного пула, то вы, по сути, теряете 10 % своей избыточности каждые 10 минут. Если репликация данных между узлами не поспевает за этим или даже не существует, ваши данные будут уменьшаться в геометрической прогрессии. У вас также много оттока, но огромное влияние.
Я даже не уверен, какая симуляция лучше всего отразит реальность. Я предполагаю, что наиболее реальным ограничением является наличие фиксированного пула потенциальных узлов. Это компьютеры, на которых установлена реализация DHT.
Затем каждый узел будет иметь профиль времени, как долго он в среднем остается в рабочем состоянии и как долго он будет в среднем не работать (где эти два параметра частично коррелируют друг с другом. Узлы с длительным временем безотказной работы обычно не имеют очень длительного времени простоя. поскольку они, вероятно, всегда включены). И каждый узел действует на эти параметры самостоятельно. На самом деле время суток также играет роль, что легко увидеть здесь: http://dsn.tm.uni-karlsruhe.de/english/2936.php
Итак... короче говоря, просто запуск и случайное уничтожение нескольких узлов не даст вам реалистичного результата об устойчивости DHT, поскольку воздействие будет сильно различаться.
Что касается технической части, вы, вероятно, захотите запустить их все на одной виртуальной машине Java и использовать многопоточность или неблокирующий ввод-вывод, чтобы уменьшить накладные расходы, связанные с запуском каждого экземпляра на отдельной виртуальной машине. Это также позволит вам более реалистично планировать их время работы и простоя.
Поскольку вы можете назначить несколько IP-адресов одному компьютеру, вы сможете запускать сотни тысяч узлов на компьютере, просто основываясь на количестве IP/портов. Но потребление ресурсов процессом в конечном итоге приведет к зависанию даже самой быстрой системы, поскольку очень немногие реализации DHT на самом деле реализованы для такого масштабирования.
Так что вам, вероятно, придется запустить это в сети с несколькими тысячами узлов на компьютер, чтобы получить что-то близкое к реалистичному.
Либо так, либо вы прибегаете к большему количеству математических симуляций вместо реальных реализаций.
person
the8472
schedule
01.08.2012