GH GambleHub

Lider seçimi

1) Nə üçün lider lazımdır və ümumiyyətlə bəraət aldıqda

Lider kritik hərəkətləri yerinə yetirmək üçün eksklüziv hüququ olan bir qovşaqdır: kronun/ETL-nin işə salınması, şardların koordinasiyası, açarların paylanması, konfiqurasiyanın dəyişdirilməsi. O, invariantları sadələşdirir («bir ifaçı»), lakin riskləri əlavə edir (SPOF, təkrar seçkilər, laq).

Əgər liderlik istifadə edin:
  • yalnız icra lazımdır (məsələn, dəqiqədə bir dəfə billing aqreqator);
  • dəyişikliklərin serilizasiyası tələb olunur (konfiqurasiya reyestri, paylanmış kilidlər);
  • klaster protokolu liderlik replikasiyasını (Raft) nəzərdə tutur.
Aşağıdakı hallarda çəkinin:
  • problemi idempotentlik və açar qaydası həll edir;
  • work-stealing/növbələr vasitəsilə paralelləşdirilə bilər;
  • «lider» yeganə dar nöqtəyə çevrilir (geniş fan-in).

2) Əsas model: lease + kvorum + epoxa

Terminlər

Lease (icarə): lider T saniyə hüququ alır; yeniləməlidir.
Heartbeat: dövri yeniləmə/siqnal «canlı».
Epoch/term (epoxa, müddət): monoton artan liderlik nömrəsi. Köhnə liderləri tanımağa kömək edir.
Fencing token: resurs istehlakçısını (DB/saxlama) yoxlayan və köhnə liderin əməliyyatlarını rədd edən eyni monoton nömrə.

İnvariantlar

Hər an ən çox bir həqiqi lider (safety).
Uğursuzluq baş verərsə, irəliləyiş mümkündür: ağlabatan zamanda yeni (liveness) seçilir.
Liderin əməliyyatları epoxa ilə müşayiət olunur; Sinki yalnız yeni dövrlər alır.

3) Alqoritmlər və protokolların icmalı

3. 1 Raft (liderlik replikasiyası)

Hallar: Follower → Candidate → Lider.
Zamanlayıcılar: random election timeout (jitter), RequestVote; lider bir heartbeat kimi AppendEntries saxlayır.
Zəmanət: kvorum, standart şərtlər altında split-brain olmaması, məntiqi monotoniyalı jurnal (term/index).

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

Konsensusun nəzəri əsası; praktikada - variasiyalar (e. g., Multi-Paxos) «seçilmiş koordinator» ilə (liderin analoqu).
Birbaşa həyata keçirmək daha çətindir; daha çox hazır tətbiqlər/kitabxanalar istifadə olunur.

3. 3 ZAB (ZooKeeper Atomic Broadcast)

ZK mexanizmi: bərpa mərhələləri ilə jurnalın lider replikasiyası; eralar (zxid) və liderlik kimi primitivlər üçün ardıcıl efemer düyünlər.

3. 4 Bully/Chang-Roberts (üzüklər/monarx)

Kvorum olmadan statik topologiyalar üçün «təlim» alqoritmləri. Qismən şəbəkə uğursuzluqları/bölünmələri nəzərə alınmır - prodda tətbiq etməyin.

4) Praktik platformalar

4. 1 ZooKeeper

Model EPHEMERAL_SEQUENTIAL: proses '/leader/lock-XXXX 'yaradır, minimum nömrə liderdir.
Seans itkisi ⇒ düyün yox olur ⇒ yenidən seçimi ani.
«sələfi» gözləməklə ədalət.

4. 2 etcd (Raft)

Klaster səviyyəsində yerli liderlik; tətbiqlər üçün - etcd concurrency: 'Session + Mutex/Election'.
Lease-ID с TTL, keepalive; dövrü açar mənasında saxlaya bilərsiniz.

4. 3 Consul

'session' + 'KV acquire': açarı tutan liderdir. Sessiyada TTL/ürək döyüntüsü.

4. 4 Kubernetes

Leases coordination API (`coordination. k8s. io/v1`): ресурс `Lease` c `holderIdentity`, `leaseDurationSeconds`, `renewTime`.
'leaderelection' (client-go) müştəri kitabxanası tutma/yeniləmə həyata keçirir; pot lideri üçün idealdır.

5) «təhlükəsiz» lider qurmaq üçün necə

5. 1 Dövrü və fencing saxlayın

Hər bir liderlik epoch artırır (məsələn, etcd/ZK zxid yoxlama və ya ayrıca sayğac).

Liderin bütün yan təsirləri (DB-də qeyd, tapşırıqların icrası) "epoch 'u ötürməli və müqayisə edilməlidir:
sql
UPDATE cron_state
SET last_run = now(), last_epoch =:epoch
WHERE name = 'daily-rollup' AND:epoch > last_epoch;

Köhnə lider (sonra split-brain) rədd ediləcək.

5. 2 Tayminqlər

'leaseDuration' ≥ '2-3 × heartbeatInterval + şəbəkə + p99 GC-fasilə'.
Election timeout - namizədlərin toqquşmaması üçün randomize (jitter).
Yeniləmə itirildikdə - kritik əməliyyatları dərhal dayandırın.

5. 3 Kimlik

`holderId = node#pid#startTime#rand`. Yeniləmə/çıxarma zamanı eyni holderi yoxlayın.

5. 4 Müşahidəçilər (watchers)

Bütün izləyicilər 'Lease/Election' dəyişikliklərinə abunədirlər və vəziyyətə uyğun olaraq işə başlayırlar/dayandırırlar.

6) Həyata keçirilmə: fraqmentlər

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) Təkrar seçim və xidmətin deqradasiyası

Liderin kəskin fappinqləri → qrafiklərdə «balıq sümüyü». leaseDuration/renewDeadline artırılması və GC/CPU-pil aradan qaldırılması ilə müalicə olunur.
Yenidən seçim müddətində brownout-u açın: arxa plan tapşırıqlarının intensivliyini azaltın və ya təsdiqlənmiş leadership-ə qədər tamamilə dondurun.
Uzun joblar üçün lider dəyişdikdən sonra çek nöqtələri + idempotent dokat edin.

8) Split-brain: vurmamaq üçün necə

Kvorum ilə CP saxlama (etcd/ZK/Consul) istifadə edin; lider kvorumu olmadan götürmək olmaz.
Heç vaxt hakim kvorum olmadan AP cache üzərində liderlik qurmaq.
Hətta CP modelində fencinqi resurs səviyyəsində saxlayın - bu nadir qeyri-adi ssenarilərə (fasilələr, asılı sürücülər) qarşı sığortadır.

9) Müşahidə və istismar

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'.
'flaps _ total' - pəncərə arxasında liderin növbə sayı.
ZK/etcd üçün: replikasiya gecikməsi, kvorum sağlamlığı.

Alertlər

Liderin tez-tez dəyişməsi (> Saat başına N).
Yeniləmə uğursuzluqları 'renew '/yüksək p99.
Epoch uyğunsuzluğu (müxtəlif düyünlərdə iki fərqli dövr).
X saniyədən artıq lider yoxdur (əgər biznes icazə vermirsə).

Log/Trade

Hadisələri link edin: 'epoch', 'holderId', 'reason' (lost lease, session expired), 'duration _ ms'.

10) Test Playbook (Game Days)

Partition: 2 zona arasında şəbəkəni kəsin - liderliyə yalnız kvorum hissəsində icazə verilir.
GC-stop: süni 5-10s liderini dayandırın - icarəni itirməli və işini dayandırmalıdır.
Clock skew/drift: düzgün wall-clock asılı olmadığından əmin olun (fencing/epoch xilas).
Kill -9: qəfil crash lideri → leaseDuration ≤ üçün yeni lider.
Slow storage: disk/log Raft yavaşlatmaq - seçki vaxtını qiymətləndirmək, zamanlama hata.

11) Anti-nümunələr

Redis 'SET NX PX' vasitəsilə «lider» fencing olmadan və kvorum olmadan.
'leaseDuration' p99 kritik əməliyyat müddəti az.
Liderliyinizi itirdikdən sonra işinizi dayandırın/davam etdirin («bir dəqiqə daha bitirəcəyəm»).
Election-zamanlayıcılarda jitter olmaması → fırtına seçkiləri.
Yoxlama nöqtələri olmadan vahid uzun job - hər flap sıfırdan təkrarlanmasına səbəb olur.
Liderlik və trafik marşrutu (sticky) ilə fallback olmadan sıx əlaqə - flape pod 5xx alır.

12) Giriş çek siyahısı

  • Kvorum hakimi seçildi: etcd/ZK/Consul/K8s Lease.
  • Liderin bütün yan təsirlərinə epoch/fencing saxlayın və ötürün.
  • Tayminqlər: 'leaseDuration', 'renewDeadline', 'retryPeriod' şəbəkə ehtiyatı ilə/GC.
  • Daxili watchers və liderlik itirdikdə düzgün dayandırılması.
  • Liderlik vəzifələri idempotentdir və yoxlanılır.
  • Metriklər/Alertlər və Loging 'epoch/holderId' daxildir.
  • Keçirilmiş game days: partition, GC-stop, kill, clock skew.
  • Siyasətlər sənədləşdirilmişdir: lider kim/nə edir, kim onu əvəz edə bilər, necə epoch münaqişələri sürətləndirmək.
  • Deqradasiya planı: sistem lider olmadan nə edir.
  • Performans testi: yük altında flaps SLO-nu məhv etmir.

13) FAQ

Q: Liderlik kvorum olmadan qurula bilərmi?
A: Prod - yox. Ekvivalent zəmanətləri olan bir CP komponenti (kvorum) və ya bulud xidməti lazımdır.

Q: lease varsa niyə epoch?
A: Lease canlılığı təmin edir, lakin ayrıldıqdan/fasilələrdən sonra «köhnə liderdən» qorunmur. Epoch/fencing köhnə liderin təsirlərini etibarsız edir.

Q: K8s tayming defoltları nələrdir?
A: Tez-tez istifadə olunur 'LeaseDuration ≈ 15s', 'RenewDeadline ≈ 10s', 'RetryPeriod ≈ 2s'. P99 yük və GC üçün seçin.

S: Yerli liderliyi necə test etmək olar?
A: 3-5 instans başlayın, şəbəkəni emulasiya edin (tc/netem), fasilələr (SIGSTOP), lideri öldürün (SIGKILL), metrik/log/dövrü yoxlayın.

Q: Lider dəyişərkən uzun vəzifələrlə nə etmək lazımdır?
A: Checkpoint + idempotent dokat; liderliyi itirdikdə - dərhal dayandırın və resursları boşaltın.

14) Nəticələr

Liderin etibarlı seçimi kvorum hakimi + dövrlərin intizamıdır. heartbeat ilə icarə kimi liderliyi saxlayın, fencing tokeninin bütün effektlərini vurun, zamanlayıcıları ehtiyat ilə konfiqurasiya edin, liderin vəzifələrini idempotent və müşahidə edin, müntəzəm olaraq uğursuzluqları itirin. Sonra «bir və yalnız bir» ifaçı şüar deyil, fasilələrə, şəbəkə şıltaqlıqlarına və insan səhvlərinə davamlı bir zəmanət olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.