1 SCIENCE TIME ■
тл 1(4 5л ' tL® -1 щг 1 - 4_W JT |Г1 1 r^g) ОБЗОР ПРИНЦИПА РАБОТЫ ПИРИНГОВЫХ СЕТЕЙ И ИЗУЧЕНИЕ ВОЗМОЖНОСТИ ИХ ПРИМЕНЕНИЯ ДЛЯ КОММУТАЦИИ В РАСПРЕДЕЛЁННЫХ ВЫЧИСЛЕНИЯХ Гриценко Алексей Викторович, Донской государственный технический университет (ДГТУ), г. Ростов-на-Дону E-mail: express-rus@yandex.ru
Аннотация. Статья посвящена вопросам использования пиринговых соединений в распределенных вычислениях. Озвучены возможности и преимущества децентрализованного подхода. Рассмотрена тестовая задача в теории и на практике.
Ключевые слова: вычисления, децентрализованность, задача, надежность, P2P, сети.
Пиринговые сети в настоящее время ассоциируются у обывателя с незаконным распространением мультимедийного контента и программного обеспечения. Однако возможности протокола наталкивают на размышления о более полезном и легитимном применении, в данном случае рассмотрим задачу распределенных вычислений.
Постановка абстрактной задачи:
- размер (сложность) задачи: [0, да];
- количество подзадач (отдельно вычисляемые части): [0, да];
- решение: в одной из подзадач или отсутствует.
Требования к участникам вычисления:
- участник: компьютер любой конфигурации;
- местонахождение: без ограничений;
- IP адрес: любой, в т.ч. динамический, за NAT;
- доступ в интернет: не постоянный.
Требования к надежности:
- децентрализованность;
- сохранность результата.
Таким образом, мы хотим иметь возможность решать задачи любой
| SCIENCE TIME |
сложности, задействовав самые разные компьютеры по местоположению и подключенному каналу связи. Кроме того мы намереваемся сэкономить затраты на управление сетью, еще и повысив отказоустойчивость системы, лишив ее «узкого» места - сервера.
Одноранговая, децентрализованная или пиринговая (англ. peer-to-peer, P2P — равный к равному) сеть работает на одноименном абстрактном протоколе P2P и в модели стека сетевых протоколов TCP/IP относятся к прикладному уровню, таким образом, P2P сеть является наложенной сетью (overlay), функционирующей поверх сети Интернет и использующей существующие транспортные протоколы TCP или UDP. Децентрализованный подход позволяет считать каждого участника равноправным (см. схему на рис.1). Каждый узел может выступать в роли сервера и одновременно клиента для другого узла.
R о
о
Рис. 1 Схема одноранговой сети
В качестве тестовой задачи для равноправного клиента, смоделируем
| SCIENCE TIME |
задачу поиска простых чисел в диапазоне от 100000000 до 10000000000000000000. В качестве подзадачи клиент будет должен выбрать участок диапазона, в котором будет осуществлён поиск. Установим размеры участков константой в 1млн (рис.2, рис.3).
участок 1 участок 2 \ /
от 100000000 J от 101 000 000
до 100000000 + 1мл н. до 101 000 000 + 1млн.
Рис. 2 Разбиение задачи на участки
Алгоритм равноправного клиента и его эксплуатации представлен ниже.
1. Для поддержания функционирования пиринговой сети хотя бы один компьютер должен быть доступен в интернете.
2. Распространение программы-клиента организуем на веб-сайте. Там же необходимо опубликовать список других подключенных узлов, который будет являться базовым, и использоваться первоначально. В дальнейшем клиент будет получать актуальную информацию о других участниках внутри образованной сети.
3. При первом запуске клиента, он уже будет включать в себя базовый список узлов. Клиент начинает опрашивать узлы, получая от них актуальную информацию о задачах и ходе работ. Вместе с тем получает список узлов известных другим участникам. В сетях огромного масштаба такие операции будут отнимать много ресурсов, поэтому можно ограничить константой число актуальных, известных узлов на каждый узел. Таким образом, каждый узел будет обмениваться информацией с константой узлов, а если какие-то узлы будут недоступны, то клиент найдет им замену.
4. Имея актуальную информацию, клиент выбирает себе задачу, в которой берет свободный участок для проведения поиска простых чисел. Происходит оповещение узлов о бронировании этой задачи. В свою очередь остальные узлы рекурсивно передают эту информацию дальше известным им узлам.
5. После выбора задачи узел приступает к ее решению и может быть отключен от сети. Чтобы в дальнейшем передать результат и получить
следующую задачу, будет снова необходимо подключиться к сети.
Рис. 3 Разбиение задачи на участки результаты
Отдельно стоит обратить внимание на процесс локального решения подзадачи (на конкретном узле). Современные процессоры имеют 2 или более ядра, что дает возможность дополнительного распараллеливания локальных вычислений. Это значит, что подзадачу можно решить еще быстрее, разделив ее на дополнительные участки, количество которых кратно логических процессоров (рис.4).
участок 1
V
}
+ 1м;
от 100000000 до 100000000 + 1млн7Г~~-х
1/4 участка 1
Рис.4 Дополнительное разбиение участка задачи
Для проведения практического испытания был написан тестовый клиент,
«
который представляет собой exe под семейство Windows NT (см. диаграмму классов на рис.5). Требует наличия net framework 4.0.
Рис. 5 Диаграмма классов клиента
Реализация программы исполняемый модуль, Logic -
состоит из классов (модулей): Program -Ф исполняемым модуль, Logic - логика поиска простых чисел, Task - описание задачи, Node - описание и адрес узла. Хранение данных об узлах и задачах каждым отдельным узлом осуществляется в формате Json (рис.7, рис.8). Испытания проводились на 4х машинах, одна из которых имела сведенья о поставленной задаче, а остальные только лишь адрес этой машины (см. процесс работы клиентов на рис.6).
И D:\compute\comp1\ConsoleApplicationCompute.e3
PullData done! Nodes = 2, Tasks =
Compute task... Done.
PullData done! Nodes = 4, Tasks = l,
[Compute task... Done.
PullData done! Nodes = 4, Tasks =
No tasks available
PullData done! Nodes = 5, Tasks = 1,, No tasks available
PullData done! Nodes = 5, Tasks = 1, No tasks available
PullData done! Nodes = 5, Tasks = 1., No tasks available
PullData done! Nodes = 5, Tasks = 1,, No tasks available
PullData done! Nodes = 5, Tasks = 1, No tasks available
PullData done! Nodes = 5, Tasks = 1., No tasks available
SubTasks = Primes = 0
SubTasks =1, Primes = 4B32 SubTasks = 3, Primes = 12008
SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008
SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3, Primes = 1200S
M 1 D:\compute\comp2\ConsoleApplic
PullData done! Nodes = 3, Ta: Compute task... Done.
PullData done! Nodes = 4, Ta: iCompute task... Done.
'PullData done! Nodes = 4, Ta:
No tasks available
PullData done! Nodes = 5, Ta:
1o tasks available
PullData done! Nodes = 5, Ta:
*lo tasks available
PullData done! Nodes = 5, Ta:
No tasks available
PullData done! Nodes = 5, Ta:
4o tasks available
PullData done! Nodes = 5, Ta:
No tasks available
PullData done! Nodes = 5, Ta:
No tasks available
SubTasks = lj Primes = ® SubTasks = 2j Primes = 9604 SubTasks = 3j Primes = 12008
SubTasks = 3, Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008
SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008
mpute\eomp3\Coi nsoleApplicati onCoi mpute.exe
PullData done! Nodes = 4., Tasks = lj SubTasks = 1.,
Compute ask___Done.
PullData done! Nodes = Tasks = lj SubTasks = Primes
No tasks available
PullData done! Nodes = Tasks = 1, SubTasks = 3j Primes
No tasks available
PullData done ! Nodes = 5, Tasks = 1, SubTasks = Primes
No tasks available
PullData done! Nodes = Tasks = lj SubTasks = Primes
No tasks available
PullData done! Nodes = Tasks = 1, 5ubTasks = 3, Primes
No tasks available
PullData done! Nodes = Tasks = 1, SubTasks = 3^ Primes
No tasks available
PullData done! Nodes = Tasks = lj SubTasks = 3, Primes
No tasks available
PullData done! Nodes = 5, Tasks = lj 5ubTasks = 3j Primes
No tasks available
ЖЗ D:\compute\comp4\ConsoleApplicationCompute.e
PullData done! Node: o tasks available ullData done! Node: o tasks available ullData done! Node: o tasks available ullData done! Node: o tasks available ullData done! Node: o tasks available ullData done! Node: o tasks available
SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3, Primes = 12008 SubTasks = 3j Primes = 12008 SubTasks = 3j Primes = 12008
SubTasks = 3j Primes = 12008
Рис. 6 Клиенты в работе
»
118
I SCIENCE TIME I
Уже в первые секунды после запуска каждый новый введенный узел узнавал о задачах и адресах существующих узлов, а те в свою очередь о нем. Клиенты были запущены в разное время, поэтому кто-то включился в работу позже других, захватив оставшиеся задачи (comp2, comp3), а последний клиент (comp4) был запущен, когда все задачи были решены, синхронизировав данные он свидетельствовал об отсутствии задач и стал ожидать новые, попутно выполняя роль сервера для остальных узлов. Распределенный подход к решению задачи во всех проведённых испытаниях, как и предполагалась, в среднем давал прирост скорости вычислений кратный количеству узлов.
@ STUN_Result.cs J | 0 new 75 J | 0 new 76 l3 В datajasks.json □ |g data_nodes.json J | g daita_nodes js ' I [{"result":[],"subTasksLlst":[],"name":null,"start": 1000000000,"end":1000250000,"parent":{"name": "comp nodel","path":"192.163.0.1:59548"}}]
Рис. 7 Задача в формате Json
0 STUN_Result.cs j|0new 75 t3 0new76(J 0datajasks.json j| 0data_nodesjsm J 0data_nodes.js *
1 [{"result": [] , "subTasksLlst": [{"result": [1
,1000000009 nnnnnnnvi f — U iJ и и и _ f f .000000JE f
1000000093, 1000000097, 1000000103 , 1000000123,
1000000181, 1000000207 1000000223, 1000000241,
1000000271 , 1000000289, 1000000297 , 1000000321,
1000000349 , 1000000363, 1000000403 , 1000000409,
1000000411, 1000000427, 1000000433 , 1000000439,
1000000447 , 1000000453, 1000000459 , 1000000483,
J nnnrnnR'T _ U U U U 'J _ J , 1000000531, 1000000579 , ......._ f
1000000613, 1000000637, 1000000663, 1000000711,
1000000753 , 1000000787, 1000000801 , 1000000829,
1000000861, 1000000871, 1000000891 , 1000000901,
1000000919, " 00000093J 1000000933 , 1000000993,
1000001011, 1000001021, 1000001053, 1000001087,
1ППЛЛЛ1ЛПП 1 Г1Г1Г1Г1Л1 1 1ПЛПЛЛ11ei 1 ЛЛЛЛЛ1 om
Рис. 8 Часть решения задачи в формате Json
Спланированная вычислительная сеть, коммутируемая посредством пиринговых соединений, позволяет в прямом и переносном смысле успешно решить поставленную задачу. Децентрализованная сеть обеспечивает
«
I
SCIENCE TIME
I
собственное функционирование без привязки к конкретному серверу. Узлы сами синхронизируются, как минимум, обеспечивая данные дополнительной резервной копией, как максимум участвуют в решении задач. Сеть спокойно выдерживает масштабирование или выпадение узлов. Основная вычислительная работа может происходить офлайн, а временные соединения для обмена информацией не требуют большой скорости интернета и трафика.
Литература:
1. Шилдт Г. C# 4.0. Полное руководство. - М.: Вильямс, 2014.
2. Дэвис А. Асинхронное программирование в C# 5.0. - ДМК Пресс, 2012.
3. MSDN: Каталог API (Microsoft) и справочных материалов [Электронный ресурс]. - Режим доступа. - URL: https://msdn.microsoft.com/Hbrary
120
»