arma-thesis

git clone https://git.igankevich.com/arma-thesis.git
Log | Files | Refs | LICENSE

commit 5df34bdd2e92584a5c3ed37b92683ae34f61c221
parent 82f397807661795fe1abcee3ad99e3a6bcf3b1bd
Author: Ivan Gankevich <igankevich@ya.ru>
Date:   Fri,  3 Nov 2017 11:54:55 +0300

Edit fail over section.

Diffstat:
arma-thesis-ru.org | 146+++++++++++++++++++++++--------------------------------------------------------
arma-thesis.org | 2+-
2 files changed, 43 insertions(+), 105 deletions(-)

diff --git a/arma-thesis-ru.org b/arma-thesis-ru.org @@ -3279,6 +3279,7 @@ IP-адреса: замена отображения IP-адресов на чт кластера, а параллельная программа состоит из управляющих объектов, использующих иерархию узлов для динамического распределения нагрузки и свою собственную иерархию для перезапуска управляющих объектов в случае сбоя узла. + **** Динамическое распределение ролей. Отказоуйстовчисть параллельной программы\nbsp{}--- это одна из проблем, которая должна решаться планировщиком задач обработки больших данных или @@ -3319,20 +3320,21 @@ IP-адреса: замена отображения IP-адресов на чт Многие распределенные хранилища типа "ключ-значение" и параллельные файловые системы имеют симметричную архитектуру, в которой роли руководителя и подчиненного распределяются динамически, так что любой узел может выступать в -роли руководитля, если текущий руководящий узел выходит из строя, однако, такая -архитектура до сих пор не используется в планировщиках задач обработки больших -данных и высокопроизводительных вычислений. Например, в планировщике задач -обработки больших данных YARN, роли руководителя и подчиненного являются -статическими. Восстановление после сбоя подчиненного узла осуществляется путем -перезапуска работавшей на нем части задачи на одном из выживших узлов, а -восстановление после сбоя руководящего узла осуществляется путем установки -резервного руководящего узла\nbsp{}cite:murthy2011architecture. Оба руководящих -узла управляются сервисом Zookeeper, который использует динамическое -распределение ролей для обеспечения своей -отказоустойчивости\nbsp{}cite:okorafor2012zookeeper. Таким образом, отсутствие -динамического распределения ролей у планировщика YARN усложняет конфигурацию -всего кластера: если бы динамические роли были доступны, Zookeeper был бы лишним -в данной конфигурации. +роли руководитля, если текущий руководящий узел выходит из +строя\nbsp{}cite:ostrovsky2015couchbase,divya2013elasticsearch,boyer2012glusterfs,anderson2010couchdb,lakshman2010cassandra. +Однако, такая архитектура до сих пор не используется в планировщиках задач +обработки больших данных и высокопроизводительных вычислений. Например, в +планировщике задач обработки больших данных YARN\nbsp{}cite:vavilapalli2013yarn, +роли руководителя и подчиненного являются статическими. Восстановление после +сбоя подчиненного узла осуществляется путем перезапуска работавшей на нем части +задачи на одном из выживших узлов, а восстановление после сбоя руководящего узла +осуществляется путем установки резервного руководящего +узла\nbsp{}cite:murthy2011architecture. Оба руководящих узла управляются +сервисом Zookeeper, который использует динамическое распределение ролей для +обеспечения своей отказоустойчивости\nbsp{}cite:okorafor2012zookeeper. Таким +образом, отсутствие динамического распределения ролей у планировщика YARN +усложняет конфигурацию всего кластера: если бы динамические роли были доступны, +Zookeeper был бы лишним в данной конфигурации. Такая же проблема возникает в планировщиках задач для высокопроизводительных вычислений, руководящий узел (на котором запущен главный процесс планировщика @@ -3346,13 +3348,13 @@ IP-адреса: замена отображения IP-адресов на чт Наконец, наиболее простой вариант высокой доступности руководящего узла реализован в протоколе VRRP (Virtual Router Redundancy -Protocol)\nbsp{}cite:knight1998rfc2338,hinden2004virtual,nadas2010rfc5798. -Несмотря на то что протокол VRRP предоставляет динамическое распределение ролей, -он не может быть использован в планировщиках задач, поскольку спроектирован для -маршрутизаторов, за которыми стоят реверс прокси серверы. В таких серверах -отсутствует состояние (очередь задач), которое необходимо восстановить после -выхода из строя узла, поэтому их высокую доступность обеспечить проще. Это может -быть реализовано даже без маршрутизаторов, используя вместо этого сервис +Protocol)\nbsp{}cite:rfc2338,rfc3768,rfc5798. Несмотря на то что протокол VRRP +предоставляет динамическое распределение ролей, он не может быть использован в +планировщиках задач, поскольку спроектирован для маршрутизаторов, за которыми +стоят реверс прокси серверы. В таких серверах отсутствует состояние (очередь +задач), которое необходимо восстановить после выхода из строя узла, поэтому их +высокую доступность обеспечить проще. Это может быть реализовано даже без +маршрутизаторов, используя вместо этого сервис Keepalived\nbsp{}cite:cassen2002keepalived. Симметричная архитектура выгодна для планировщиков задач, поскольку позволяет @@ -3383,72 +3385,17 @@ Keepalived\nbsp{}cite:cassen2002keepalived. соответствие между сервисами и узлами кластера, в данной работе они используются как взаимозаменяемые термины. -**** Иерархия управляющих объектов. -Для распределения нагрузки узлы кластера объединяются в древовидную иерархию -(см.\nbsp{}раздел [[#sec-node-discovery]]), и нагрузка распределяется между -непосредственными соседями узла, так что при запуске управляющего объекта на -подчиненном узле главный узел также получают часть его подчиненных объектов. Это -делает систему симметричной и легкой в обслуживании: на каждом узле установлен -один и тот же набор программного обеспечения, что позволяет заменить один узел -другим при выходе из строя первого. Похожее архитектурное решение используется в -хранилищах типа ключ-значение\nbsp{}cite:anderson2010couchdb,lakshman2010cassandra для -обеспечения отказоустойчивости, однако автору неизвестны планировщики задач, -которые используют данный подход. - -В отличие от функции ~main~ в программах на основе библиотеки передачи -сообщений, первый (главный) управляющий объект выполняется только на одном узле, -а дополнительные узлы используются по необходимости. Такое решение позволяет -использовать произвольное количество узлов для запуска задачи и динамически -менять это количество во время ее выполнения. Похожее решение используется в -системах обработки больших объемов -данных\nbsp{}cite:dean2008mapreduce,vavilapalli2013yarn \nbsp{}--- пользователь, -запускающий задачу на кластере, не указывает количество узлов, фактические -узлы\nbsp{}--- это узлы, на которых расположены входные файлы. - -С математической точки зрения управляющий объект \(K\) может быть определен как -векторнозначный функционал, отображающий один управляющий объект на -\(n\)-компонентный вектор управляющих объектов: -\begin{equation*} - K(f): \mathbb{K} \rightarrow \mathbb{K}^n - \qquad - \mathbb{K}^n = \left\{ f: \mathbb{K} \rightarrow \mathbb{K}^n \right\}. -\end{equation*} -Специальный объект \(\mathbb{O}: \mathbb{K} \rightarrow \mathbb{K}^0\) -используется для остановки рекурсии, и передается в качестве аргумента главному -управляющему объекту программы. Аргумент управляющего объекта интерпретируется -следующим образом. -- Если объект является только что созданным объектом, то аргумент\nbsp{}--- это его - родительский объект. -- В остальных случаях аргументом может являться любой объект (чаще всего - дочерний по отношению к текущему). - -Объекты обрабатываются в цикле, который начинается с выполнением главного -объекта, затем внутри главного объекта создаются и асинхронно выполняются другие -объекты. Цикл продолжается до тех пор пока какой-либо объекта не вернет -\(\mathbb{O}\). Поскольку вызов функции может породить сразу несколько объектов, -они выполняются параллельно, что приводит к быстрому заполнению пула объектов. -Поскольку объекты из пула могут выполняться в произвольном порядке, несколько -потоков одновременно выбирают объекты для обработки, и при переполнении -пула объекты могут быть переданы на другие узлы кластера без явного указания в -исходном коде программы. - -Вычислительные объекты реализованы в виде замыканий (функторы в C++)\nbsp{}--- -объектов-функций, которые сохраняют в себе аргументы, ссылку на породивший их -объект и данные из предметной области задачи. Данные обрабатываются либо при -выполнении объекта, либо для параллельной обработки создаются подчиненные -объекты. Когда обработка завершена, родительский объект вызывается с дочерним -объектом в качестве аргумента для сбора результатов обработки. - **** Обработка выхода узлов из строя. -Наиболее распространенная стратегия при выходе из строя подчиненного узла -является перезапуск выполнявшихся на нем объектов на рабочих узлах\nbsp{}--- -стратегия, которой следует язык Erlang при перезапуске подчиненных процессов\nbsp{}cite:armstrong2003thesis. Для того что реализовать этот метод в рамках иерархии -управляющих объектов, узел-отправитель сохраняет каждый объект, передаваемый на -другие узлы кластера, и в случае отказа произвольного количества узлов, на -которые были переданы объекты, их копии перераспределяются между оставшимися -узлами без индивидуальной обработки программистом. Если больше не осталось -узлов, на которые можно отправить объекты, то они выполняются локально. В -отличие от "тяжеловесного" метода контрольных точек восстановления, +Основной стратегией при выходе из строя подчиненного узла является перезапуск +выполнявшихся на нем объектов на рабочих узлах\nbsp{}--- стратегия, которой +следует язык Erlang при перезапуске подчиненных +процессов\nbsp{}cite:armstrong2003thesis. Для того что реализовать этот метод в +рамках иерархии управляющих объектов, узел-отправитель сохраняет каждый объект, +передаваемый на другие узлы кластера, и в случае отказа произвольного количества +узлов, на которые были переданы объекты, их копии перераспределяются между +оставшимися узлами без индивидуальной обработки программистом. Если больше не +осталось узлов, на которые можно отправить объекты, то они выполняются локально. +В отличие от "тяжеловесного" метода контрольных точек восстановления, используемого планировщиками задач HPC кластеров, древовидная иерархия узлов в паре с иерархией объектов позволяет автоматически продолжить выполнение программы при выходе из строя произвольного количества подчиненных узлов без @@ -3540,24 +3487,15 @@ Keepalived\nbsp{}cite:cassen2002keepalived. **** Результаты тестирования. Методы отказоустойчивости были протестированы на физическом кластере -(см.\nbsp{}табл.\nbsp{}[[tab-cluster]]) на примере программы, генерирующей -взволнованную морскую поверхность, подробно описанной в разделе -[[#sec:arma-algorithms]]. Программа состоит из серии фильтров, каждый из которых -применяется к результату работы предыдущего. Некоторые из фильтров вычисляются -параллельно, так что вся программа состоит из последовательно выполняющихся -шагов, некоторые из которых внутри реализованы параллельно из соображений -эффективности. Только наиболее ресурсоемкий этап программы (генерация -взволнованной морской поверхности) выполняется параллельно на всех узлах, другие -этапы выполняются параллельно на всех процессорных ядрах главного узла. - -#+name: tab-cluster -#+caption: Конфигурация кластера, на котором проводились эксперименты. -#+attr_latex: :booktabs t -| CPU | Intel Xeon E5440, 2.83GHz | -| RAM | 4Gb | -| HDD | ST3250310NS, 7200rpm | -| Кол-во узлов | 12 | -| Кол-во ядер на узел | 8 | +(см.\nbsp{}табл.\nbsp{}[[tab-ant]]) на примере программы, генерирующей взволнованную +морскую поверхность, подробно описанной в разделе [[#sec:arma-mpp]]. Программа +состоит из серии фильтров, каждый из которых применяется к результату работы +предыдущего. Некоторые из фильтров вычисляются параллельно, так что вся +программа состоит из последовательно выполняющихся шагов, некоторые из которых +внутри реализованы параллельно из соображений эффективности. Только наиболее +ресурсоемкий этап программы (генерация взволнованной морской поверхности) +выполняется параллельно на всех узлах, другие этапы выполняются параллельно на +всех процессорных ядрах главного узла. Программа была переписана под отказоустойчивую версию фреймворка, что потребовало лишь небольших изменений исходного кода для корректной обработки diff --git a/arma-thesis.org b/arma-thesis.org @@ -3126,7 +3126,7 @@ architecture, in which principal and subordinate roles are dynamically distributed, so that any node can act as a principal when the current principal node fails\nbsp{}cite:ostrovsky2015couchbase,divya2013elasticsearch,boyer2012glusterfs,anderson2010couchdb,lakshman2010cassandra. -however, this architecture is still not used in big data and HPC job schedulers. +However, this architecture is still not used in big data and HPC job schedulers. For example, in YARN big data job scheduler\nbsp{}cite:vavilapalli2013yarn principal and subordinate roles are static. Failure of a subordinate node is tolerated by restarting a part of a job, that worked on it, on one of the