Рубрики
Uncategorized

Как монолит архитектуру может быть преобразована в безрусец

Существует растущая аудитория, окружающая серверу, и многие стремятся воспользоваться преимуществами … Помечено с AWS, Serverless, DEVOPS.

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

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

Таким образом, в этом посте я хочу сосредоточиться на том, как монолитное приложение может преобразовать в безмолвному.

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

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

Думать о серверу

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

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

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

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

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

Шаг 1: Заземление сами на самом деле

Чтобы начать, давайте поставим это там прямо сейчас:

$ echo 'Not everything fits into the serverless model.'

Это важная вещь, которую нужно выйти от той идущего, когда вы рассматриваете серверу. Это не работает на все , по крайней мере, не сегодня.

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

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

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

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

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

Шаг 2: Разделение подвижного от неповрежденный

Это где начинается веселье. Пришло время начать смотреть на то, что в вашем приложении сейчас может двигаться в неверный

Здесь не нужно перевернуть. Вещи, которые очень легко двигаться в вашем монолите, имеют тенденцию выпрыгивать у вас. Против вещей, которые кажутся трудными с самого начала, скорее всего, лучше квалить на данный момент.

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

  • В зависимости от вашего поставщика облака без сервеса, одна функция имеет 1-15 минут времени выполнения. Он должен запустить, завершить необходимую работу, а затем выйти. Этот срок настраивается, поэтому проверяйте, как долго вы полагать Это будет предпринять, чтобы завершить работу и установить свой порок для этого.
  • Задержка холода начнутся реальна. В зависимости от случая вашего использования вы можете заметить значительные задержки задержки в первый раз, когда вызывается ваша функция без сервезна. Есть много факторов, которые могут способствовать этому, и есть много вещей Вы можете сделать чтобы помочь сократить это.
  • Ограничения размера диска — это еще одна вещь, чтобы иметь в виду. Внутри функции без сервеса у вас часто у вас нет хранения Gigabytes. Но у вас обычно есть какой-то TMP Или царапина хранилище, если вам это нужно.
  • Память ограничивается, а также в зависимости от вашего поставщика облака, у вас есть до 3 ГБ. Это имеет тенденцию быть меньше ограничений, чем другие, перечисленные здесь, но все еще важно иметь в виду.

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

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

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

Cron Jobs

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

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

‘ Служба клей

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

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

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

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

Услуги по электронной почте

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

Отправка электронных писем имеет очень разные реализации всех различных видов использования. В общем, они склонны следовать потоку, как это:

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

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

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

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

  1. Как правило, не обращены к клиенту. Несмотря на то, что не твердое и быстрое правило, ваши первые вещи для перемещения в серверу, как правило, не обращены от клиентов. Разумные рассуждения за этим варьируются, но для меня сводится к изучению этой новой парадигмы, не нарушая рабочие процессы пользователей.
  2. Не связан с некоторыми синхронными API. Чем больше вещей развязаны и асинхронно, когда вы впервые переезжаете на неверный. Почему? Потому что это там, где процветает архитектура. Удерживая вещи Async и распределены, мы позволяем нашим рабочим нагрузкам масштабироваться самостоятельно.
  3. Цель на рабочие нагрузки или услуги, которые имеют четкие границы. Я понимаю, что с большими приложениями это может быть реальной проблемой. Тем не менее, чем больше вы можете определить границу для данного обслуживания, тем легче будет переходить на безсетелю. Разумность довольно просты, чистые границы определяют четкие контракты. Если мы переместим данную услугу, и контракт не ясен или не становится грязным, мы можем оказаться распределенным технологическим долгом, а не монолитным.

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

Шаг 3: перемещение подвижного

Теперь, когда мы отделили наши услуги на две группы, подвижную и неподвижную (по крайней мере, на данный момент). Мы можем начать думать о том, как этот ход на самом деле происходит.

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

Все три из этих сценариев действительны. Но это ценно сосредоточиться на первых двух, потому что это «движущиеся прямые» этапы.

Имея в виду, давайте подумаем, когда может произойти переписать.

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

  • Язык/рамки не будут работать в безсетеле. Возможно, сервис написан в COBOL, использует весенние ботинки или делает тяжелое использование местных двоичных файлов. Это использует, чтобы быть гораздо более распространенной проблемой, но с внедрением AWS LAMBDA SELERS. Это на самом деле меньше проблем.
  • Сервис плотно связан в монолит. Это очень распространенный сценарий, который я склонен видеть в более старых основных базах. Мы хотим вытащить эту услугу Но мы, вероятно, должны задушить старую и создать новый. Проверьте Стригальщик шаблон Для этого, даже если серверу не в вашем будущем.
  • Существующий код не достаточно исполнен, чтобы работать в среде без сервеса. Еще один общий сценарий. Возможно, время выполнения не будет работать на эту рабочую нагрузку или память слишком ограничена.

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

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

Как и предыдущий путь, мы можем представить некоторые сценарии высокого уровня, где возможен этот путь.

  • Язык/Framework поддерживается в Serverless. Кажется, просто сказать, но это на самом деле огромная победа. Если ваш сервис уже находится на языке или структуре, что провайдеры Serverless поддерживают из коробки. В этом сценарии мы можем портировать это, чтобы запустить в безрусной среде. Это часто означает добавление необходимого кода для запуска функционального обработчика, настройка мониторинга, обновления журнала и выполнение дополнительных изменений конфигурации.
  • Сервис может запустить внутреннюю часть контейнера докера или уже контейнерен. Помните в более раннем пути, когда мы сказали, что языки или рамки, которые не были поддержаны из коробки в среде без сердца, необходимо переписать. Ну, если вы используете AWS, это может не быть вашим единственным вариантом. img2lambda Понижает этот барьер и позволяет вам приносить эти рабочие нагрузки непосредственно с помощью Lambda слоев.

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

Шаг 4: Перемещение неподвижного

Но как насчет того, что мы считали неподвижными?

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

  • Ограниченное время выполнения, 1-15 минут, в зависимости от вашего облачного провайдера.
  • Задержка холодной запуска, связанная с рабочими нагрузками без сервеса.
  • Ограничения размера диска у нас есть только небольшое количество царапин.
  • Память ограничен, до 3 ГБ, в зависимости от вашего поставщика облака.

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

Ограниченное время исполнения

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

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

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

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

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

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

Задержка холодной запуска

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

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

Эта проблема довольно очевидна в aws лямбда, когда вы используете свою рабочую нагрузку внутри VPC. Вы часто делаете это, чтобы вы могли подключиться к базамным услугам, такими как RDS. Из-за этой проблемы лямбда фактически поддерживает эти условия горячими в течение длительного периода времени. То, что сказал, ваши синхронные API, скорее всего, все еще заметит холодный начну на этот первоначальный удар.

Так каковы некоторые решения здесь?

Хорошо документированная «лучшая практика» состоит в том, чтобы пинговать свои рабочие нагрузки, чтобы поддерживать контейнеры. Это взлома и пахнет смешно, но его лучшее, что мы получили в данный момент. Serverless на самом деле имеет плагин, который имеет именно этот Отказ В случае AWS вы создаете работу CRON, что каждые 5 минут призывает вашу функцию лямбда. Это сохраняет теплую среду для этой функции, чтобы вы могли минимизировать холодное начало.

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

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

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

Размер диска и ограничения памяти

Если честно, я никогда не сталкивался с этими ограничениями, выполняющими неверные рабочие нагрузки.

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

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

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

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

Шаг 5: Настройка себя на успех

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

  • Используйте инфраструктуру в качестве кода, ваша будущая я поблагодарит вас. Подумай об этом. Вы отправляетесь от управления одним большим приложением, чтобы, вероятно, управлять множеством неверных рабочих нагрузок. Вы собираетесь от централизованного для распределения. Рецепт стихийных бедствий обеспечивает эти распределенные услуги вручную. Используйте инструменты, такие как Terraporm, Servelless Framework, CloudFormation, или пулуби, чтобы сделать это управление намного легче.
  • Приложение Twelve-Factor сделает вашу жизнь проще. Крис Муннс, AWS Serverless Advocate, имеет Фантастический пост блога Это фокусируется на методологии в безрусной среде.
  • Услуги отделения друг от друга могут определять четкие контракты и позволяют отдельным масштабированием. Опять же, не новая концепция вообще, кроме одного, которая будет поднять вашу безрусной игру. Чем больше услуг может быть async и отделен друг от друга, тем лучше. Услуги передают сообщения друг другу, а не звонить друг другу. Работайте из очередей событий, а не в ответ на единый запрос.
  • Ходить, прежде чем бежать. Начните с меньших услуг размера укуса, поскольку вы начинаете переходить на серверу. Это поможет вам установить хорошие шаблоны и практики для себя. Это также раскрывает некоторые боли, которые вы можете столкнуться с вами.

Вывод

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

Это нормально. Но это не причина не воспользоваться этим, где вы можете.

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

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

Вы голодны, чтобы узнать еще больше о Amazon Web Services?

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

Оригинал: «https://dev.to/kylegalbraith/how-a-monolith-architecture-can-be-transformed-into-serverless-8l4»