{"id":14275,"url":"\/distributions\/14275\/click?bit=1&hash=bccbaeb320d3784aa2d1badbee38ca8d11406e8938daaca7e74be177682eb28b","title":"\u041d\u0430 \u0447\u0451\u043c \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u044b \u0430\u0432\u0442\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f72066c6-8459-501b-aea6-770cd3ac60a6"}

Как по нытью разработчиков понять, что вам нужны фича-серверы

Привет, это Максим Павлов из KTS.

Я уже писал о том, как фича-серверы ускоряют Time To Market.

Что такое фича-серверы (динамические окружения)

У каждого разработчика столько серверов, сколько фичей у него в работе

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

👨‍💼: «Где можно проверить новую фичу?»

👨‍💻: «Пока нигде, тестовый сервер занят»

Чтобы фичи разных разработчиков не наслаивались, разработчики могут договориться занимать сервер по очереди

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

Пока одни разработчики тестируют — другие простаивают. Работа замедляется.

Как решают проблему фича-серверы

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

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

👨‍💼🧑‍🏫👨‍✈: Решают, что 5 из 10 фич с теста должны поехать в продакшн

👨‍💻: Ругается, что ему опять придется что-то там пересобирать

Чтобы отправить в продакшн только стикеры с зелёными доработками нужно собрать отдельную версию только с этими фичами

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

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

Почему так происходит

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

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

Как решают проблему фича-серверы

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

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

👨‍💻: «Тестовый сервер разломался, потому что накопилось много старых фичей»

Если фичи слишком наслоились друг на друга, сервер может сломаться

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

Почему так происходит

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

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

Тестирование всех фичей блокируется.

Как решают проблему фича-серверы

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

👨‍💻: «Сегодня я занимался только разворачиванием проекта»

3й рабочий день новый сотрудник разворачивает контейнеры веб сервиса у себя на компьютере и не может взять рабочие задачи

Ситуация: в команду пришел новый разработчик, который первый день (или даже несколько дней) занимался только развертыванием проекта у себя на компьютере и не брал рабочие задачи.

Почему так происходит

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

Как решают проблему фича-серверы

Чтобы ветки разворачивались автоматически, DevOps инженеры «программируют» выполнение всех нужных действий по развертыванию. Не имеет значения — развернуть сервис под отдельную ветку или развернуть его на компьютере разработчика.

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

С чего же начать?

Можно начать внедрять фича-серверы самостоятельно, а можно написать нам. По нашим опросам, в зависимости от опыта команды настройка фича-серверов может занимать от 4 до 6 месяцев, мы же делаем это за две недели.

Пишите мне в телеграм.

0
15 комментариев
Написать комментарий...
Денис Филипкин

Интересно, как вы делаете раворачивание фича-бекенд-серверов? В двух словах, если можно. С фронтом, кажется, нет проблем, есть кучу сервисов типа нетлифай или AWS, где это делается "связкой" с репозиторием, или можно написать скрипт, который будет класть сборку в S3 – дешево и сердито)

Ответить
Развернуть ветку
Максим Павлов
Автор

В следующей статье расскажу чуть подробнее, подпишитесь :)

Но если кратко, то в базе заводим отдельный неймспейс для экономии ресурсов и если надо протестить вместе фронтовую и бэкенд ветку, то указываем это при сборке

Ответить
Развернуть ветку
Bo.G

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

каким образом вы: быстро развернете под индивидуальную залачу такую структуру? каким образом ведется версионность?

Ответить
Развернуть ветку
Продавец Шаурмы

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

Ответить
Развернуть ветку
Bo.G

понятно

Ответить
Развернуть ветку
Максим Павлов
Автор

У нас есть 2 подхода:
1. Обычный - под ветки разворачивается отдельный инстанс базы со всем добрОм на борту типа хранимок
2. Экономный - под ветки, создается отдельный неймспейс в БД с копией всех таблиц с префиксом ветки в названии.

Хоть в первом, хоть во втором случае в эти новые таблицы заливаются обфусцированные данные с продакшна

Ответить
Развернуть ветку
Bo.G

это понятно. но это не решает вопрос версионности схемы.
мне же интересно, как решается именно эта задача. как происходит накат/откат при изменении схемы.

Ответить
Развернуть ветку
Геннадий Мельник

ну или новые разработчики

Ответить
Развернуть ветку
Максим Павлов
Автор

Шоколад не виноват:)

А "нытьё", о котором я рассказал в статье не показатель того что программисты плохие, а что тупо нет одного инструмента

Ответить
Развернуть ветку
Labeling

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

Асинхронно прогоняются все интеграционные, performance и юнит тесты для всех комбинаций архитектур и платформ, которыми пользуются наши клиенты - Windows, macOS, Linux/AMD64, ARM, IBM... Автоматически детектируются коммиты, которые сломали что-либо. Включая perf.

Вот поднять такую инфраструктуру сложно, а разворачивание ПО на одной виртуалке - это просто маленький винтик в ней.

Ответить
Развернуть ветку
Продавец Шаурмы

В предыдущей статье автор утверждал, что у них там очень много клиентов, которые о никаких CI/CD слыхом не слыхивали, и деплоят руками

Ответить
Развернуть ветку
Максим Павлов
Автор

Подтверждаю, всё так:)

Ответить
Развернуть ветку
Максим Павлов
Автор

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

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

Ответить
Развернуть ветку
Денис Филипкин

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

feature-1-beckend-1.domain.com
feature-2-beckend-1.domain.com
feature-2-beckend-2.domain.com

На команду из ~10 разработчиков и 3 тестировщиков хватало с головой)

Ответить
Развернуть ветку
Максим Павлов
Автор

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

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

Ответить
Развернуть ветку
12 комментариев
Раскрывать всегда