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

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

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

Терминология

Прежде чем мы объясним, как работают флаги функций, вот несколько важных терминов, которые вам нужно знать о терминологии развертывания в Rise:

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

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

Развертывание - процесс постепенного развертывания и выпуска новой функции для клиентов.

  • Поэтапный: выпуск функции для определенных клиентов.
  • Случайно: предоставление функции случайному набору клиентов.

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

Преимущества переключателей функций

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

Недостатки переключателей функций

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

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

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

Split.io

В Rise мы используем сервис под названием split.io, аккуратную и удобную библиотеку, которая позволяет нам точно настроить, насколько глубоко мы хотим отмечать что-либо.

Split.io имеет множество других функций, некоторые из которых:

  • Поддержка различных рабочих процессов разработки
  • Конфигурация флага функции JSON
  • Аналитика данных о конкретных клиентах под каждым флагом функции
  • Интеграция со многими сервисами, включая Slack, Jira, Sentry, Segment и т. Д.

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

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

Пример кода

Давайте посмотрим, как работает split.io в действии. Мы продемонстрируем использование Angular. Мы начнем с создания файла feature-toggle.service.ts, в который поместим следующий код:

Небольшое замечание о FeatureToggleClient: это оболочка для клиента Split.io, которую мы создали как внутренний модуль для Rise.

Более подробную информацию об установке Split.io на JavaScript можно найти здесь.

Затем вы можете внедрить эту службу в компонент или службу в своем приложении, где хотите ее использовать, например:

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

Теперь перейдите на Split.io и создайте новый сплит под названием «HR-803-location». Со своей стороны, мы включаем это разделение для четырех типов сред, как показано ниже:

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

Правила Split.io

При выборе того, как определять шпагат, есть два важных правила.

Правило по умолчанию - если для него установлено значение «включено», эта функция будет доступна каждому клиенту в данной среде.

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

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

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

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

По завершении нажмите «Сохранить изменения» в правом верхнем углу и вернитесь к коду, потому что пришло время протестировать наш переключатель функций.

Как только мы перезагрузим нашу службу для «org_id: 305», мы увидим значок «Местоположения» на боковой панели, который является функцией, отмеченной в нашем коде.

Заключение

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

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

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

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

Хотите присоединиться к нашей команде? Ознакомьтесь с нашими открытыми ролями.