Разделение развертывания и выпуска микросервисов: лучшие практики и примеры кода

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

Метод 1: переключение функций
Переключение функций, также известное как флаги функций, — это мощный метод управления выпуском новых функций независимо от процесса развертывания. Используя флаги функций, вы можете включать или отключать определенные функции во время выполнения, что позволяет постепенно выпускать новые функции. Вот пример кода с использованием библиотеки переключения функций под названием «toggler»:

import toggler
toggler.initialize('my_microservice')
if toggler.is_enabled('new_feature'):
    # New feature code
    pass
else:
    # Old feature code
    pass

Метод 2: сине-зеленое развертывание
Сине-зеленое развертывание предполагает запуск двух идентичных сред: одной для активной версии (синий), а другой для новой версии (зеленый). Процесс развертывания выполняется в зеленой среде, в то время как синяя среда продолжает обслуживать текущий трафик. После успешного развертывания и тестирования зеленой среды производится переключение трафика в зеленую среду. Вот пример использования Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-microservice
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-microservice
  template:
    metadata:
      labels:
        app: my-microservice
    spec:
      containers:
      - name: my-microservice
        image: my-microservice:blue

Метод 3: Canary-релизы
Canary-релизы предполагают постепенное распространение новой версии среди определенной группы пользователей или трафика. Это позволяет вам отслеживать поведение и производительность нового выпуска в производственной среде, прежде чем сделать его доступным для всех пользователей. Вот пример использования Istio для маршрутизации трафика в Kubernetes:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-microservice
spec:
  hosts:
  - my-microservice
  http:
  - route:
    - destination:
        host: my-microservice
        subset: v1
      weight: 90
    - destination:
        host: my-microservice
        subset: v2
      weight: 10

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