Распределенное программирование в облаке
Распределенные программы выполняются на компьютерах, подключенных к сети. Сети компьютеров распространены повсеместно. Типичными примерами являются, в частности, Интернет, кластеры высокопроизводительных вычислений (HPC), мобильные телефоны и сети в салонах автомобилей. Многие сети компьютеров представляют собой распределенные системы. Мы определяем распределенную систему как систему, в которой компьютеры, подключенные к сети, взаимодействуют, используя передачу сообщений и (или) общую память, и координируют свои действия для решения определенной проблемы или предложения определенной услуги. Поскольку под облаком понимается набор интернет-программ, платформ и инфраструктурных сервисов, предлагаемых через кластер (или кластеры), объединенных в сеть компьютеров (т. е. центры обработки данных), оно является распределенной системой. Кроме того, из определения следует, что распределенные программы (в отличие от последовательных или параллельных) будут обычным явлением в облаках. В частности, мы определяем распределенные программы как параллельные программы, которые выполняются на отдельных процессорах на разных компьютерах. Таким образом, единственным способом взаимодействия задач в распределенных программах с распределенной системой являются либо явные отправка и получение сообщений, либо чтение из общей распределенной памяти (и запись в нее), поддерживаемой базовой распределенной системой (например, с использованием аппаратной архитектуры распределенной общей памяти [DSM])1. Далее мы определим различные модели, с помощью которых можно создавать распределенные программы для облаков (или облачные программы), рассмотрим некоторые проблемы, которые должны решать облачные программы.
Программирование в облаке
Эффективность работы облачных программ зависит от способов их разработки, реализации и выполнения. В процессе разработки следует учитывать ряд факторов, а именно:
- Какая базовая модель программирования является наиболее оптимальной: на основе передачи сообщений или общей памяти?
- Для какой вычислительной модели лучше всего подходит приложение: синхронной или асинхронной?
- Какой способ настройки данных будет наилучшим для вычислительной эффективности: с помощью параллелизма данных или параллелизма графа?
- Какая архитектурная и управленческая структура в наибольшей степени повысит сложность, эффективность и масштабируемость программ: "главный-подчиненный" или одноранговая?
Что касается именно облачных программ, то для них особое внимание должно быть уделено вопросам, связанным с проектированием, реализацией, настройкой и обслуживанием:
- Вычислительная масштабируемость является трудновыполнимой задачей в больших системах (например, облаках) по нескольким причинам, в том числе невозможности полной параллелизации алгоритмов, высокой вероятности неравномерного распределения нагрузки и неизбежности издержек, связанных с синхронизацией и обменом данными.
- Взаимодействие, использующее локальные данные и минимизирующее сетевой трафик, может быть сложным процессом, особенно в (общедоступных) облаках, где сетевые топологии обычно скрыты.
- Две стандартные облачные реалии — виртуальные среды и разнообразие компонентов ЦОД — приводят к формированию разнородности, которая усложняет задачи планирования и маскирует различия аппаратного и программного обеспечения между узлами облака.
- Чтобы избежать взаимоблокировок и транзитивных замыканий, а также гарантировать взаимоисключающий доступ (все эти возможности являются крайне желательными в распределенной системе), базовая система должна предоставлять, а разработчик — использовать эффективные механизмы синхронизации.
- В связи с увеличением вероятности сбоев из-за масштабирования облачных сред в проекты систем необходимо внедрять механизмы отказоустойчивости, включая поддержку устойчивости задач, распределенные контрольные точки и регистрацию сообщений.
- Для обеспечения эффективного и результативного выполнения планировщики задач и заданий должны поддерживать управление расположением, параллелизмом и гибкостью задач, а также следовать целям уровня обслуживания (SLO).
Решение всех этих вопросов разработки и устранение проблем в облачной среде ложится серьезным бременем на плечи программистов. Проектирование, разработка, проверка и отладка всех (или даже некоторых) этих возможностей — трудные задачи уже по своей сути, которые могут повлечь за собой значительные проблемы с корректностью и производительностью, а также потребовать значительных затрат времени и ресурсов.
Современные распределенные механизмы аналитики призваны освободить разработчиков от этих обязанностей. Они предоставляют API-интерфейсы, позволяющие пользователям реализовывать свои программы как простые последовательно выполняемые функции. Затем механизмы автоматически создают, параллелизуют, синхронизируют и планируют задачи и задания. Они также обрабатывают сбои без участия пользователя. В конце этого урока мы подробно рассмотрим, как распределенные механизмы аналитики абстрагируют и устраняют проблемы разработки облачных программ. Но в следующем разделе мы сначала представим две традиционные модели распределенного программирования: с общей памятью и передачей сообщений. Затем мы обсудим вычислительные модели, которые могут использоваться в облачных программах. В частности, мы изучим синхронные и асинхронные вычислительные модели. Потом мы представим две основные категории параллелизма облачных программ — параллелизм данных и параллелизм графов. И, наконец, мы рассмотрим архитектурные модели, которые обычно используются в облачных программах: архитектура "главный-подчиненный" и одноранговая архитектура.
Ссылки
- A. S. Tanenbaum (September 4, 1994). Distributed Operating Systems Prentice Hall, First Edition