В мире разработки и развертывания программного обеспечения Canary Deployment – это популярная стратегия, которая позволяет организациям выпускать новые функции или обновления для определенной группы пользователей, а затем распространять их на всю базу пользователей. Такой подход сводит к минимуму риск развертывания ошибочного или ошибочного кода для всех пользователей одновременно и позволяет организациям собирать ценные отзывы и показатели от меньшего числа пользователей.
В этой статье мы подробно рассмотрим концепцию Canary Deployment и обсудим различные методы и примеры кода для ее эффективной реализации.
- Метод 1: Canary-релизы на основе балансировщика нагрузки
Одним из распространенных методов реализации Canary Deployment является использование балансировщика нагрузки. Вот пример того, как этого можно добиться с помощью NGINX:
upstream backend {
server backend-v1:8000;
server backend-v2:8000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header X-Canary-Release "v2";
}
}
В этом примере балансировщик нагрузки направляет часть трафика на внутренние серверы, на которых работает новая версия (v2), а остальная часть идет на серверы, на которых работает стабильная версия (v1).
- Метод 2: выпуски Canary на основе переключения функций.
Другой подход заключается в использовании переключателей функций, которые позволяют динамически включать или отключать определенные функции в вашем приложении. Вот пример использования библиотеки LaunchDarkly:
import ldclient
ldclient.set_sdk_key("YOUR_SDK_KEY")
user = {
"key": "user-key",
"email": "user@example.com",
"custom": {
"canary": True
}
}
show_feature = ldclient.get().variation("your.feature.key", user, False)
if show_feature:
# Code to enable the new feature
else:
# Code to use the stable version
В этом примере настраиваемый атрибут «canary» используется для включения новой функции для определенного набора пользователей.
- Метод 3: инструменты контейнеризации и оркестрации
Платформы контейнеризации, такие как Docker, в сочетании с инструментами оркестрации, такими как Kubernetes, предоставляют мощные возможности для развертывания Canary. Создавая несколько экземпляров одного и того же приложения с разными версиями и используя такие функции, как непрерывные обновления, вы можете постепенно переключить трафик на новую версию. Вот пример использования Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v1
---
apiVersion: networking.k8s.io/v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
В этом примере Kubernetes постепенно заменяет модули старой версии (v1) на модули новой версии (v2) во время скользящего обновления.
Canary Deployment — это мощная стратегия минимизации рисков и сбора отзывов при внедрении новых функций или обновлений. Используя балансировщики нагрузки, переключатели функций или инструменты контейнеризации и оркестрации, организации могут эффективно внедрить Canary Deployment. Постепенно предоставляя новые функции определенной группе пользователей, организации могут обеспечить более плавный процесс выпуска и улучшить взаимодействие с пользователем.
Внедрение Canary-развертывания требует тщательного планирования и рассмотрения вашего конкретного приложения и инфраструктуры. Выберите метод, который лучше всего соответствует вашим требованиям, и не забывайте отслеживать и анализировать показатели, чтобы принимать обоснованные решения о стратегии развертывания.
Внедряя Canary Deployment, организации могут ускорить итерации, сократить время простоя и в конечном итоге предоставить своим пользователям более качественное программное обеспечение.