GH GambleHub

Yetakchi tanlash

1) Rahbar nima uchun va qachon oqlanadi?

Yetakchi - tanqidiy harakatlarni bajarish uchun eksklyuziv huquqqa ega boʻlgan tugun: toj/ETL ishga tushirish, shardlarni muvofiqlashtirish, kalitlarni taqsimlash, konfiguratsiyani oʻzgartirish. U invariantlarni soddalashtiradi («bitta ijrochi»), lekin xavflarni qo’shadi (SPOF, qayta saylovlar, lag).

Agar:
  • yagona ijro zarurati (masalan, bir daqiqada bir marta billing-agregator);
  • o’zgarishlarni serilizatsiya qilish talab etiladi (konfiguratsiyalar reyestri, taqsimlangan blokirovkalar);
  • klaster protokoli yetakchilik replikatsiyasini (Raft) nazarda tutadi.
Agar:
  • muammoni idempotentlik va kalit bo’yicha tartib hal etadi;
  • work-stealing/navbatlar orqali parallellash mumkin;
  • «yetakchi» yagona tor nuqtaga (keng fan-in) aylanadi.

2) Bazaviy model: lease + kvorum + epoxa

Atamalar

Lease (ijara): rahbar T soniya huquqini oladi; uzaytirishi shart.
Heartbeat: davriy uzaytirish/« tirik »signali.
Epoch/term (davr, muddat): yetakchilikning monoton o’sib boruvchi raqami. Eski rahbarlarni aniqlashga yordam beradi.
Fencing token: resurs isteʼmolchisini tekshiradigan va eski rahbarning operatsiyalarini rad etadigan bir xil monoton raqam.

Invariantlar

Har qanday vaqtda bittadan ko’p bo’lmagan haqiqiy rahbar (safety).
Muvaffaqiyatsiz bo’lganda taraqqiyot bo’lishi mumkin: oqilona vaqt ichida yangi (liveness) tanlanadi.
Rahbarning operatsiyalari davr bilan birga keladi; sinki faqat yangi davrlarni qabul qiladi.

3) Algoritmlar va protokollar sharhi

3. 1 Raft (yetakchi replikatsiya)

Holatlar: Follower → Candidate → Leader.
Taymerlar: random election timeout (jitter), RequestVote; yetakchi AppendEntries’ni heartbeat sifatida ushlab turadi.
Kafolatlar: kvorum, standart shartlarda split-brain yo’qligi, mantiqiy monotoniyali jurnal (term/index).

3. 2 Paxos/Single-Decree / Multi-Paxos

Konsensusning nazariy asosi; amalda - variatsiyalar (e. g., Multi-Paxos) «tanlangan koordinator» (yetakchining analogi) bilan.
To’g «ridan to’g» ri amalga oshirish uchun qiyinroq; ko’proq tayyor sotish/kutubxonalardan foydalaniladi.

3. 3 ZAB (ZooKeeper Atomic Broadcast)

ZK mexanizmi: jurnalning tiklanish bosqichlari bilan yetakchilik replikatsiyasi; davrlar (zxid) va etakchilik kabi ibtidoiy uchun ketma-ket efemer tugunlar.

3. 4 Bully/Chang-Roberts (halqa/monarx)

Statik topologiyalar uchun kvorumsiz «o’quv» algoritmlari. Tarmoqning qisman uzilishlari/bo’linishlari hisobga olinmaydi - mahsulotda qo’llamang.

4) Amaliy platformalar

4. 1 ZooKeeper

Pattern EPHEMERAL_SEQUENTIAL: jarayon ’/leader/lock-XXXX’ni yaratadi, minimal raqam - yetakchi.
Seansni yoʻqotish ⇒ tugun yoʻqoladi ⇒ qayta tanlash tezda.
«Oʻtmishdoshni» kutish orqali adolat.

4. 2 etcd (Raft)

Klaster darajasida milliy yetakchilik; ilovalar uchun - etcd concurrency:’Session + Mutex/Election’.
Lease-ID с TTL, keepalive; davrni kalit maʼnosida saqlash mumkin.

4. 3 Consul

’session’ +’KV acquire’: kim kalitni ushlab tursa, u peshqadamdir. TTL/sessiyada yurak urishi.

4. 4 Kubernetes

Leases coordination API (`coordination. k8s. io/v1`): ресурс `Lease` c `holderIdentity`, `leaseDurationSeconds`, `renewTime`.
’leaderelection’ (client-go) mijozlar kutubxonasi tutib olish/uzaytirishni amalga oshiradi; peshtoq uchun ideal.

5) «Xavfsiz» yetakchini qanday qurish kerak

5. 1 Davr va fencingni saqlang

Har bir yetakchilik davrni oshiradi (masalan, etcd/ZK zxid taftishi yoki alohida hisoblagich).

Rahbarning barcha nojo’ya ta’siri (DQdagi yozuv, vazifalarni bajarish) «epoch» ni uzatishi va quyidagilarni solishtirishi shart:
sql
UPDATE cron_state
SET last_run = now(), last_epoch =:epoch
WHERE name = 'daily-rollup' AND:epoch > last_epoch;

Eski rahbar (split-brain) rad etiladi.

5. 2 Tayminglar

’leaseDuration’ ≥’2-3 × heartbeatInterval + tarmoq + p99 GC-pauza’.
Election timeout - nomzodlar to’qnashmasliklari uchun randomizatsiya qilish.
Uzaytirish yo’qotilganda - tanqidiy operatsiyalarni darhol to’xtatish.

5. 3 Identifikatsiya

`holderId = node#pid#startTime#rand`. Yangilanayotganda/olib tashlanayotganda, xuddi shu holderni tekshiring.

5. 4 Kuzatuvchilar (watchers)

Barcha izdoshlar’Lease/Election’oʻzgarishlariga obuna boʻlib, holati boʻyicha ishlashni boshlaydilar/toʻxtatadilar.

6) Amalga oshirish: parchalar

6. 1 Kubernetes (Go)

go import "k8s. io/client-go/tools/leaderelection"

lec:= leaderelection. LeaderElectionConfig{
Lock: &rl. LeaseLock{
LeaseMeta: metav1. ObjectMeta{Name: "jobs-leader", Namespace: "prod"},
Client:  coordClient,
LockConfig: rl. ResourceLockConfig{Identity: podName},
},
LeaseDuration: 15 time. Second,
RenewDeadline: 10 time. Second,
RetryPeriod:  2 time. Second,
Callbacks: leaderelection. LeaderCallbacks{
OnStartedLeading: func(ctx context. Context) { runLeader(ctx) },
OnStoppedLeading: func() { stopLeader() },
},
}
leaderelection. RunOrDie(context. Background(), lec)

6. 2 etcd (Go)

go cli, _:= clientv3. New(...)
sess, _:= concurrency. NewSession(cli, concurrency. WithTTL(10))
e:= concurrency. NewElection(sess, "/election/rollup")
_ = e. Campaign (ctx, podID )//blocking call epoch: = sess. Lease ()//use as part of fencing defer e. Resign(ctx)

6. 3 ZooKeeper (Java, Curator)

java
LeaderSelector selector = new LeaderSelector(client, "/leaders/rollup", listener);
selector. autoRequeue();
selector. start(); // listener. enterLeadership () performs leader work with try/finally

7) Servisni qayta saylash va degradatsiya qilish

Jadvallarda yetakchining keskin flappinglari → «baliq suyagi». U leaseDuration/renewDeadline va GC/CPU-pilni yo’q qilish orqali davolanadi.
Qayta tanlash davrida brauzerni yoqing: orqa fon vazifalarining intensivligini pasaytiring yoki tasdiqlangan leadershipgacha to’liq muzlatib qo’ying.
Uzoq joblar uchun chek pointlari + yetakchi o’zgargandan keyin idempotent dokat qiling.

8) Split-brain: qanday qilib tushmaslik kerak

Kvorumli CP omboridan (etcd/ZK/Consul) foydalaning; liderni kvorumsiz olish mumkin emas.
Hech qachon AP-keshda hakamsiz etakchilik qilmang.
Hatto CP modelida ham fencingni resurs darajasida saqlang - bu noyob shtat bo’lmagan stsenariylardan sug’urtalash (pauzalar, osilgan drayverlar).

9) Kuzatish va foydalanish

Metrika

`leadership_is_leader{app}` (gauge 0/1).
`election_total{result=won|lost|resign}`.
`lease_renew_latency_ms{p50,p95,p99}`, `lease_renew_fail_total`.
’epoch _ value’ (klasterlar boʻyicha monotonlik).
’flaps _ total’ - oynada yetakchi smenalar soni.
ZK/etcd uchun: replikatsiya, kvorum salomatligi.

Alertlar

Rahbarning tez-tez almashinishi (soatiga> N).
Uzaytirish muvaffaqiyatsizliklari’renew ’/yuqori p99.
Epochlarning nomuvofiqligi (turli tugunlardagi ikki xil davr).
X soniyadan ortiq yetakchi yoʻq (agar biznes ruxsat bermasa).

Logi/treys

’epoch’,’holderId’,’reason’(lost lease, session expired),’duration _ ms’.

10) Test-pleybuklar (Game Days)

Partition: 2 zona orasidagi tarmoqni uzing - faqat kvorum qismida yetakchilikka ruxsat beriladi.
GC-stop: rahbarni sun’iy ravishda 5-10s to’xtating - ijarani yo’qotib, ishni to’xtatish kerak.
Clock skew/drift: toʻgʻrilik wall-clock (fencing/epoch qutqaradi) ga bogʻliq emasligiga ishonch hosil qiling.
Kill -9: leaseDuration ≤ uchun to’satdan etakchi → yangi etakchi.
Slow storage: disk/logni sekinlashtiring Raft - saylov vaqtini baholang, tayminglarni tuzating.

11) Anti-patternlar

«Lider» Redis’SET NX PX’fencingsiz va kvorumsiz.
’leaseDuration’ p99 kritik operatsiya davomiyligidan kam.
Rahbarlikni yo’qotgandan keyin ishni to’xtatish/davom ettirish («yana bir daqiqa yakunlayman»).
Election-taymerlarda jitterning yo’qligi → bo’ron.
Chekpindsiz bitta uzun job - har bir flap noldan takrorlanishiga olib keladi.
Fallbacksiz yetakchilik va trafikni yo’naltirish (sticky) - flapda pod 5xx oladi.

12) Joriy etish chek-varaqasi

  • Kvorum hakami tanlandi: etcd/ZK/Consul/K8s Lease.
  • Rahbarning barcha nojo’ya ta’sirlariga epoch/fencing saqlaymiz va uzatamiz.
  • Tayminglar sozlangan:’leaseDuration’,’renewDeadline’,’retryPeriod ’/GC.
  • Watchers o’rnatilgan va rahbarlik yo’qolganda to’g’ri to’xtash.
  • Rahbarlik vazifalari idempotent va tekshiriladi.
  • Metriklar/alertlar va’epoch/holderId’logotipi kiritilgan.
  • Oʻtkazilgan game days: partition, GC-stop, kill, clock skew.
  • Siyosatchilar hujjatlashtirilgan: etakchi kim/nima qiladi, uning o’rnini kim egallashi mumkin, mojarolarni qanday hal qilish kerak.
  • Tanazzul rejasi: tizim etakchisiz nima qiladi.
  • Unumdorlik testi: flaps SLOni ishdan chiqarmaydi.

13) FAQ

Q: Etakchilikni kvorumsiz qurish mumkinmi?
A: Ishlab chiqarishda - yo’q. CP komponenti (kvorum) yoki ekvivalent kafolatlarga ega bulutli xizmat kerak.

Q: Agar lease bo’lsa, nega epoch kerak?
A: Lease omon qolishni ta’minlaydi, lekin ajratish/pauzadan keyin «eski rahbar» dan himoya qilmaydi. Epoch/fencing eski rahbar effektlarini bekor qiladi.

Q: K8s tayming defoltlari qanday?
A: Ko’pincha’LeaseDuration ≈ 15s’,’RenewDeadline ≈ 10s’,’RetryPeriod ≈ 2s’dan foydalaniladi. P99 yuk va GC uchun tanlang.

Q: Mahalliy rahbarlikni qanday sinash mumkin?
A: 3-5 ta instansiyani ishga tushiring, tarmoqni emulyatsiya qiling (tc/netem), pauzalar (SIGSTOP), rahbarni o’ldiring (SIGKILL), davrning metrikasini tekshiring.

Q: Rahbarni almashtirishda uzoq vazifalar bilan nima qilish kerak?
A: Chekpint + idempotent dokat; rahbarlikni yo’qotganda - resurslarni darhol to’xtatish va bo’shatish.

14) Yakunlar

Peshqadamning ishonchli tanlovi - kvorum hakami + davr intizomi. Heartbeat bilan ijara sifatida yetakchilikni saqlab qoling, fencing tokenining barcha effektlarini uring, tayminglarni zaxira bilan sozlang, rahbarning vazifalarini o’zgaruvchan va kuzatiluvchan qiling, muntazam ravishda muvaffaqiyatsizliklarni yo’qoting. Shunda «bitta va faqat bitta» ijrochi shior emas, balki tanaffus, tarmoq injiqliklari va inson xatolariga chidamli kafolat boʻladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.