Моделирование отказа узла в DHT

В настоящее время я провожу тестирование производительности бесплатного кондитерского DHT. Freepastry — это DHT с открытым исходным кодом, написанный на Java.

Цель состоит в том, чтобы отслеживать влияние на DHT, когда определенное количество узлов выходит из строя. Моя проблема в том, что я не уверен, как лучше всего устранить узлы. На данный момент каждый узел работает с другого порта на моей машине. Я уничтожаю эти узлы с помощью метода destroy() из Pastry API http://www.freepastry.org/FreePastry/javadoc21a3/rice/pastry/PastryNode.html#destroy()

Я беспокоюсь, что это может быть нереально при моделировании сбоя узла, и должен ли я убивать узлы другим способом, например, с помощью tcpkill?

Я использую снежный барс Mac OS X и хотел бы услышать какие-либо предложения?


person Travis    schedule 27.07.2012    source источник
comment
Почему бы не запустить на реальных виртуальных машинах и действительно не вывести из строя виртуальные машины?   -  person Flexo    schedule 27.07.2012
comment
У меня нет большого опыта работы с виртуальными машинами, отличными от VMWare fusion и т. д., но количество рассматриваемых узлов будет больше 100. Возможно ли запустить такое количество виртуальных машин?   -  person Travis    schedule 27.07.2012
comment
Это, вероятно, немного подталкивает его, если у вас нет действительно здоровенной машины. Возможно, вы сможете сделать это с помощью чего-то вроде пользовательского режима Linux или OpenVZ, то есть виртуализации на уровне контейнера.   -  person Flexo    schedule 27.07.2012


Ответы (1)


Существуют различные формы отказов узлов.

Наиболее распространенным является просто переход узла в автономный режим из-за закрытия приложения, в котором запущен 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