Sobes.tech
Middle+

Šta su kanarinjska razrešenja?

sobes.tech АИ

Одговор од АИ

Канарско разгръщане је стратегија пуштања нових функција, при којој се ажурирање постепено пушта на мали део корисника, а затим, ако нема проблема, шири се на целу публику.

Основни кораци:

  1. Разградња канарске групе: Нова верзија апликације се разграђује на мали подскуп сервера или корисника.
  2. Мониторинг: Води се пажљив мониторинг метрика (грешке, перформансе, понашање корисника) за канарску групу.
  3. Проширење или враћање:
    • Ако мониторинг показује успех, постепено се шири на све већу групу корисника.
    • У случају проблема, враћа се за канарску групу, штитећи већину корисника.

Предности:

  • Минимизирање ризика: Проблеми утичу на мали подскуп корисника.
  • Брзо враћање: Лако је вратити на претходну верзију.
  • Тестирање у реалним условима: Оцењивање понашања нове функционалности под реалним оптерећењем.

Недостаци:

  • Компликована инфраструктура: Потребна је подршка за више верзија апликације истовремено.
  • Управљање саобраћајем: Потребни су механизми за рутирање саобраћаја на различите верзије.
  • Анализа података: Потребно је ефикасно прикупљање и анализа метрика.

Пример имплементације у Kubernetes-у:

// Deployment за v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
spec:
  replicas: 10 // Основни број
  selector:
    matchLabels:
      app: my-app
      version: v1
  template:
    metadata:
      labels:
        app: my-app
        version: v1
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v1

---

// Deployment за канарску v2
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2-canary
spec:
  replicas: 1 // Канарска група
  selector:
    matchLabels:
      app: my-app
      version: v2
  template:
    metadata:
      labels:
        app: my-app
        version: v2
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v2

---

// Service за рутирање саобраћаја (са селекторима)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

За управљање расподелом саобраћаја између v1 и v2 користе се Ingress контролери (нпр. Nginx Ingress, Istio) са могућношћу за тежинско расподељивање саобраћаја.