Поиск по сайту:

Перенос приложения в облако? Вот что вам нужно знать


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

Что делает облако таким полезным?

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

Однако современные поставщики облачных услуг, такие как Amazon Web Services (AWS), Google Cloud Platform, Microsoft Azure и Digital Ocean (DO), предлагают гораздо больше, чем просто платные серверы. Они поставили перед собой цель повысить эффективность своих операций и предоставить разработчикам простые в использовании инструменты, которые значительно упрощают создание приложений.

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

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

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

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

Например, DNS-сервис AWS, Route 53, поддерживает проверки работоспособности, которые отслеживают ваше оборудование и автоматически переключают трафик на уровне DNS, если сервер перестает отвечать. Группы автоматического масштабирования также поддерживают проверки работоспособности и могут полностью остановить и заменить сервер, если у него возникли проблемы.

Модернизация вашей архитектуры с помощью облачных решений

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

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

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

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

На какие услуги следует обратить внимание?

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

Мы обсудим некоторые сервисы AWS, поскольку они являются лидером отрасли, особенно по количеству предлагаемых сервисов. Однако большинство крупных из них имеют эквивалентные продукты, доступные у других облачных провайдеров, таких как Azure, GCP и Digital Ocean.

Облачное хранилище объектов (S3)

В большинстве локальных решений используется хранилище на уровне блоков, то есть объекты хранятся в виде файлов на дисках и становятся доступными по сети. Однако масштабы таких провайдеров, как AWS, позволяют хранить огромное количество файлов в их Simple Storage Service (S3).

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

Например, предположим, что ваше приложение разрешает загрузку контента пользователем. Хранение изображений в S3 было бы отличным вариантом, и вы даже можете сделать их доступными через Интернет с помощью сети доставки контента AWS CloudFront.

Переход на хранилище на основе S3 — это нелегкий процесс, но существуют гибридные решения, такие как Storage Gateway от AWS.

Облачные функции

Облачные функции, такие как Lambda, невероятно полезны — они позволяют запускать код в облаке, не думая о серверах. Просто запросите выполнение функции либо напрямую, либо через API, такой как AWS API Gateway, и она будет поставлена в очередь и запущена на серверах Lambda.

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

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

Балансировщики нагрузки и автоматическое масштабирование

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

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

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

Если и есть что-то, что мы рекомендуем настроить обязательно, так это автоматическое масштабирование ваших основных сервисов EC2.

Автоматизированные конвейеры CI/CD

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

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

Встроенная сеть доставки контента (CDN)

Наличие CDN может значительно ускорить время доставки. Поскольку AWS — это, по сути, всемирная вычислительная сверхдержава, их CDN имеет граничные узлы по всему миру. Аналогичные решения есть у многих других облачных провайдеров; Облачный CDN Google является одним из самых быстрых и гибких, поскольку Google фактически контролирует большую часть инфраструктуры, составляющей Интернет.

Можно ли выполнить миграцию без простоев?

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

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

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

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

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