5 проблем, связанных с переходом на облачные технологии - и как их решить

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

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

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

Что является облачным?

Во-первых, пару слов о том, что на самом деле означает «облачный».

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

С другой стороны, обладая определенным и ограниченным значением, облачный натив является полезным термином и понятием. Нам нравится определение CNCF, которое подчеркивает «слабосвязанные системы» и отказоустойчивость как характеристики облачных вычислений. Определение CNCF также указывает на конкретный и ограниченный список технологий и архитектур - «контейнеры, сервисные сетки, микросервисы, неизменяемая инфраструктура и декларативные API» - в качестве примеров облачных технологий.

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

Проблемы с принятием облачного натива

1) постоянное хранение данных

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

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

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

2) Сервисная интеграция

Собственные облачные приложения обычно состоят из набора разрозненных сервисов. Эта распределенная природа - то, что помогает сделать их масштабируемыми и гибкими по сравнению с монолитами.

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

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

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

3) Управление и мониторинг

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

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

4) Как избежать облачной блокировки

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

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

Например, конкретные языки и платформы, поддерживаемые безсерверными вычислительными платформами различных публичных облаков, несколько различаются. Например, AWS Lambda поддерживает Go, а Azure - нет. По этой причине вы должны избегать написания бессерверных функций на Go. Даже если вы планируете использовать AWS для их размещения на начальном этапе, эта зависимость будет затруднять переход в другое облако в будущем. Придерживайтесь такого языка, как Java, который, вы можете смело утверждать, будет поддерживаться везде.

5) Создание облачных приложений для конвейеров доставки

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

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

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

Хотя разработка, полностью основанная на облаке, предназначена не для всех, и некоторые разработчики предпочитают знакомство и отзывчивость локальных сред разработки по сравнению с облачными, постарайтесь, чтобы ваши конвейеры CI / CD работали в облачной среде, насколько это возможно.

Вывод

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