В связи с предыдущим постом в этой серии Enterprise DevOps Mindset в этой статье рассматриваются некоторые из более практичных вещей, которые вы можете сделать в вашей организации (или запуска), чтобы включить быстрее, менее рискованные релизы.
Небольшие изменения могут иметь массивный преимущества.
Меньшие отзывы могут:
- Позволяют разработчикам дать лучший фокус и обратная связь отзывами
- Уменьшить накладные расходы одного обзора
- Включить более быстрые отзывы
- Уменьшить стоимость (и риск) слияния конфликтов
- Получите изменения в руки пользователей (или QAS) ранее для более ранних отзывов
- Может иметь более низкое влияние, что позволяет другим разработкам в том же кодовой базе для развертывания и запуска их функций, не влияние на ваши изменения
- Способствовать лучшему, более совместным дизайну
В то время как смешно, есть огромное количество истины в Tweet выше! Мы все видели, что это произошло, где для того, чтобы рассмотреть, разработчики вынуждены контекстно-выключать от собственной работы, только чтобы найти, что запрос на тягах огромен. Они берут в белый взгляд на него и говорят .. ЛГТМ!
Как мы боремся? Ну, в основном это сводится к:
- Иметь план
- Найдя время, чтобы подумать и планировать ряд изменений или PR, которые индивидуально видны
- Обеспечение запроса на тягу фокусируется только на 1 вещь
- Написание тестов рано, поэтому у вас есть уверенность, чтобы объединить ваши изменения
Посмотрите на это для интересного правила правила в отношении просмотра размеров: 150-150 правило Он предполагает, что 150 строк производственного кода и 150 строк тестового кода служат хорошими рекомендуемыми максимальными, кто-то следует ожидать рассмотреть и просматривать и просматривать. Очевидно, что этот субъективный, но это хороший номер, по крайней мере, почувствовать, что «слишком большой».
Задом наперед Совместимость
При разработке API, как и в любом количестве программного обеспечения, вы хотите убедиться, что вы можете развернуть ваше изменение в любое время. Вы не хотите заставлять всех потребителей вашего API развернуты одновременно в качестве API (даже если есть только один потребитель). Это создало бы Развертывание шага блокировки Отказ
Соединение вашего развертываний Backend и Frontend может вызвать массивные головные боли. Если вы обнаружите проблему с любым из них, вам нужно откатиться оба. Создание дополнительной работы и задержка всех других произведений в обеих системах.
Чтобы избежать этого, мы должны сделать только Неразрушение API меняется.
Это означает:
- Только добавлять конечные точки, не удаляйте их
- Никогда не добавляйте новый Обязательно Параметр к вашим запросам (они всегда должны начинаться необязательно)
- Никогда не удаляйте поле из ответа
- Никогда не переименовывайте поле или конечную точку (это на самом деле будет иметь тот же эффект, что и удаление).
Хорошо, хорошо, я знаю, что звучит немного драматично. Когда я никогда не говорю, я имею в виду, как сделать эти удаления, вы должны рассмотреть влияние, которое он будет иметь на производственных системах, прежде чем внести это изменение.
Чтобы сделать это, сначала обновите всех своих потребителей, чтобы обработать изменения (не используя поле, или отправка нового поля) .. Тогда и только тогда вы можете сделать изменения вашего API.
Один инструмент, который я нашел полезным для этого Swagger Cryke , а также плагины для Maven и Gradle.
Интерфейсы ключей
Один хороший способ позволить вашему коду слиться и тестировать, не влияя на пользователя, это с Интерфейс Keystone Отказ
По сути, это влечет за собой создание всей функциональности (со всеми необходимыми тестами) для определенной функции (над несколькими PRS), то только после того, как все готово, мы создаем UI (или API конечную точку), чтобы открыть функциональность. Это, очевидно, проще, когда функция может быть выставлена через одну кнопку, но может хорошо работать для всех видов функций. В этом случае кнопка становится keystone, который расположен в конце и позволяет доступом к функциональности.
Этот метод очень мощный. Как утверждают Martin Fowler, он может даже использоваться для скрытия целых страниц функциональности, мы можем просто использовать ссылку на эту страницу в качестве Keystone. Он может работать так же хорошо в API, где все функциональные возможности медленно выделяются, включая схему и миграции БД, а затем после того, как он будет готов и протестировать, поднять PR, включить изменение в существующей конечной точке. Для внутренних API, где вы контролируете всех потребителей, которые вам, вероятно, даже не нужно идти к этому много усилий … Просто добавьте новую конечную точку.
Ранее я почувствовал странно об этой конкретной технике, поскольку он чувствует себя странным иметь код в вашей кодовой базе, который еще не используется (см. Dead Code , однако, если функция все еще работает, этот подход Может иметь некоторые серьезные преимущества и избежать некоторых сложностей и усилий с более вовлеченными методами, такими как функция переключается.
Темные запуска
Мартин Фаулер также упоминает Темный запуск , что является идеей призвания кода для новой функции без возможности для пользователя. Если сделано правильно, это может позволить вам проверить новые функциональные возможности и воздействие производительности в производстве без чрезмерного влияния на пользователя.
Возможно, вы пожелаете расширить существующую функциональность для отображения дополнительной информации пользователю. Вы можете плоть эту дополнительную информацию, собирая его и собирая производственную статистику по производительности или ошибкам (очевидно, вам нужно убедиться, что ошибки не влияют на пользователя). Как только вы счастливы, добавьте код, чтобы открыть новую функциональность пользователю .. немного похоже на интерфейс Keystone.
Функция переключается
После того, как вы рассмотрели все другие возможности (например, темные интерфейсы запуска и серии Keystone), чтобы избежать запуска вашей функции, пока вы не будете готовы, возможно, вам придется использовать Функция Toggle Отказ
Часто все еще полезно думать о вашей функциональности с точки зрения ключевых камней. Если ваша функция позволяет ей, создайте ключевой камень и поместите свою функцию, переключайтесь вокруг этого. После того, как вы должны закончить построить и тестировать свою функцию (с включенной функцией для вас), вы можете включить переключатель .. Открытие функции переключенного ключевого камня в мир.
Не все изменения позволяют переключать ваш код на уровне пользовательского интерфейса, но более глубокий в коде, который вы размещаете переключатель, тем более переплетены с тестом кода, и тем более будет тестировать и получить доверие к нему Отказ
Итак, поместите свои переключения на высочайшем уровне абстракции, вы можете в своем коде и попытаться избежать измерения нескольких из тех же переключателей в течение вашего кода.
Если вы не можете видеть это, это не произошло
Наконец, но, возможно, самый важный момент — это то, что вы должны иметь возможность увидеть, что происходит в производстве. Это означает предупреждение, ведение журнала и мониторинга.
Он должен пойти, не сказав, что если мы хотим сократить время, чтобы узнать о выпуске производства, мы должны контролировать производство для вопросов!
В современном программном пространстве вы будете затоплены инструментами, которые могут получить видимость вашей производственной системы. Давайте посмотрим на некоторые из типов инструментов, чтобы осмотреть.
Frontend App
- Оповещение о ошибках
- HTTP журнала вызовов
- Отслеживание пользователей
- Аналитика событий
- Демографический анализ
Есть так много вещей, которые вы могли бы отслеживать, и, поскольку вы создаете свою систему, вам, вероятно, понадобится все больше и больше о том, как на самом деле используется ваша система. Ключевым делом является то, что ваше выбранное решение позволяет постоянно расширять свои знания о системе по мере необходимости.
Некоторые инструменты, которые я видел, будет использоваться с успехом:
- Sentry (я не могу рекомендовать этого достаточно!)
- Штанга
- Гугл Аналитика
- Firebase
- Lognocket.
- Appsignal.
Backend Services.
Опять же, есть много вещей, которые вы можете отслеживать, надеюсь, некоторые (например, использование производительности или ресурса) уже обработаны вашей платформой.
Как и в случае мониторинга интернет-мониторинга, это не имеет большого значения, что вы выбираете, просто есть что-то на месте, которое может расширить в качестве требования к видимости. И они будут.
Вот несколько инструментов мониторинга Backend, которые я видел хорошо работать:
- Splunk (действительно отлично приведет к предупреждению, запросу и преобразованию данных)
- Лось (elasticsearch и кибана)
- Прометей
- AWS Cloudwatch.
- xmatters.
- Пагера
- Сервис
- Datadog.
Оповещения должны повысить инциденты в вашей системе управления инцидентами (серьезность, определенная журналом).
Вы можете даже легко рассчитать время работы вашей системы, как:
Для действительно хорошего поломки того, что мы на самом деле ищем при мониторинге производства, посмотрите на: Мониторинг производства методологически
Непрерывная доставка
Непрерывная доставка — это все о автоматизации всего в вашем процессе. Все, вплоть до того, как вы принимаете ручное решение для развертывания до производства.
Чем больше автоматизирована, тем легче становится процесс выпуска, тем больше выпускает, что вы будете готовы сделать.
В то время как это может быть сложно для высококонтролируемых отраслей (правительство и финансы E.G), в какой-то момент мы могли бы даже автоматизировать решение о развертывании до производства. Мы называем это постоянное развертывание. Это просто естественное прогрессирование непрерывной доставки, но не требуется серьезных шагов на более быстрые, легкие релизы.
Средняя земля имеет инструмент со всеми кодированными критериями, вы должны утвердить выпуск, чтобы перейти к производству, а затем просто нажмите кнопку самостоятельно. Но, учитывая все, что мы обсудили растущий риск, задержка, если у вас есть инструмент для работы, когда вы будете уверены в этом, почему бы не просто позволить репутации инструмента, когда он готов?
Для некоторых советов от Atlassian о том, как автоматизировать видимость того, что вы отправляете в производство, см.: 6 шагов к лучшему управлению выпуском в программном обеспечении JIRA
Несмотря на все, вы можете обнаружить, что организация манит целую плоту других чеков, после слияния. Не будь удивленным! После того, как вы и ваша команда следуют следующим методам, следующие шаги должны начинаться медленно автоматизировать (или даже лучше, вести переговоры) прочь дополнительных шагов после объединения.
Там есть много техник, чтобы помочь нам выпустить быстрее. Ключевые вещи, которые следует помнить:
- Предотвратить вашу работу от блокировки других разработчиков
- Совершать и сливаться в мелкие кусочки размером с укус
- Доверьтесь своим тестам (и если вы не можете, исправить их!)
- Если вы не можете видеть, что происходит в производстве, это, вероятно, сломано
И самое главное, используя эти методы и другие, найдите способ выпустить на производство на регулярной основе. Даже если вы находитесь в индустрии в значительной степени регулируемой отраслью, даже если вам не требуется никаких изменений, обращенных к клиентам, вы все равно можете получить огромные выгоды от развертывания вашего (темнота, выключенного, неактивный) код для производства на регулярной основе.
Оригинал: «https://dev.to/dylanwatsonsoftware/devops-coding-practices-281e»