Sobes.tech
Middle+

Kas yra kanarų diegimai?

sobes.tech AI

Atsakymas iš AI

Kanalų diegimas — tai naujos funkcijos paleidimo strategija, kai atnaujinimas palaipsniui diegiamas nedideliai naudotojų grupei, o jei nėra problemų, jis platinamas visai auditorijai.

Pagrindiniai etapai:

  1. Kanalų grupės diegimas: Nauja programėlės versija diegiasi nedidelėje serverių ar naudotojų dalyje.
  2. Stebėsena: Atlikti kruopštus metrikų (klaidos, našumas, naudotojų elgsena) stebėjimas kanalų grupei.
  3. Plėtra arba atšaukimas:
    • Jei stebėsena rodo sėkmę, diegimas palaipsniui plečiasi į vis didesnę naudotojų grupę.
    • Jei kyla problemų, diegimas atšaukiamas kanalų grupei, apsaugant pagrindinę masę.

Privalumai:

  • Rizikos mažinimas: Problemos veikia mažą naudotojų dalį.
  • Greitas atšaukimas: Lengva grįžti prie ankstesnės versijos.
  • Testavimas realiomis sąlygomis: Vertinamas naujos funkcijos elgesys realioje apkrovoje.

Trūkumai:

  • Infrastruktūros sudėtingumas: Reikia palaikyti kelias programėlės versijas vienu metu.
  • Srautų valdymas: Reikalingi mechanizmai srautui maršrutizuoti į skirtingas versijas.
  • Duomenų analizė: Reikalingas efektyvus metrikų surinkimas ir analizė.

Pavyzdys, kaip įgyvendinti Kubernetes:

// v1 diegimas
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
spec:
  replicas: 10 // Pagrindinis skaičius
  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

---

// Kanalo v2 diegimas
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2-canary
spec:
  replicas: 1 // Kanarų grupė
  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

---

// Paslauga, maršrutizuojanti srautą (naudojant selektorius)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Srautų paskirstymą tarp v1 ir v2 valdo Ingress kontroleriai (pvz., Nginx Ingress, Istio), kurie leidžia svertinį srautų paskirstymą.