The Reconciliation Loop Pattern
Reconciliation tsikli naqshi
Termostatni tasavvur qiling: u har soniyada xonaning JORIY haroratini o'lchaydi, buni siz BELGILAGAN haroratga solishtiradi, va farq bo'lsa — isituvchini yoqadi yoki o'chiradi. U hech qachon "tugatmaydi" — bu tsikl DOIMIY davom etadi. "ReplicaSet: Keeping N Copies Running" darsida yozgan Reconcile metodi ham aslida shu termostat bilan bir xil naqsh: kuzat, solishtir, harakat qil. Bu darsda buni UMUMIY, istalgan turdagi "controller" uchun ishlaydigan interfeysga aylantiramiz.
package main
import "fmt"
// Controller — har qanday "kuzat, solishtir, harakat qil" tsiklini ifodalovchi umumiy interfeys
type Controller interface {
Observe() int
Desired() int
Act()
}
// Reconcile — Observe va Desired TENG bo'lguncha Act'ni chaqiraveradi
func Reconcile(c Controller) int {
steps := 0
for c.Observe() != c.Desired() {
c.Act()
steps++
}
return steps
}
// ReplicaCount — oldingi darsdagi ReplicaSet g'oyasining, Controller interfeysiga moslashtirilgan ko'rinishi
type ReplicaCount struct {
current int
desired int
}
func (r *ReplicaCount) Observe() int { return r.current }
func (r *ReplicaCount) Desired() int { return r.desired }
func (r *ReplicaCount) Act() {
if r.current < r.desired {
r.current++
} else if r.current > r.desired {
r.current--
}
}
func main() {
rc := &ReplicaCount{current: 1, desired: 4}
steps := Reconcile(rc)
fmt.Println(steps, rc.current)
}Controller — "Interface Design" darsida ko'rgan naqsh: UMUMIY xatti-harakatni ("kuzat, solishtir, harakat qil") KONKRET amalga oshirishdan ("bu aynan ReplicaSet haqida") AJRATISH. Reconcile funksiyasi ReplicaCount haqida HECH NARSA bilishi shart emas — u faqat Controller interfeysi bilan ishlaydi, shuning uchun XUDDI SHU funksiya, keyinchalik yozadigan istalgan boshqa "controller" uchun HAM ishlaydi.
Bu — real Kubernetes'ning ENG asosiy arxitektura g'oyasi: ReplicaSet controller, Deployment controller, Node controller — ularning HAMMASI, ichida turlicha logika bo'lsa ham, TASHQI ko'rinishda aynan shu bir xil "kuzat, solishtir, harakat qil" naqshini takrorlaydi. Shuning uchun Kubernetes'ga YANGI turdagi resurs qo'shish (masalan, siz o'zingiz "Putting It All Together" darsida ko'radigan kabi) — mavjud tizimni O'ZGARTIRISH emas, balki shu naqshga mos YANGI controller YOZISH, xolos.
>_ Exercise
Controller interfeysining IKKINCHI, mutlaqo boshqa sohadagi amalga oshirilishini yozing.
- •Temperature struct'ini yozing (current, desired int maydonlari bilan)
- •Unga Observe, Desired va Act metodlarini qo'shing (xuddi ReplicaCount'dagi kabi, current'ni desired'ga bir qadamda yaqinlashtiring)
- •current=10, desired=15 bilan Temperature yaratib, Reconcile(temp)ni chaqiring va steps, temp.current'ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Reconciliation loop — "kuzat, solishtir, harakat qil" naqshini interfeys orqali UMUMLASHTIRIB, bitta Reconcile funksiyasini ReplicaSet, Deployment yoki mutlaqo boshqa sohadagi (masalan, termostat) har qanday controller uchun qayta ishlatish imkonini beradi.
NEXT UP
Watching for Changes
$ go run main.go
Kodingizni ishga tushiring