Облака проложили путь к появлению нового класса компьютерных систем, в основе архитектуры которых лежит принцип эластичности [1].

Ресурсная эластичность позволяет компьютерным системам динамически получать и отдавать ресурсы (например, виртуальные машины). Системы, поддерживающие такую эластичность, задействуют дополнительные ресурсы, когда требуется повысить вычислительную мощность. Эластичность может достигаться за счет инфраструктурных возможностей, процессов и кадровых ресурсов.  Обладающие  этим свойством системы способны динамически менять качество обслуживания, в частности, поддерживая приложения с интенсивной обработкой данных, динамически меняющие уровень их согласованности, за счет сведения к минимуму задержек или зарезервированного объема ресурсов [2]. Системы, предлагающие эластичность бюджета, динамически адаптируют уровень денежных затрат на эксплуатацию, допуская вариативность уровня обслуживания, что бывает полезно в научно-исследовательских приложениях [3].

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

Метафоры

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

 

Тестирование эластичных компьютерных систем

Сегодня еще нет готовых концептуальных схем тестирования эластичных систем и соответствующих направлений исследований. Проведенные работы в основном касались нагрузочного тестирования, тестирования масштабируемости и создания технического фундамента для эффективного выполнения тестов в облаке. Например, имеются исследования по проведению тестирования согласно сервисной модели (Testing as a Service, TaaS) в облаке, в том числе изучены проблемы распараллеливания тестов, обеспечения отказоустойчивости, а также бюджетирования. Но акцент делается на эластичности самой платформы TaaS, а не тестируемых с ее помощью приложений.

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

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

 

 

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

 

Тестирование эластичных компьютерных систем
Рис. 1. Кривые напряжения-деформации для эластичных материалов. Отмечены точки изменения состояний:   а —  переходные точки и   б —  поведение на различных уровнях напряжения

 

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

Образец, не допускающий деформации, — неэластичный. Если компьютерная система или ее часть неэластична, она не адаптируется к изменениям рабочей нагрузки, а значит, ей либо не хватает ресурсов, либо их выделено слишком много. В свою очередь, «утончение» (сужение до точки, necking) происходит, когда образец начинает разрушаться.

Особый интерес представляют точки перехода — граница между эластичным и пластичным состоянием: предел прочности — точка перед тем, как начинают появляться разрывы; критическая точка — образец разрушается.

Для описания поведения эластичных компьютерных систем нужно идентифицировать их различные состояния, переходные точки и разработать модели, соответствующие кривым напряжения-деформации. Такие модели позволят разработчикам прогнозировать поведение систем в различных условиях эксплуатации и сравнивать  реализации —  по аналогии с тем, как инженеры сравнивают между собой материалы (вязкие, хрупкие, как на рис.  1, б ).  Подобные возможности критически важны для оценки соответствия эластичных систем пользовательским требованиям и спецификациям сложных систем, а также для повышения качества ПО. Пользуясь метафорой «эластичные материалы», для оценки эластичного и неэластичного поведения вычислительных систем можно подобрать аналогии в виде различных типов механических испытаний.

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

Кривые напряжения-деформации не учитывают время, представляя лишь статичный срез состояния эластичности системы,  и,  когда нужно проанализировать динамические аспекты эластичности, требуются другие методологии моделирования и тестирования. Сведения о способности к расширению и сжатию при эксплуатации системы  полезны,  только если эти процессы происходят без сбоев и своевременно. Если ресурсно-эластичная система тратит слишком много времени на получение дополнительных ресурсов при флуктуации нагрузки,  это означает, что  программа не обеспечивает нужного быстродействия. Аналогично, если высвобождение ресурсов происходит слишком медленно, значит, система обходится дороже расчетного бюджета. С другой стороны, если времени на высвобождение уходит слишком мало, то система может оказаться слишком агрессивной, начинается «пробуксовка» из-за чересчур большой частоты операций с ресурсами, вследствие чего система обходится дороже, чем ожидалось.

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

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

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

Тестирование на усталость также помогает в изучении процесса распространения сбоев в эластичных материалах при циклической адаптации. Подвергая образец циклическому напряжению, испытатели выясняют, увеличиваются ли трещины и приводят ли в конечном счете к разрушению образца. Что касается ПО, то здесь можно выяснить, как локальные сбои распространяются по системе, может ли эластичная система автоматически их устранить (самовосстановиться) и приведут ли такие сбои со временем к системной аварии. Когда тестирование на утомляемость проводится в форме резонансного испытания, это позволяет выяснить, какие циклические нагрузки приводят к неконтролируемому росту частоты операций резервирования ресурсов. Возможность выяснить, есть ли у систем такие «резонансные частоты», поможет проектировщикам предусмотреть средства их блокирования.

 

Тестирование эластичных компьютерных систем
Аналогии между испытаниями механических и компьютерных систем

 

Имеется ряд неочевидных факторов, влияющих на уровень эластичности программной системы в период исполнения,  —  например, если такая система делит инфраструктурные ресурсы с другими пользователями облака, создающими большую нагрузку (иногда их называют «шумные соседи»), то качество такой системы может ухудшиться из-за борьбы за ресурсы. Данная ситуация также может вызвать переход эластичной системы в неоптимальные и рискованные состояния. Знание побочных эффектов, возникающих из-за других пользователей инфраструктуры, помогает разработчикам оценить устойчивость эластичной системы. В подобных случаях полезным может быть испытание на сдвиг. Если говорить о механике, то в процессе таких испытаний образцы подвергаются действию поперечных сил, способных вызвать деформацию материала, — под их действием материал может адаптироваться до тех пор, пока не разрушится. Для ПО тоже можно подготовить тесты, вызывающие неверное поведение системы вследствие «поперечных сил», таких как борьба за ресурсы.

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

Концептуальная схема

Схема тестирования эластичности состоит из четырех этапов: разработка сценария, исполнение, анализ данных и совершенствование теста (рис. 2). Для этапа подготовки сценария входными данными являются цели тестирования, а результатом — набор спецификаций теста (тестовый комплект). В рамках тестового сценария указываются характеристики и конфигурации эластичной системы, генераторы входной рабочей нагрузки и ее тип. В частности, нужно задать интенсивность и состав запросов, а также входные данные и их вариации в процессе исполнения теста, моделирующие флуктуации уровня нагрузки. Например, в тестовом сценарии в зависимости от времени может волнообразно варьироваться число активных пользователей. Рабочая нагрузка, созданная таким образом, вызывает срабатывание эластичных механизмов системы. Тестовые сценарии могут содержать указания о настройках среды и их вариациях. К примеру, в сценарии теста на усталость может быть указано, что в определенный момент обрывается соединение с сетью или в облаке развертываются дополнительные ресурсоемкие виртуальные машины, что приводит к обострению борьбы за ресурсы.

 

Тестирование эластичных компьютерных систем
Рис. 2. Концептуальная схема тестирования эластичных компьютерных систем

 

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

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

На стадии совершенствования теста учитываются изменения кода системы и принимаются меры по улучшению качества тестового сценария.

Чтобы данную концептуальную схему можно было начать применять на практике, предстоит решить несколько задач.

Методологический подход

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

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

Тестировщики должны определиться, на каком уровне будут оцениваться свойства эластичности:  системы, блока  или  компонента.  Когда программная система имеет отдельные эластичные компоненты, для выяснения их взаимного влияния критически важны интеграционные тесты. Дополнительные тесты потребуют соответствующих  инструментов —  например, средств создания макетов системы, позволяющих проводить тестирование на уровне блоков и компонентов.

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

Подготовка  сценария тестирования

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

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

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

Тестовые сценарии должны быть переносимыми и пригодными для многократного использования. Их необходимо генерировать, следуя общим принципам и процессам, не зависящим от конкретных облачных приложений и платформ. Общую задачу подготовки тестовых сценариев можно было бы решить, составляя их в виде расписаний выдачи запросов или в форме статистических распределений запросов. Если говорить о сценариях, учитывающих характеристики среды, как в случае с испытаниями на сдвиг, то тестировщикам придется указывать дополнительные параметры: имитируемые сбои, размещение виртуальных машин, а также другие параметры платформы, которые трудно выразить абстрактно, не имея соответствующих моделей. Сегодня существуют модели и таксономии сбоев для определенных видов эластичных систем, например событийно-зависимых платформ обработки данных, однако общие исследования, посвященные сбоям эластичных компьютерных систем, еще не проводились.

Исполнение теста и анализ результатов

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

Тестировщики могут развернуть несколько экземпляров эластичных систем бок о бок для параллельного тестирования либо в разных облаках для сопоставления результатов. Следует иметь в виду, что при отсутствии оптимизации рост объема ресурсов при распараллеливании теста может сделать этот процесс слишком затратным. Вспомогательные инструменты должны оптимально распределять ресурсы между очередными прогонами теста, чтобы уложиться в ограничения по времени и бюджету.

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

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

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

***

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

Литература

  1. S. Dustdar et al., Principles of Elastic Processes. IEEE Internet Computing, vol. 15, no. 5, 2011, P. 66–71. 
  2. D. Agrawal et al., Database Scalability, Elasticity, and Autonomy in the Cloud. Proc. Int’l Conf. Database Systems for Advanced Applications, Springer, 2011, P. 2–15. 
  3. E.-K. Byun et al., Cost-Optimized Provisioning of Elastic Resources for Application Workflows. Future Generation Computer Systems, vol. 27, no. 8, 2011, P. 1011–1026. 

Алессио Гамби, Валдемар Хуммер, Хон Линь Чыонг, Шахрам Дустдар ({gambi, hummer, truong, dustdar}@usi.ch) — сотрудники Венского технического университета (Австрия).

Alessio Gambi, Waldemar Hummer, Hong-Linh Truong, Schahram Dustdar, Testing Elastic Computing Systems, IEEE Internet Computing, November/December 2013, IEEE Computer Society. All rights reserved. Reprinted with permission.