Text size
പരീക്ഷിച്ചറിഞ്ഞത്6 മിനിറ്റ് വായന

ഭയമില്ലാതെ വിട്ടയക്കുന്നു: കാനറി, നീല-പച്ച, ഫീച്ചർ ഫ്ലാഗുകൾ

ആദ്യം 5% വരെ കയറ്റി, നോക്കൂ, പിന്നെ തീരുമാനിക്കുക. പുരോഗമന പ്രസവങ്ങള് എങ്ങനെ നടക്കുന്നു.

Releasing without fear: canary, blue-green and feature flags
AI ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രീകരണം

ഒരു വലിയ പ്രൊഡക്ഷൻ വിന്യാസത്തിനു ശേഷം ഒരു ടീം ചാറ്റിൽ ഒരു പ്രത്യേക തരം നിശബ്ദതയുണ്ട്. എല്ലാവരും ഡാഷ്ബോർഡുകൾ നോക്കുന്നുണ്ട്. "എനിക്കാണോ തോന്നുന്നത്, അതോ പിശകുകൾ കൂടുകയാണോ" എന്ന് ആദ്യം ചോദിക്കാൻ ആരും ആഗ്രഹിക്കുന്നില്ല.

ക്രമേണയുള്ള ഡെലിവറി ആ നിശബ്ദതയെ ഒരു പദ്ധതി ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നു: ആദ്യം കുറച്ച് ഉപയോക്താക്കൾക്ക് റിലീസ് ചെയ്യുക, എന്താണ് സംഭവിക്കുന്നതെന്ന് ട്രാക്കുചെയ്യുക, തുടർന്ന് മാത്രമേ തുടരണോ എന്ന് തീരുമാനിക്കുക. എന്തെങ്കിലും തെറ്റ് സംഭവിച്ചാൽ, ഒരു ചെറിയ സംഘം മാത്രമേ അത് ശ്രദ്ധിക്കുകയുള്ളൂ, സിസ്റ്റം മാറ്റം സ്വയമേവ മാറ്റാൻ കഴിയും.

താരതമ്യം ചെയ്ത തന്ത്രങ്ങൾ

പുതിയ വിവരങ്ങൾ. കുബർനെറ്റിസ് സ്ഥിരസ്ഥിതി: ഓരോ തവണയും കുറച്ച് പാഡുകൾ മാറ്റി വയ്ക്കുക. ലളിതം, പക്ഷെ റോളൌണ്ട് തുടങ്ങിയാല് പുതിയതും പഴയതുമായ പതിപ്പുകള് കൂടിച്ചേരും, ആര് എന്ത് കാണുന്നു എന്നതില് നിങ്ങള് ക്ക് നിയന്ത്രണം കുറവായിരിക്കും.

നീല-പച്ച നിറം. പുതിയ പതിപ്പ് (പച്ച) പഴയ പതിപ്പിനു (നീല) അടുത്തായി പ്രവർത്തിപ്പിക്കുക. പച്ച പരീക്ഷണം, പിന്നെ എല്ലാ ട്രാഫിക്കും ഒരേസമയം മാറ്റുക. പിന്നോട്ട് പോകുന്നത് പിന്നോട്ട് മാറുക എന്നതാണു്. വില: മാറ്റത്തിന്റെ സമയത്ത് വിഭവങ്ങളുടെ ഇരട്ടിപ്പിക്കൽ, ഉപയോക്താക്കൾക്ക് ഒരു "ബിഗ് ബാം" നിമിഷം.

കാനറി. പുതിയ പതിപ്പിലേക്ക് ട്രാഫിക്കിന്റെ ഒരു ചെറിയ ശതമാനം അയയ്ക്കുക, ഉദാഹരണത്തിന് 5%, പിന്നെ 25%, പിന്നെ 50%, പിന്നെ 100%, ഓരോ ഘട്ടത്തിലും അളവുകൾ പരിശോധിക്കുക. വേഗത കുറഞ്ഞതും എന്നാൽ യഥാർത്ഥ ട്രാഫിക് സമയത്ത് മാത്രം കാണപ്പെടുന്ന പ്രശ്നങ്ങൾ കണ്ടെത്താനുള്ള ഏറ്റവും സുരക്ഷിതമായ മാർഗവും.

ഫീച്ചർ ഫ്ലാഗുകൾ. പുതിയ സവിശേഷത ഓഫാക്കിയ കോഡ് വിന്യസിക്കുക, തുടർന്ന് വീണ്ടും വിന്യസിക്കാതെ തന്നെ പ്രത്യേക ഉപയോക്താക്കൾക്കോ, ഒരു ശതമാനം അല്ലെങ്കിൽ എല്ലാവർക്കുമായി അത് ഓണാക്കുക. ഇത് വേർതിരിക്കുന്നു വിന്യസിക്കൽ (കോഡ് ഉല്പാദനത്തിലേക്ക് കൊണ്ടുവരുന്നു) വിടുവിക്കുന്നു (ഉപയോക്താക്കളെ അത് കാണിക്കാൻ അനുവദിക്കുന്നു).

ഉരുളുന്ന നീല-പച്ച കാനറി സവിശേഷത ഫ്ലാഗുകൾ
എക്സ്പോഷറിനെ നിയന്ത്രിക്കുക കുറവ് എല്ലാം അല്ലെങ്കിൽ ഒന്നും ട്രാഫിക് അനുസരിച്ച് ക്രമേണ വളരെ നന്നായി, ഉപയോക്താവിന് അനുസരിച്ച്
റോൾബാക്ക് വേഗത പതിയെ പെട്ടെന്ന് വേഗം പെട്ടെന്ന്
അധിക അടിസ്ഥാന സൌകര്യങ്ങൾ ഒന്നും ഇല്ല. സ്വിച്ച് ചെയ്യുമ്പോള് ഇരട്ടിയാക്കുക ചിലത് പതാക സേവനം
ഏറ്റവും നല്ലത് കുറഞ്ഞ അപകടസാധ്യതയുള്ള മാറ്റങ്ങൾ വലിയ സ്വിച്ച് അപകടകരമായ ബാക്ക് എൻഡ് മാറ്റങ്ങൾ ഉത്പന്ന സവിശേഷതകൾ

വിന്യസിക്കുന്നത് ബോറടിക്കും. മോചനം ഒരു തീരുമാനമായിരിക്കണം.

പ്രായോഗികമായി അര് ഗോ വിന്യസിക്കൽ

കുബർനെറ്റീസിൽ, അര് ഗോ വിന്യാസങ്ങൾ (അതും ഫ്ലാഗർ, ഫ്ലക്സ് പരിസ്ഥിതി വ്യവസ്ഥയിലെ അതിന്റെ എതിരാളി) യാന്ത്രിക വിശകലനമുള്ള കാനറി, നീല-പച്ച തന്ത്രങ്ങൾ ചേർക്കുന്നു.

A Rollout ഒരു Deployment:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: shop-api
spec:
  replicas: 10
  strategy:
    canary:
      steps:
      - setWeight: 5
      - pause: { duration: 5m }
      - analysis:
          templates:
          - templateName: error-rate
      - setWeight: 25
      - pause: { duration: 10m }
      - setWeight: 50
      - pause: { duration: 10m }
  selector:
    matchLabels: { app: shop-api }
  template:
    # same pod template as a Deployment

സി. വിശകലനം step ഒരു പ്രോമെഥിയസ് അന്വേഷണം നടത്തുന്നു, ഉദാഹരണത്തിന് കാനറിയിലെ പിശക് നിരക്ക്, അത് ഒരു പരിധിയുമായി താരതമ്യം ചെയ്യുന്നുഃ

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: error-rate
spec:
  metrics:
  - name: error-rate
    interval: 1m
    count: 5
    successCondition: result[0] < 0.01
    provider:
      prometheus:
        address: http://prometheus.monitoring:9090
        query: |
          sum(rate(http_requests_total{app="shop-api",version="canary",code=~"5.."}[2m]))
          /
          sum(rate(http_requests_total{app="shop-api",version="canary"}[2m]))

പിശക് നിരക്ക് 1% നു മുകളിലായാൽ, റോളൌട്ട് നിർത്തലാക്കുകയും ട്രാഫിക് സ്ഥിരമായ പതിപ്പിലേക്ക് മടങ്ങുകയും ചെയ്യും. ആരും ഉണരേണ്ട ആവശ്യമില്ലായിരുന്നു.

കൃത്യമായ ട്രാഫിക് ശതമാനം ലഭിക്കുന്നതിന്, ഗേറ്റ്വേ API നടപ്പിലാക്കലുകളുമായും സേവന മെഷുകളുമായും പ്രവേശന കൺട്രോളറുകളുമായും റോളൌട്ട്സ് സംയോജിപ്പിക്കുന്നു. അവയില്ലാതെ, അത് റെപ്ലിക്ക എണ്ണം ഉപയോഗിച്ച് ഭാരം ഏകദേശമാക്കുന്നു.

ഓപ്പൺഫീച്ചർ ഉപയോഗിച്ച് ഫീച്ചർ ഫ്ലാഗുകൾ

ഫീച്ചർ ഫ്ലാഗ്സ് എന്നതിനർത്ഥം ഒരു വീട്ടുപകരണമാണ് if ഒരു പരിസ്ഥിതി വേരിയബിൾ വായിക്കുന്ന ഒരു പ്രസ്താവന, അല്ലെങ്കിൽ എല്ലായിടത്തും സ്വന്തം SDK ഉള്ള ഒരു വാണിജ്യ സേവനം. ഓപ്പൺ ഫീച്ചർ, ഒരു സിഎൻസിഎഫ് പ്രോജക്ട്, എപിഐയെ സ്റ്റാൻഡേർഡൈസ് ചെയ്യുന്നുഃ നിങ്ങളുടെ കോഡ് ഒരു എസ്ഡികെ ഉപയോഗിക്കുന്നു, അതിന് പിന്നിൽ നിങ്ങൾക്ക് വ്യത്യസ്ത ഫ്ലാഗ് ദാതാക്കളെ പ്ലഗ് ചെയ്യാം (ഫ്ലാഗ്, ലോഞ്ച്ഡാർക്ക്ലി, ഫ്ലാഗ്മിത്ത്, അൺലീഷ്, ഗ്രോത്ത്ബുക്ക് തുടങ്ങിയവ).

enabled, _ := client.BooleanValue(ctx, "new-checkout", false, evalCtx)
if enabled {
    return newCheckout(w, r)
}
return oldCheckout(w, r)

നല്ല പതാക ശീലങ്ങൾ:

  • ഓരോ പതാകയ്ക്കും ഒരു ഉടമസ്ഥനും കാലഹരണ തീയതിയും നൽകുക. പഴയ പതാകകൾ വേഗത്തിൽ സാങ്കേതിക കടമായി മാറുന്നു.
  • ശുചിയാക്കൂ ഒരു സവിശേഷത പൂർണ്ണമായി റിലീസ് ചെയ്താല് .
  • വിമര് ശനീയമായ പാതകളിൽ നിന്ന് പതാകകളെ അകറ്റി നിർത്തുക ഫ്ലാഗ് സേവനം നിലച്ചാല് അത് ചിലതൊക്കെ തകര് ത്തു കളയുകയോ, അല്ലെങ്കിൽ വിവേകപൂർണമായ ഡീഫോൾട്ടുകൾ ഉപയോഗിക്കുകയോ ചെയ്യും.

SLO ലംഘനം നടക്കുമ്പോൾ ഓട്ടോമാറ്റിക് റോൾബാക്ക്

ഏറ്റവും നല്ല സജ്ജീകരണങ്ങള് നിങ്ങളുടെ സേവന നിലവാര ലക്ഷ്യങ്ങളുമായി റിലീസുകളെ ബന്ധിപ്പിക്കുന്നു. ഒരു പുതിയ പതിപ്പ് സാധാരണ പതിപ്പിനേക്കാൾ വേഗത്തിൽ പിശക് ബജറ്റ് ഉപയോഗിക്കുകയാണെങ്കിൽ, റോളൌട്ട് നിർത്തിവയ്ക്കുകയും വിപരീതമാക്കുകയും ചെയ്യും. അത് "ഡാഷ്ബോർഡുകൾ ഭീതിയോടെ നിരീക്ഷിക്കുക" എന്നതിനെ ഉപയോക്താക്കളുടെ യഥാർത്ഥ അനുഭവത്തെ അടിസ്ഥാനമാക്കിയുള്ള ഒരു ഓട്ടോമാറ്റിക് സുരക്ഷാ നെറ്റ് ആയി മാറ്റുന്നു.

പിന്നെ, ഏത് ഉപയോഗിക്കണം?

ഉത്പന്ന മാറ്റങ്ങളുടെ ഫീച്ചർ ഫ്ലാഗുകളുമായി തുടങ്ങുക, അവയാണ് ഏറ്റവും എളുപ്പമുള്ള വിജയം. നിങ്ങളുടെ ഏറ്റവും പ്രധാനപ്പെട്ട സേവനങ്ങളുടെ ഓട്ടോമാറ്റിക് വിശകലനവുമായി കാനറി റിലീസുകൾ ചേർക്കുക. നീല-പച്ച ഉപയോഗിക്കുക, ഒരു വലിയ പതിപ്പ് മാറ്റം പോലെ, ഒരു ശുദ്ധമായ സ്വിച്ച് ആവശ്യമുള്ളപ്പോൾ. കുറഞ്ഞ അപകടസാധ്യതയുള്ള എല്ലാ കാര്യങ്ങളും അപ്ഡേറ്റ് ചെയ്യണം.

എന്റെ അഭിപ്രായം: ചെറിയ ഘട്ടങ്ങളിലൂടെ പുറത്തിറക്കുക, അളവുകൾ ആദ്യം തീരുമാനമെടുക്കട്ടെ, തിരികെ പോകുന്നത് എപ്പോഴും ഒരു ക്ലിക്കിൽ അകലെ ആണെന്ന് ഉറപ്പാക്കുക.

ഡെസ്ലി