Проблемы с облаком: разнородность
Облачные центры обработки данных состоят из различных коллекций компонентов, включая компьютеры, сети, операционные системы (ОС), библиотеки кода и языки программирования. В принципе, если компоненты центра обработки данных отличаются разнообразием и имеют множество особенностей, облако можно назвать разнородным. В противном случае облако считается однородным. На практике однородность сохраняется не всегда. В основном это связано со следующими двумя причинами.
- Поставщики облачных служб обычно поддерживают несколько поколений ИТ-ресурсов, приобретенных в разное время.
- Поставщики облачных служб все чаще применяют технологию виртуализации в своих облаках для консолидации серверов, улучшения использования системы и упрощения управления. Общедоступные облака — это преимущественно виртуализированные центры обработки данных. Даже в частных облаках виртуализированные среды должны стать нормой1.
Разнородность является прямым результатом распространения виртуализированных сред. Кроме того, к разнородности может привести совместное размещение виртуальных машин на аналогичных физических компьютерах. Рассмотрим, например, два идентичных физических компьютера — А и Б. Даже если предположить, что на идентичных виртуальных машинах выполняются одни и те же программы, при размещении одной виртуальной машины на компьютере А и десяти виртуальных машин на компьютере Б второй компьютер окажется под большей нагрузкой, чем первый. Наличие разнородных виртуальных машин и разнообразных, требовательных к ресурсам программ еще более вероятно в облаке, и ситуация там еще хуже. Особенно привлекательной средой является Azure, предлагающая более 30 типов виртуальных машин5 миллионам пользователей с разными программами. Очевидно, что эта ситуация создает еще большую разнородность. Короче говоря, разнородность уже является и будет оставаться обычным явлением в облаке.
Разнородность создает множество проблем при запуске распределенных программ в облаке. Распределенные программы должны быть спроектированы так, чтобы маскировать разнородность базового оборудования, сетей, операционных систем и языков программирования. Полученная в результате иллюзия однородности обеспечивает взаимодействие распределенных задач. В противном случае передача сообщений и вся концепция распределенных программ провалится. Рассмотрим проблему представления данных: сообщения, которыми обмениваются задачи, обычно содержат примитивные типы данных, такие как целые числа. К сожалению, не все компьютеры хранят целые числа в одном и том же порядке. В частности, некоторые компьютеры используют так называемый обратный порядок следования байтов, в котором старший байт является первым, а другие используют так называемый прямой порядок следования байтов, в котором старший байт является последним. Кроме того, в разных архитектурах компьютеров можно встретить разные числа с плавающей запятой. Другой проблемой является набор кодов, используемых для представления символов. Некоторые системы используют символы ASCII, а другие — стандарт Юникода. Одним словом, распределенные программы должны выработать такую разнородность, которая позволит им существовать. Та часть, которая может быть включена в распределенные программы для обеспечения разнородности, обычно называется ПО промежуточного слоя. К счастью, большинство ПО промежуточного слоя реализуется через интернет-протоколы, которые сами по себе маскируют различия в базовых сетях. Примером ПО промежуточного слоя является протокол SOAP2. SOAP определяет схему для использования языка XML (текстового формата с самоописанием) для представления содержимого сообщений и обеспечения возможности взаимодействия распределенных задач, выполняющихся на различных компьютерах. Еще один пример — передача репрезентативного состояния или REST.
Как правило, код, подходящий для одного компьютера, может не подойти для другого компьютера в облаке, особенно если на разных компьютерах используются разные архитектуры с наборами команд (ISA). Как ни странно, для устранения проблемы могла бы подойти технология виртуализации, которая обуславливает разнородность. Некоторые виртуальные машины могут быть инициированы для пользовательского кластера и сопоставлены с физическими компьютерами с разными базовыми архитектурами ISA. После этого гипервизор виртуализации будет эмулировать любые различия между архитектурами ISA подготовленных виртуальных машин и базовых физических компьютеров (если они есть). С точки зрения пользователя все эмуляции происходят прозрачно. Наконец, пользователи всегда могут устанавливать собственные ОС и библиотеки на системные виртуальные машины,обеспечивая тем самым однородность на уровне ОС и библиотек.
Еще одной серьезной проблемой разнородности, требующей внимания программистов, является изменение производительности3, 4 в облаке. Изменение производительности связано с ситуацией, когда выполнение одной и той же распределенной программы дважды в одном и том же кластере может привести к разному времени выполнения. Например, время выполнения одного и того же приложения в одном и том же частном кластере может отличаться в пять раз4. Изменение производительности связано в основном с разнородностью облака, вызванной виртуализированными средами, и временными перепадами в потребностях в ресурсах. Как следствие, облачные виртуальные машины редко выполняют работу с одинаковой скоростью, тем самым препятствуя выполнению задач в (приблизительно) постоянном темпе. Очевидно, что такая ситуация может привести к неравномерному распределению нагрузки и снижению общей производительности, так как неравномерность нагрузки ставит производительность программы в зависимость от ее самой медленной задачи. Распределенные программы могут попытаться упростить ситуацию, выявляя медленно выполняющиеся задачи и планируя работу соответствующих задач на быстрых ВМ так, чтобы они завершались раньше. В частности, две равнозначных задачи могут конкурировать друг с другом следующим образом: они запускаются на двух разных виртуальных машинах, и та, которая завершается раньше, остается, а другая — удаляется. Hadoop MapReduce следует подобной стратегии для решения той же проблемы, которая называется спекулятивным выполнением. К сожалению, различать медленные и быстрые задачи или виртуальные машины в облаке довольно сложно. Может случиться так, что на определенной виртуальной машине, где выполняется задача, временно возникает период пиковой нагрузки. Может быть и так, что виртуальная машина просто вышла из строя. Теоретически не каждый узел, на котором обнаружено снижение производительности, является неисправным, а отличить неисправный узел от медленно работающего очень трудно6. Из-за этой проблемы Hadoop MapReduce плохо работает в гетерогенных средах5, 7. Причины такого поведения и подробности спекулятивного выполнения Hadoop приводятся в разделе по Hadoop MapReduce.
Ссылки
- M. Zaharia, A. Konwinski, A. Joseph, R. Katz, and I. Stoica (2008). Improving MapReduce Performance in Heterogeneous Environments OSDI
- G. Coulouris, J. Dollimore, T. Kindberg, and G. Blair (май 2011 г.). Distributed Systems: Concepts and Design Addison-Wesley
- B. Farley, V. Varadarajan, K. Bowers, A. Juels, T. Ristenpart, and M. Swift (2012 г.). More for Your Money: Exploiting Performance Heterogeneity in Public Clouds SOCC
- M. S. Rehman and M. F. Sakr (Nov. 2010). Initial Findings for Provisioning Variation in Cloud Computing CloudCom
- Размеры виртуальных машин Linux в Azure
- A. S. Tanenbaum and M. V. Steen (October 12, 2006). Distributed Systems: Principles and Paradigms Prentice Hall, Second Edition
- T. D. Braun, H. J. Siegel, N. Beck, L. L. Blni, M. Maheswaran, A. I. Reuther, J. P. Robertson, M. D. Theys, B. Yao, D Hensgen, and R. F. Freund (June 2001). A Comparison of Eleven Static Heuristics for Mapping a Class of Independent Tasks onto Heterogeneous Distributed Computing Systems JPDC