Рубрики
Uncategorized

Serverless Ops: Что мы делаем, когда сервер уходит?

Первоначально я написал эту статью для блога моего компании. Это больше операций, чем ориентировано разработчика. Хо … Помечено без сервера, операций, сообщества, DevOps.

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

Когда я начал использовать AWS Lambda и создал свой первый серверный сервис, я был взволнован скоростью доставки, которую я мог достичь. С этими поразительными преимуществами я знал, что другие также будут взволнованы. Результат? Меньше беспокойства о предоставлении мощности для моих услуг и больше времени, затрачиваемого на фактические функции этой услуги. Это волнение также привело меня к вопросу о моей будущей роли в качестве инженера по операциям или DevOps. Что бы я сделал, если бы не было серверов для управления? Что бы я делал каждый день? Как я бы объяснил свою работу? Как я бы объяснил свою ценность моему нынешнему работодателю или новой перспективной?

Что бы я сделал, когда сервер уйдет?

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

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

Сказать это прямо: команды без операционной экспертизы находятся под угрозой.

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

Имея это в виду, вот что будет охватывать этот пост:

  • Исследование оперативных обязанностей в мире, где так много слоев стека абстрагированы
  • Предложение о организационной роли для выполнения этих новых обязанностей

Этот пост является началом определения этой новой операционной роли, но имейте в виду, что это не единственный способ определить роль OPS в без серверной архитектуры. Я склонен работать в стартап -компаниях SaaS и думаю о операциях в этом контексте. Это начало разговора. Люди не согласны с моими наблюдениями, идеями и выводами, и это хорошо. Эти разногласия помогут нам найти правильные ответы для разных людей и разных организаций.

Вот как я вижу будущее операций в без серверной инфраструктуры.

Что такое «операции»?

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

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

Операции есть:

  • Команда
  • Роль
  • Ответственность
  • Набор задач

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

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

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

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

Так Что удерживает без сервера для этих определений операций?

Что будут работать без сервера?

То, что я вижу для операций в без серверного мира, двойное:

  1. Операционная команда уходит.
  2. Роль операций восстанавливает основную ответственность операционной роли от разработчиков.

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

Продукт POD: перекрестная функция в действии

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

Как выглядит стручок продукта на практике? В организациях, в которых я был, они обычно состояли из следующих ролей:

  • Менеджер продукта
  • Инженерное лидерство
  • Разработчик бэкэнд (1-2)
  • Developer Frontend (1-2)
  • Дизайнер продукта и/или исследователь UX (иногда один человек)

Менеджер по продукту — это человек в команде, который отвечает за владение и представление потребностей бизнеса. Работа премьер -министра состоит в том, чтобы понять потребности бизнеса и превратить их в действенные идеи. Точно так же у вас будет дизайнер продукта или исследователь UX, который будет работать с PM, чтобы превратить эти идеи в полноценные дизайны и прототипы. Технологический лидер, в свою очередь, отвечает за оценку объема технической работы и возглавляемость инженерных усилий. Оттуда у вас есть ряд бэкэнд и инженеров -фронтальных инженеров, как это необходимо.

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

Наша роль в продукте

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

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

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

Набор навыков OPS

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

Навыки Мы приносим

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

  • Системная инженерия
  • Понимание платформы/инструментов
  • Навыки людей (важные для всех ролей)

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

Все инженеры разрабатывают опыт в платформах и инструментах, которые они регулярно используют. Инженер Frontend разрабатывает опыт в JavaScript и Frameworks. (Или изобретает свои собственные …) Бэкэнд -инженер разрабатывает опыт в создании API и общении между распределенными бэкэнд -системами. Как инженеры по операциям, мы разрабатываем опыт в инструментах и платформах. В среде AWS мы оттачиваем опыт в таких инструментах, как Cloudformation и Terraform, которые имеют крутой первоначальную кривую обучения. У нас также есть опыт в аспектах AWS — например, понимание идиосинкразии различных сервисов: например, Lambda Cold начинается и как его масштабирование процессора привязана к распределению памяти.

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

Навыки Нам нужно

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

Кодирование

В этом нет никаких сомнений, что оперативный человек должен будет научиться кодировать. Кроме того, им нужно будет изучить выбранные языки (ы) своей команды. Будь то Python (да!), JavaScript (ну, хорошо.), Java (ммм …) или Erlang (действительно ???), оперативный человек должен быть опытным в языке.

Помните, что OPS человек является коммунальным игроком. Их нет, чтобы быть разработчиком. Быть опытным в языке означает возможность читать его, функции света кода и исправлять легкие ошибки и проведение некоторого обзора кода. Если вы опрокидываете человека на Fizz-Buzz или просите его сделать что-то с B-Tree, вы, вероятно, делаете это неправильно. Однако, если вы просите их кодировать базовую функцию или прочитать блок кода, объясните это и покажите точки потенциального сбоя системы, поздравляю! Ты делаешь это правильно.

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

Ролевые обязанности OPS

В без серверной среде, как только инженер -эксплуататор присоединился к Product Pod, что они делают каждый день? Каким будет их описание работы?

Мы должны быть в состоянии сформулировать набор обязанностей перед нашей организацией; Чтобы объяснить роль, потому что без описания работы у вас нет работы. И, если вы не можете это объяснить, то кто -то другой … И это, возможно, означает, что ваша работа будет объяснена из -за «нокаумов».

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

Системные стандарты и лучшие практики

Инженеры -эксплуатации возьмут на себя ответственность за установление системных стандартов и лучших методов создания надежных и эффективных систем без серверов. Мы должны определять правильные шаблоны для использования (и когда их использовать) и обеспечить их соблюдение.

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

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

Строитель, развертывание и управление инструментами

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

Инструменты, такие как Server Bramework и CloudFormation, могут быть сложными. Я считаю, что многие разработчики не совсем поклонники. Ваши товарищи по команде DEV будут в хардкодировании и сорвать многое решение CFN, встроенное CFN. CloudFormation может быть очень гибкой, если вы знаете, как правильно ее использовать. Без сервера фреймворки значительно улучшается в облачной информации с возможностями плагина. Написание плагинов без серверов для решения организационных проблем заменит написание марионеточных фактов и повара нож плагины.

Также будут выполнены работы тестирования и развертывания. Начните со стандартных структур тестирования для Python, Node или Go. Но подождите, еще не все! Как насчет тестирования нагрузки? Если вычислительный уровень вашей службы может быстро масштабироваться, что это значит для вашего уровня данных? Может ли ваш таблица DynamoDB не отставать от письма лямбды, и что происходит с этими неудачными записями из -за писать дросселирование? Могут ли ваши потребители SQS не отставать от очереди? Реализация инструментов, таких как Артиллерия Чтобы найти проблемы масштабирования, то, что человек, потом примет решение, станет частью этой роли.

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

Системы масштабирования и настройки производительности

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

Работа масштабирования систем сужается без сервера. Индивидуальные компоненты системы масштабируются для вас самостоятельно. Вы не несете ответственности за масштабирование слоев обмена сообщениями, очередей, хранения или базы данных. Так Что осталось настроиться и как вы масштабируете?

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

Для оценки кода будут изменения кода, от фиксации неэффективных функций до рассмотрения замены отдельных функций, написанных на другом языке. В определенной точке масштабирования памяти лямбда становится доступным дополнительное ядро ЦП. Возможно, функция должна быть переписана на языке, который может эффективно использовать это дополнительное ядро? (Разве способность переписать одну функцию наносервиса довольно крутой по сравнению с переписыванием всего микросервиса!?!?)

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

Надежность систем

Мы справлялись с мониторингом, метриками, лесозаготовкой и наблюдением наших систем, и будем продолжать это делать. Проблемы, которые мы будем искать, изменится. Вместо того, чтобы использовать ЦП Хоста и использование памяти, мы будем искать продолжительность выполнения функции, простуды и функционировать из исключений памяти. Человек OPS будет нести ответственность за выбор и инструмент подходящего инструмента для команды и решение проблем, которые появляются. Если функция начала выбрасывать исключения из памяти, человек OPS должен нести ответственность за решение проблемы, увеличивая память функции (простой, но более дорогой способ) или путем рефакторинга заданной функции.

Кроме того, сколько из метрик и решений для регистрации мы используем, предназначенные для микросервисов или даже монолитов, подходят для наносервисов? Наносервисы — это функции, и нам говорят, что лучшие функции делают одну вещь. Так почему же ваша функция отвечает за выполнение своей именованной функции? … И написание метрик, журналы написания, а также ошибки написания? Конечно, есть CloudWatch, но его задержка не достаточно короткая для многих команд. Может быть, нам нужно переосмыслить, как мы доставляем их на другие платформы.

Кодирование и обзор кода

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

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

«Это должно быть обернуто в попытку/кроме блока для обработки сбоев API. Позвольте мне добавить это. «

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

«Я могу разместить конечную точку REST, которая будет употреблять данные WebHook, разобрать их, выполнить несколько веб -запросов для улучшения данных и публиковать их в другую систему». ( вдохновение от Алисы Голдфусс .)

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

«Когда вы добавляете запись в Route53, действие подвергается очереди. Вам нужно использовать обратный вызов и проверить, что операция была успешной. Вот что вам нужно сделать ».

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

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

Безопасность

Хорошие новости по теме безопасности: OPS может прекратить сосредотачивать свое время и усилия на хостах, на которых работает код. Это обязанность AWS сейчас. Подумайте о недавних атаках Crildown и Spectre, а также о времени, когда люди проводят развертывание, откатываясь и снова раскатывая патчи. Вместо того, чтобы исправить системы, человек OPS будет продолжать обеспечивать, чтобы производительность и надежность услуг оставались в пределах приемлемых параметров, поскольку AWS выполняла свою работу. Это означает мониторинг допустимой скорости сбоев Lambda вызова, а затем время выполнения остается приемлемым. Это, конечно, работа уже выполняется в рамках стандартных обязанностей по надежности. Это эффективно освобождение времени.

Однако это время будет быстро заполнено. Сэкономленное время будет потрачено на задачи, на которые мы ранее не дали достаточно времени. Вы проверяли свои ведра S3? У вас есть что -то, что общедоступно, чего не должно быть? Есть ли ваши функции Lambda, которые имеют свои роли с наименьшим доступом к привилегии? Мы можем потратить больше времени на получение ресурсов, не являющихся EC2.

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

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

Управление затратами системы

Serverless приносит некоторые новые и интересные задачи, чтобы стоимость стоимости заработной платы за использование.

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

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

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

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

Вывод

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

Есть мысли о том, что вы только что прочитали? Найди меня в Твиттере И давайте поговорим. Мы также рады опубликовать свои собственные идеи о будущем операций с без сервера, и ваши идеи не должны соглашаться с нашими! Просто брось как строка в hello@serverlessops.io .

Продолжайте возвращаться, чтобы узнать больше!

Спасибо нескольким людям, которые внесли отзывы, когда я писал это. Они были Брайан Хэтфилд , Трэвис Кэмпбелл и другие в #atxdevops на Hangops , Райан Скотт Браун , Бен Бридтс , Роб Парк и Гвен Беттс Анкет

Это первоначально появилось на Блог ServerlessOps . Посетите, чтобы узнать больше о нашей работе!

Оригинал: «https://dev.to/tmclaughbos/serverless-ops-what-do-we-do-when-the-server-goes-away-1mln»