Научная статья на тему 'Муравьиные алгоритмы для планирования вычислений в центрах обработки данных'

Муравьиные алгоритмы для планирования вычислений в центрах обработки данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
288
41
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МУРАВЬИНЫЕ АЛГОРИТМЫ / ЦЕНТР ОБРАБОТКИ ДАННЫХ / ANT ALGORITHM / DATA CENTER

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Костенко В. А., Плакунов А. В.

Рассмотрен основанный на схеме муравьиных колоний алгоритм для решения задачи отображения запросов на физические ресурсы центров обработки данных. Приведены результаты экспериментального исследования свойств алгоритма и его сравнение с алгоритмами, сочетающими жадные стратегии и ограниченный перебор.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Муравьиные алгоритмы для планирования вычислений в центрах обработки данных»

6. Gentry С., Halevi S., Smart N. Fully homomorphic encryption with polylog overhead//Proc. of the 31-st Intern. Conf. "Advances in Cryptology — EUROCRYPT 2012". Lecture Notes in Computer Science. Vol. 7237. Berlin-Heidelberg: Springer, 2012. P. 465-482.

7. Lopez-Alt A., Tromer E., Vaikuntanathan V. On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption // Proc. of the 44-th Annual ACM Symp. on Theory of Computing. New York: ACM, 2012. P. 1219-1234.

8. Gahi Y., Guennoun M., El-Khatib K. A secure database system using homomorphic encryption schemes // Proc. of the 3-d Intern. Conf. on Advances in Databases, Knowledge, and Data Applications. Red Hook: IARIA, 2011. P. 54-58.

9. Boneh D., Gentry C., Halevi S., Wang F., Wu D.J. Private database queries using somewhat homomorphic encryption // Proc. of ACNS. Lecture Notes in Computer Science. Vol. 7954. Berlin-Heidelberg: Springer, 2013. P. 129-148.

10. Van Dijk M., Juels A. On the impossibility of cryptography alone for privacy-preserving cloud computing // Proc. of the 5-th USENIX Conf. on Hot Topics in Security. Berkeley: USENIX Association, 2010. P. 1-8.

11. Варновский Н.П., Мартишин С. А., Храпченко M.B., Шокуров А.В. Пороговые системы гомоморфного шифрования и защита информации в облачных вычислениях // Программирование. 2015. № 4. С.47-51. (Varnovskiy N.P., Martishin S.A., Khrapchenko M.V., Shokurov A.V. Secure cloud computing based threshold homomorphic encryption // Programming and Computer Software. 2015. 41. N 4. P. 215-218.)

12. Варновский Н.П., Захаров В. А., Шокуров А. В. К вопросу о существовании доказуемо стойких систем облачных вычислений // Вестн. Моск. ун-та. Сер. 15. Вычисл. матем. и киберн. 2016. № 2. С. 32-38. (Varnovskiy N. P., Zakharov V. A., Shokurov A.V. On the existence of provably secure cloud computing systems // Moscow Univ. Comput. Math, and Cybern. 2016. 36. N 2. P. 83-88.)

13. Barker S. Deductive database security // Research Directions in Data and Applications Security. IFIP Advances in Information and Communication Technology. Vol. 128. New York: Springer, 2003. P. 103-114.

14. Sandhu R., Coyne E. J., Feinstein H.L., Youman С. E. Role-based access control models // IEEE Computer. 1996. 29. N 2. P. 38-47.

Поступила в редакцию 18.05.16

УДК 004.031.43

В. А. Костенко1, А. В. Плакунов2

МУРАВЬИНЫЕ АЛГОРИТМЫ ДЛЯ ПЛАНИРОВАНИЯ ВЫЧИСЛЕНИЙ В ЦЕНТРАХ ОБРАБОТКИ ДАННЫХ*

Рассмотрен основанный на схеме муравьиных колоний алгоритм для решения задачи отображения запросов на физические ресурсы центров обработки данных. Приведены результаты экспериментального исследования свойств алгоритма и его сравнение с алгоритмами, сочетающими жадные стратегии и ограниченный перебор.

Ключевые слова: муравьиные алгоритмы, центр обработки данных.

1. Введение. В работе рассматривается задача планирования вычислений в центрах обработки данных (ЦОД), работающих в режиме "инфраструктура как услуга" (Infrastructure-asa-Service, IaaS). Задача заключается в построении отображения запросов создания виртуальных машин и виртуальных систем хранения данных, соединенных виртуальными каналами, на вычислительные серверы и серверы хранения данных, и построении маршрутов для виртуальных

1 Факультет ВМК МГУ, вед. науч. сотр., к.ф.-м.н., e-mail: kostQcs.msu.su

2 Факультет ВМК МГУ, асп., e-mail: artaccQlvk.cs.msu.su

* Работа выполнена при финансовой поддержке Министерства образования и науки Российской Федерации, уникальный номер (ID) RFMEFI60714X0070, соглашение № 14.607.21.0070.

каналов в сети обмена ЦОД. При работе ЦОД в режиме IaaS необходима возможность задания критериев качества сервиса (Service Level Agreement, SLA) для всех типов ресурсов: систем хранения данных, вычислительных и сетевых ресурсов. Вычислительные ресурсы, системы хранения данных и сетевые ресурсы должны рассматриваться как планируемые типы ресурсов, и их планирование должно происходить согласованно в смысле соблюдения соглашений о качестве сервиса. Для получаемых отображений виртуальных ресурсов на физические ресурсы ЦОД необходимо гарантированное выполнение запрошенных SLA.

Наиболее полный обзор известных алгоритмов планирования вычислений в ЦОД приведен в [1]. На практике в основном используются жадные алгоритмы. Это обусловлено тем, что они имеют низкую вычислительную сложность. Недостатком жадных алгоритмов является то, что применительно к разным частным задачам их точность может сильно отличаться. В частной задаче [2] на возможные значения параметров общей задачи наложены ограничения. Основной проблемой при использовании жадных алгоритмов является формирование ограничений на исходные данные таким образом, чтобы выделить частную задачу, для которой алгоритм будет гарантированно находить решение с известной точностью, или получение верхних оценок точности для заданной частной задачи. Предложенные в работах [3, 4] алгоритмы основаны на сочетании жадных стратегий и ограниченного перебора. Они позволяют задавать баланс между вычислительной сложностью и точностью алгоритма. Однако, при задании ограничения на допустимую вычислительную сложность алгоритма они обладают, хоть и в меньшей мере, тем же недостатком, что и жадные алгоритмы.

Муравьиные алгоритмы позволяют автоматически настраиваться на задачу с конкретными значениями исходных данных путем дополнительной разметки исходных данных, которая используется для построения решения на каждой итерации алгоритма и уточняется по мере увеличения числа итераций. Таким образом, при использовании муравьиных алгоритмов не возникает проблемы выделения частной задачи и получения для нее оценки точности алгоритма. Алгоритмы, основанные на использовании схемы муравьиных колоний, были успешно применены для решения таких комбинаторных задач, как квадратичная задача о назначениях [5], задача упаковки в контейнеры [6], задачи построения расписаний [7-9].

В данной работе показано, что вычислительная сложность и точность алгоритма, основанного на схеме муравьиных колоний, не зависит от частной задачи.

2. Задача планирования вычислений в ЦОД. Для формулировки задачи устранения фрагментации физических ресурсов ЦОД будем использовать математическую модель функционирования ЦОД, используемую в работах [3, 4]. Приведем из [3] основные понятия, которые необходимы для формулировки задачи и описания предлагаемого алгоритма.

Модель физических ресурсов ЦОД задается размеченным графом Н = (PUMUK, L), где Р — множество вычислительных узлов, М — множество хранилищ данных, К — множество коммутационных элементов сети обмена ЦОД, L — множество физических каналов передачи данных. На множествах Р, Л /. К и L определены векторные функции скалярного аргумента, задающие соответственно характеристики вычислительных узлов, хранилищ данных, коммутационных элементов и каналов передачи данных (в дальнейшем — функции разметки графа Н). Например, для вычислительного узла может задаваться количество ядер, объем оперативной и дисковой памяти.

Ресурсный запрос задается размеченным графом G = (W где W — множество вирту-

альных машин, S — множество виртуальных систем хранения данных (storage-элементов), Е — множество виртуальных каналов передачи данных. На множествах W, S и Е определены векторные функции скалярного аргумента, задающие характеристики запрашиваемого виртуального элемента (требуемое качество сервиса). Назначением ресурсного запроса будем называть отображение:

А : G Н = {W Р, S М, Е {К, L}}.

Между характеристиками запросов и соответствующими характеристиками физических ресурсов возможно три типа отношений. Обозначим через х характеристику элемента запроса и через у соответствующую ей характеристику физического ресурса. Тогда эти отношения можно записать следующим образом.

1. Недопустимость перегрузки "емкости" физического ресурса: ^ х^ ^ у^ где В^ — множество

ieвj

запросов, назначенных на физическом ресурсе

2. Соответствие типов физического и виртуального ресурса: х = у.

3. Наличие требуемых характеристик у физического ресурса: х ^ у.

Отображение А называется корректным, если для всех физических ресурсов и всех их характеристик выполняются отношения 1-3.

Остаточным графом доступных ресурсов Нтез называется граф //. в котором переопределены значения функций разметки по характеристикам, которые должны удовлетворять отношению 1. Значение каждой характеристики физического ресурса уменьшается на сумму значений соответствующей характеристики виртуальных ресурсов, назначенных на этот физический ресурс.

Входом алгоритма является остаточный граф доступных ресурсов Нтез и множество ресурсных запросов {Сгг}. В множество {О^, кроме вновь поступивших запросов, могут входить выполняемые виртуальные ресурсы, для которых допустима миграция. Если в {£?г} есть виртуальные ресурсы, то для элементов графа //,,«. на которых выполняются виртуальные ресурсы, переопределяются (увеличиваются) значения функций разметки графа Н по характеристикам, которые должны удовлетворять отношению 1.

Требуется: разместить на выполнение в ЦОД максимальное число запросов из множества {£?г}, таких, что отображения {Л, : (!, —г II. 1 ^ % ^ п) являются корректными. Назначенные виртуальные ресурсы, включенные в множество {О^, не должны сниматься с выполнения.

3. Схема работы муравьиных алгоритмов. Идея муравьиных алгоритмов [10] основана на моделировании поведения муравьев при нахождении кратчайшего пути от муравейника к источнику пищи. Муравьи при перемещении оставляют особое вещество феромон, который используется в дальнейшем другими муравьями при выборе пути. Чем выше концентрация феромона на том или ином пути, тем выше вероятность того, что муравьи будут выбирать для движения именно этот путь.

Для применения муравьиных алгоритмов задачу построения расписания надо свести к задаче нахождения в графе замкнутого пути минимальной длины, в который каждая вершина входит однократно (задача коммивояжера). Общую схему работы муравьиных алгоритмов можно представить в следующем виде.

1. Задание начального количества феромона на ребрах графа, количества муравьев и их начального положения.

2. Построение муравьями пути (каждый муравей строит путь независимо от остальных).

3. Обновление количества феромона на ребрах.

4. Если условие останова не выполнено, то переход к п. 2.

Операция построения муравьем пути. Муравей строит путь, переходя из одной вершины в другую. Пройденные муравьем вершины добавляются в табу-список (память муравья), чтобы избежать повторного их посещения. Вероятность перехода муравья из г-ж вершины в ^'-ю зависит от количества феромона на данном ребре, значения локальной целевой функции на ребре и состояния табу-списка. Вероятность перехода к-то муравья из г-ж вершины в ^'-ю на итерации £ рассчитывается по следующей формуле:

Здесь Ту(£) — количество феромона, а r]ij(t) — значение локальной целевой функции на ребре (г, а, /3 ^ 0 — параметры алгоритма, определяющие важность феромонного следа и локальной целевой функции, Ь¡, — множество вершин, включенных в табу-список муравья к, <7| — множество вершин, не посещенных муравьем к ж соединенных дугой с вершиной г.

ре.Рк

О

3 е

Операция обновления количества феромона на ребрах. После того как все муравьи завершили построение путей, обновляется количество феромона на ребрах:

Тф + 1) = (1 - р)тф) + АДту,*(*) = 1

к=1 10, {'чз)£тк{г).

Здесь Тк(1) — путь, построенный к-м муравьем, а Р(Т) — целевая функция, определяющая качество пути, т — количество муравьев, р € [0,1] — коэффициент испарения феромонов. Испарение феромонов вводится для избегания попадания алгоритма в локальный оптимум, когда первый найденный путь с относительно хорошим значением целевой функции становится единственно значимым.

4. Алгоритм планирования вычислений в ЦОД. Процесс решения данной задачи разбивается на три основных задачи.

1. Назначение виртуальных машин на физические вычислительные узлы.

2. Назначение storage-элeмeнтoв на системы хранения данных.

3. Построение путей для виртуальных каналов в сети обмена ЦОД.

Задачи 1 и 2 решаются муравьиным алгоритмом. Для этого требуется свести каждую из этих задач к задачам поиска наилучшего пути в графе. Описание предлагаемого способа приводится далее в п. 4.1.

После того, как виртуальные машины назначены на физические вычислительные узлы и з!юга-^сюломонты назначены на системы хранения данных, задача построения путей для виртуальных каналов решается алгоритмом Дейкстры, в котором специальным образом вычислены веса дуг.

4.1. Построение графа для муравьиного алгоритма. Пусть в ЦОД имеется N вычислительных узлов и систем хранения данных, и пусть требуется назначить Д запросов, состоящих из щ, 1 ^ г ^ Д, виртуальных машин и 1 ^ г ^ ,1, storage-элeмeнтoв. Введем вершины ..., Удг и ¿>1,..., где вершина Т^ соответствует вычислительному узлу с номером а вершина со-

п

ответствует системе хранения данных с номером Введем также Ь вершин, Ь = ^ щ, следующим

г= 1

образом: вершина соединена двумя разнонаправленными дугами с каждой вершиной VI,..., Удг, 1 < к < к

Для каждого 1 ^ к ^ Ь вершина соединяется двумя разнонаправленными дугами с вер-

,1

шинами 1 ^ I ^ Ь, I ф к. Аналогичным способом для каждого введем

г=1

вершины . Для каждого 1 ^ к ^ 5 вершины соединяются двумя разнонаправленными дугами с вершинами 1 ^ I ^ I ф к, и с вершинами Бг,... ,Бд. Добавим также вершину О, соединенную с каждой вершиной У^, 1 ^ к ^ Ь, и Б'а, 1 двумя разнонаправленными дугами. С этой вершины будет начинаться путь каждого муравья. Переходить в вершину О муравей может только в случае, когда других доступных вершин нет. Далее построенный граф будем называть графом С, его структура приведена на рисунке.

Каждой дуге графа С сопоставлено два значения: Ту — количество феромона на дуге графа (г, з), и щ — значение эвристической функции на дуге графа (г, ]). Каждой вершине У^,... ,У,... ... , Ум и Б\,..., вг,..., сопоставлен вектор текущих характеристик (т. е. количество свободных ресурсов каждого типа) узла с номером г. Эвристическая функция задается двумя способами в зависимости от типа дуги графа.

1- Щ = Хл тах 'шк ) Для дуг графа, соединяющих две вершины виртуальных элементов, где у. V ч>е1¥° /

— компонента вектора характеристик элемента — множество всех виртуальных

машин или хранилищ данных из всех запросов.

Структура графа С

2- 'Пц = Е ( Е и'к + Ч) Зк

г- 1чи;еИЛ

для дуг графа, соединяющих вершину виртуального элемента

с вершиной физического элемента, где И'7; множество всех виртуальных элементов, назначенных в данный момент на физический узел ]. При этом если какое-либо из слагаемых суммы дробей оказывается больше 1, то т^ полагается равным 0. Это означает, что муравей не сможет перейти в вершину, на которую нельзя назначить выбранный ранее виртуальный элемент. Когда множество \У) изменяется в процессе работы алгоритма (например, при назначении очередного виртуального элемента на физический элемент значение эвристической функции для дуг, ведущих в элемент высчитываете^ заново.

Перед тем как вычисленное значение сопоставляется дуге графа, оно нормализуется в пределах [0,1].

4.2. Построение пути в графе. Для того чтобы по пути в графе С можно было построить решение задачи, процедура построения муравьями пути из п. 3 модифицируется и будет следую-

Все муравьи начинают путь из вершины О.

Находясь в вершине О первый раз, муравей выбирает одну вершину из Т'^1,

V11 , V о •

После

того как муравей прошел по всем вершинам Т'"'0 , он возвращается в вершину О и выбирает одну вершину из ..., б^7. Путь считается построенным, когда муравей пройдет по всем вершинам в*.

• Выбирать вершины ..., Удг и ¿>1,.... муравьям можно более одного раза.

• Выбрав вершину, соответствующую виртуальному элементу (Т^ или муравей обязан выбрать следующей вершину, соответствующую физическому элементу (соответственно V,,, или 3 / п ) •

• Выбрав вершину, соответствующую физическому элементу, муравей обязан вернуться в вершину, из которой пришел.

Таким образом, путь в графе С можно рассматривать как последовательность пар {виртуальный элемент, физический узел}. Каждая пара означает, что данный виртуальный элемент следует назначить на данный физический узел, что позволяет однозначно построить решение задачи по пути в графе С.

4.3. Алгоритм назначения виртуальных каналов. Пусть требуется назначить виртуальный канал Угу между элементами г и ] при условии, что элемент г назначен на физический узел р, элемент ] на узел д. На время построения пути между р и д в физической сети граф ресурсов Нте5 преобразуется следующим образом.

Удаляются дуги вида (д ф р, к), где вершина к является коммутационным элементом, а вершина д — нет.

Удаляются дуги вида (д, к ф д) , где вершина д является коммутационным элементом, а вершина к — нет.

Дуги графа дублируются и становятся разнонаправленными.

Дугам присваивается вес, зависящий от характеристик физического канала и элемента, в который указывает дуга. Для дуги, ведущей из элемента р в коммутационный элемент д, вес вычисляется так:

Vpq = Y1

Y,Ck + yk)/h+[ Ск + 'Ук) / lpq,k

ceCq ' CtzLpq

где Ск — компонента вектора характеристик элемента с, Ся — множество каналов проходящих через коммутационный элемент д, Ьря — множество каналов, проходящих через физический канал (р, я), Ук — к-я компонента вектора характеристик канала, который требуется назначить, 1рд> к — к-я компонента вектора характеристик физического канала, которому соответствует дуга. Этот вес тем больше, чем меньше других виртуальных каналов проходит по выбранной дуге. Если при расчете веса выясняется, что у физического канала или элемента не хватает ресурсов для назначения виртуального канала, дуга удаляется из графа. Рассмотрим связную компоненту полученного графа, содержащую вершину р. Если эта связная компонента содержит также вершину д, то в полученной связной компоненте можно применить алгоритм Дейкстры для поиска кратчайшего (в терминах введенных выше весов) пути из вершины р в вершину д. Такой путь будет корректным, так как он проходит только через коммутационные элементы физической сети.

5. Экспериментальное исследование свойств алгоритма. Целью исследования является сравнение результатов разработанного алгоритма с результатами алгоритма, сочетающего жадные стратегии и стратегии ограниченного перебора (эвристический алгоритм) [3] на одной из типовых топологий сети физических ресурсов центра обработки данных — fat tree. Во всех экспериментах используются следующие характеристики физических и виртуальных элементов:

• виртуальные машины и вычислительные узлы имеют одну характеристику "количество ядер";

• storage-элементы и хранилища данных имеют одну характеристику "размер диска";

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

• виртуальные и физические каналы и сетевые устройства имеют одну характеристику "пропускная способность".

Введем термин "загрузка типа ресурса" как отношение суммы характеристик всех виртуальных ресурсов одного типа по всем запросам к сумме характеристик всех физических ресурсов соответствующего типа, доступных в ЦОД.

Данные были сгенерированы по набору правил так, чтобы их можно было разбить на два класса.

1. Класс данных, требовательный к правильному назначению виртуальных каналов. В этом классе имелись запросы с небольшим количеством виртуальных каналов с высокой запрашиваемой пропускной способностью и запросы с большим количеством каналов с низкой запрашиваемой пропускной способностью. Загрузка сетевых каналов изменялась от 30 до 100%.

2. Класс данных, требовательный к правильному размещению виртуальных машин и storage-элементов. В этом классе в некоторых запросах имелись "большие" элементы, при неэффективном назначении которых назначить виртуальные каналы становилось невозможно. Число таких запросов изменялось от 0 до 30, при этом потенциально возможная загрузка каналов возрастала от 50 до 80%.

Загрузка вычислительных узлов и хранилищ данных в обоих классах постоянна и равна 75%. Количество запросов равно 100.

В табл. 1, 2 приведена зависимость числа назначаемых алгоритмами запросов от загрузки каналов на описанных выше классах данных.

На первом классе данных при загрузке каналов выше 60% муравьиный алгоритм назначает больший процент запросов, и разница между алгоритмами достигает 14% с ростом загрузки

Таблица 1

Результаты работы алгоритмов на первом классе данных

Число запросов, назначенных алгоритмом, % Загрузка каналов, %

30 40 50 60 70 80 90 100

Муравьиный алгоритм 100 100 100 100 100 99 94 85

Эвристический алгоритм 100 100 100 100 97 88 85 71

Таблица 2

Результаты работы алгоритмов на втором классе данных

Число запросов, назначенных алгоритмом, % Число "больших" запросов

0 5 10 15 20 25 30

Муравьиный алгоритм 100 100 99 98 95 93 91

Эвристический алгоритм 100 97 99 94 91 90 85

каналов. На втором классе данных максимальная разница между алгоритмами равна 6% и практически не изменяется с ростом числа "больших" запросов. Такая разница в поведении алгоритмов позволяет сделать вывод о большей универсальности муравьиного алгоритма по сравнению с эвристическим алгоритмом.

6. Заключение. В работе предложен алгоритм назначения ресурсов в центрах обработки данных, основанный на схеме муравьиных колоний. Алгоритм позволяет осуществлять назначение виртуальных машин, storage-элементов и виртуальных каналов согласованно и может быть использован для любой архитектуры ЦОД. Алгоритм планирования вычислений в ЦОД, основанный на схеме муравьиных колоний, обладает свойством настройки на пример задачи в ходе своей работы. Это свойство позволяет избежать зависимости точности алгоритма от частной задачи. Экспериментальное исследование показало, что муравьиный алгоритм назначает 98-100% процентов запросов при загрузке каналов до 70%, и 90-95% запросов при большей загрузке каналов.

СПИСОК ЛИТЕРАТУРЫ

1. Jiangtao Z., Hejiao Н., Xuan W. Resource provision algorithms in cloud computing: A survey // J. Network and Computer Appl. 2016. 64. Issue C. P. 23-42.

2. Гэри M., Джонсон Д. Вычислительные машины и труднорешаемые задачи. М.: Мир, 1982.

3. В д овин П. М., Костенко В. А. Алгоритм распределения ресурсов в центрах обработки данных с раздельными планировщиками для различных типов ресурсов // Известия РАН. Теория и системы управления. 2014. № 6. С. 80-93.

4. Зотов И. А., Костенко В. А. Алгоритм распределения ресурсов в центрах обработки данных с единым планировщиком для различных типов ресурсов // Известия РАН. Теория и системы управления. 2015. № 1. С. 61-71.

5. Stuzle Т., Dorigo М. АСО algorithms for the quadratic assignment problem // New Ideas in Optimization. Maidenhead: McGraw-Hill Ltd, 1999. P. 33-50.

6. LevineJ., DucatelleF. Ant colony optimization and local search for bin packing and cutting stock problems //J. Operational Research Society. 2003. 55. P. 705-716.

7. Ritchie G. Static multi-processor scheduling with ant colony optimization and local search. Master's Thesis. University of Edinburgh. Edinburgh, 2003.

8. Blum C., Samp els M. Ant colony optimization for FOP shop scheduling: A case study on different pheromone representation // Proceedings of the 2002 Congress on Evolutionary Computations. Honolulu, 2002.

9. Гафаро в E. P. Гибридный алгоритм решения задачи минимизации суммарного запаздывания для одного прибора. М.: ВЦ РАН, 2006.

10. Dorigo М. Optimization, learning and natural algorithms. PhD Thesis. Dipartimento di Elettronica. Politechnico Di Milano. Milano, 1992.

Поступила в редакцию 14.09.16

i Надоели баннеры? Вы всегда можете отключить рекламу.