В мире микросервисов крайне важно отделить процесс развертывания от процесса выпуска для эффективной разработки программного обеспечения. Такое разделение позволяет командам повторять и развертывать новые функции, не затрагивая конечных пользователей. В этой статье мы рассмотрим различные методы и приведем примеры кода, позволяющие разделить развертывание и выпуск микросервисов, что позволит организациям принять более эффективный и контролируемый подход к доставке программного обеспечения.
Метод 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
Разделение развертывания и выпуска микросервисов необходимо для более быстрой и контролируемой доставки программного обеспечения. Используя такие методы, как переключение функций, сине-зеленое развертывание и канареечные выпуски, организации могут повторять свои услуги, не влияя на конечных пользователей. Внедрение этих рекомендаций и примеров кода позволит командам разработчиков создавать высококачественное программное обеспечение с минимальными нарушениями.