GH GambleHub

Առաջնորդի ընտրությունը

1) Ինչո՞ ւ առաջնորդի կարիք կա, և երբ այն ընդհանուր առմամբ արդարացված է։

Առաջնորդը այն հանգույցն է, որն ունի բացառիկ իրավունք կրիտիկական գործողություններ կատարելու, կրոնի/ETL գործարկումը, շարքերի համակարգումը, կոդավորման բաշխումը, կազմաձևի փոփոխությունը։ Այն պարզեցնում է invariants («մեկ կատարող»), բայց ավելացնում է ռիսկերը (SPOF, պերե ընտրությունները, լագը)։

Օգտագործեք առաջնորդությունը, եթե

մենք պետք է կատարվենք (օրինակ, մեկ րոպեում մեկ անգամ բիլինգ ագրեգատորը);

անհրաժեշտ է փոփոխությունների սերիլիզացում (ներարկումներ, բաշխված արգելափակումներ);

կլաստերի արձանագրությունը ենթադրում է առաջնորդական կրկնօրինակում (Raft)։

Խուսափեք, եթե

խնդիրը լուծում է գաղափարախոսությունը և կարգուկանոնը։

կարող եք ներկել work-stealing/հերթով;

«առաջնորդը» դառնում է միակ նեղ կետը (լայն ֆան-in)։

2) Ռուսական մոդել 'leant + kvorum + դարաշրջան

Տերմինները

Least (վարձույթ), առաջնորդը ստանում է T վայրկյան իրավունք։ պետք է երկարացնել։

Heartbeat: պարբերական երկարացում/ազդանշան «կենդանի»։

Epoch/term (դարաշրջան, ժամանակահատվածը) 'միապաղաղ աճող ղեկավարության համարը։ Օգնում է ճանաչել «հին» առաջնորդներին։

Fencing token: նույն մոնոտոնային համարը, որը ստուգում է ռեսուրսի սպառողը (BD/պահեստ) և մերժում է հին առաջնորդի վիրահատությունը։

Invariants

Ցանկացած պահի ոչ ավելի քան մեկ իրական առաջնորդ (safety)։

Խնայողությունների դեպքում հնարավոր է առաջընթաց 'խելացի ժամանակի ընթացքում նոր (liveness)։

Առաջնորդի վիրահատությունները ուղեկցվում են դարաշրջանով։ կապույտները միայն նոր դարաշրջաններ են ընդունում։

3) Ալգորիթմների և ալգորիթմների ակնարկ

3. 1 Raft (առաջնորդական կրկնօրինակումը)

Վիճակը 'Follower no Candidate to Leader։

Թայմեր ՝ randium electime timeout (ջիտթեր), RequestVote; առաջնորդը պահում է AppendEntries որպես heartbeat։

Երաշխիքներ 'kvorum, split-brain բացակայություն ստանդարտ նախադրյալների ժամանակ, ամսագիր տրամաբանական մոնոտոնիայի հետ (term/index)։

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

Տեսական հիմքը։ գործնականում 'տատանումներ (e. g., Multi-Paxos) «ընտրված կոորդինատով» (առաջնորդի անալոգը)։

Ավելի բարդ է ուղիղ իրականացման համար։ ավելի հաճախ օգտագործվում են պատրաստի իրականացումներ/գրադարաններ։

3. 3 ZAB (ZooKeeper Atomic Broadcast)

ZK մեխանիզմը 'ամսագրի առաջնորդական կրկնօրինակումը վերականգնման փուլերով։ դարաշրջան (zxid) և հաջորդական էֆեմերական կոմպոզիցիաներ պրիմիտիվների համար, ինչպիսիք են առաջնորդությունը։

3. 4 Bully/Chang-Roberts (օղակներ/միապետներ)

«Կրթական» ալգորիթմներ ստատիկ տեղաբանության համար առանց կվորումի։ Հաշվի չառնեք ցանցի մասնակի ձախողումները/բաժանումը, մի օգտագործեք երկարության մեջ։

4) Գործնական հարթակներ

4. 1 ZooKeeper

Pattern EPHEMERAL _ SEQUENTIAL: Գործընթացը ստեղծում է '/leader/wwww.k-XXX ", նվազագույն համարը առաջնորդը։

Ռուսական հանգույցի նստաշրջանի կորուստը անհետանում է ռուսական փետուրային ընտրությունը ակնթարթորեն։

Արդարությունը «նախորդի» ակնկալիքի միջոցով։

4. 2 etcd (Raft)

National առաջնորդությունը հենց մրցույթի մակարդակում։ ծրագրերի համար 'etcd concurrency: «Session + Mutex/Election»։

Lease-ID с TTL, keepalive; դուք կարող եք պահել դարաշրջանը բանալին։

4. 3 Consul

"session '+" KV acquire ", ով պահում է բանալին, և առաջնորդը։ TTL/սրտաբաց նստաշրջանում։

4. 4 Kubernetes

Leases coordination API (`coordination. k8s. io/v1`): ресурс `Lease` c `holderIdentity`, `leaseDurationSeconds`, `renewTime`.

Հաճախորդների գրադարան 'leaderel.ru (client-go) իրականացնում է գրավումը/երկարացումը; իդեալական է ենթաօրենսդրական առաջնորդի համար։

5) Ինչպե՞ ս կառուցել «անվտանգ» առաջնորդ

5. 1 Պահպանեք դարաշրջանը և fencing

Յուրաքանչյուր առաջնորդություն ավելացնում է epoch (օրինակ, etcd/ZK zxid կամ առանձին հաշվիչ)։

Առաջնորդի բոլոր կողմնակի ազդեցությունները (ձայնագրությունը BD-ում, առաջադրանքների կատարումը) պարտավոր են փոխանցել «epoch» և համեմատել

sql
UPDATE cron_state
SET last_run = now(), last_epoch =:epoch
WHERE name = 'daily-rollup' AND:epoch > last_epoch;

Հին առաջնորդը (split-brain-ից հետո) կընդունի։

5. 2 Թայմինգներ

«Leance Duration '07' 2-3 www.hartbeate Interval + ցանցը + p99 GC դադար»։

Eltime timeout-ը ռանդոմալիզացիա է (ջիտտեր), որպեսզի թեկնածուները չմոռանան։

Երկարաձգումը կորցնելիս անմիջապես դադարեցնել կրիտիկական վիրահատությունները։

5. 3 Ինքնություն

`holderId = node#pid#startTime#rand`. Նորարարության/հեռացման ժամանակ նույն հոլդերը։

5. 4 Դիտորդներ (watchers)

Բոլոր հետևորդները ստորագրված են «Least/Election» փոփոխությունների վրա և սկսում են/դադարում են աշխատանքը համաձայն վիճակի։

6) Իրականացումներ ՝ բեկորներ

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) Պերե ընտրությունները և միգրանտների քայքայումը

Առաջնորդի կտրուկ ֆլամպինգները նկարագրում են «ձկները» գրաֆիկներում։ Այն բուժվում է Duration/renewDeadics-ի ավելացումով և GC/CPU-pil-ի վերացումով։

Պեր ընտրության ժամանակահատվածի համար միացրեք brownout 'նվազեցրեք ֆոնային խնդիրների ինտենսիվությունը կամ ամբողջովին սառեցրեք դրանք մինչև հաստատված leadership։

Երկար ջոբների համար պատրաստեք chekpoints + idempotent բժիշկ առաջնորդի փոփոխությունից հետո։

8) Split-brain: Ինչպես չմտնել

Օգտագործեք CP-105 (etcd/ZK/Consul) քվորումի հետ։ առանց կվորումի առաջնորդը չի կարող վերցնել։

Երբեք մի կառուցեք առաջնորդություն AP-cashe-ում առանց kvorum-ի։

Նույնիսկ CP-մոդելում պահեք fencing-ը ռեսուրսի մակարդակում, սա ապահովագրություն է հազվագյուտ ոչ վտանգավոր դեղամիջոցներից (դադարներ, որոնք բարձրացնում են վարորդները)։

9) Դիտողությունն ու շահագործումը

Մետրիկները

`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» -ը պատուհանի ետևում առաջնորդի հերթափոխն է։

ZK/etcd-ի համար 'վերարտադրության լագը, քվորումի առողջությունը։

Alerta

Առաջնորդի հաճախակի փոփոխությունը (> N մեկ ժամում)։

Երկարաձգման ձախողումները 'renew '/բարձր p99։

Epoch (երկու տարբեր դարաշրջաններ տարբեր հանգույցներում)։

Չկա առաջնորդ ավելի երկար X վայրկյանում (եթե բիզնեսը թույլ չի տալիս)։

Logs/treiss/

Լինկուլի իրադարձությունները '«epoch», «holium Id», «reason» (lost leason, session expired), «duration _ 108»։

10) Թեստային պլեյբուկները (Game Days)

Partium: Կոտրեք ցանցը երկու գոտիների միջև 'առաջնորդությունը միայն կվորումի հատվածում։

GC-stop: Արհեստականորեն կանգնեցրեք առաջնորդը 5-10s-ում, պետք է կորցնի վարձը և դադարեցնի աշխատանքը։

Clock skew/drift: համոզել, որ ճկունությունը կախված չէ wall-clock-ից (fencing/epoch փրկում է)։

Kill -9: առաջնորդի հանկարծակի քրեշը նոր առաջնորդը կներկայացնի ռուսական Duration-ի համար։

Slow storage: դանդաղեցրեք սկավառակները/log Raft - գնահատեք ընտրությունների ժամանակը, կարգաբերեք թայմինգները։

11) Anti-patterna

"Առաջնորդը" Redis 'XXNX PX "-ի միջոցով առանց ֆենչինգի և առանց քվորումի։

«Least Duration» -ը ավելի քիչ է, քան p99 կրիտիկական վիրահատության տևողությունը։

Կանգառ/շարունակություն առաջնորդության կորստից հետո («ևս մեկ րոպե dodele»)։

Ջիթերի բացակայությունը Elect-Timers-ում կանխատեսվում է ընտրությունների փոթորիկ։

Մեկ երկար ջոբա առանց chekpoints, յուրաքանչյուր ֆայլ հանգեցնում է զրոյից։

Առաջնորդության և ուղղորդման սերտ կապը առանց fallback-ի ստանում է 5xx։

12) Ներդրման չեկի ցուցակ

  • Ընտրվել է քրոմը 'etcd/ZK/Consul/K8s Least։
  • Մենք կառուցում ենք և փոխանցում epoch/fencing բոլոր կողմնակի ազդեցություններին։
  • Timings: «Least Duration», «renewDead.ru», «retryPeriod», ցանցում/GC պահուստով։
  • Ներկառուցված watchers և աշխատանքի ճիշտ կանգառը առաջնորդության կորստի ժամանակ։
  • Idempotent-ի և chekpointation-ի առաջնորդական խնդիրները։
  • Metriki/alerta և տրամաբանությունը «epoch/holium Id» ներառված են։
  • game days: part.ru, GC-stop, kill, clock skew։
  • Քաղաքական գործիչները փաստագրված են. Ո՞ վ/ինչ է անում առաջնորդը, ով կարող է փոխարինել այն, թե ինչպես կտրել epoch հակամարտությունները։
  • Քայքայման պլանը 'ինչ է անում համակարգը առանց առաջնորդի։
  • Արտադրողականության փորձարկումը 'flaps բեռի տակ SLO-ն չէ։

13) FAQ

Q 'Կարո՞ ղ է առաջնորդությունը կառուցել առանց կվորումի։

Ա 'Վաճառքում' ոչ։ Անհրաժեշտ է CP բաղադրիչ (kvorum) կամ ամպային ծառայություն, որը համարժեք է։

Q: Ինչու՞ է epoch-ը, եթե կա ձախ։

A: Least-ը կենդանի է ապահովում, բայց չի պաշտպանում «հին առաջնորդից» բաժանվելուց/դադարից հետո։ Epoch/fencing-ը դարձնում է հին առաջնորդի ազդեցությունը իրավաբանական։

Q 'Ի՞ նչ թաիմինգի դեֆոլտներ K8s-ում։

A 'Հաճախ օգտագործում են «Least Duration 2415s», «ReneWDeadance 2410s», «RetryPeriod 242s»։ Վերցրեք ձեր p99 բեռի և GC-ի տակ։

Q 'Ինչպե՞ ս փորձարկել առաջնորդությունը տեղական։

A 'SIGKILL, emulation ցանցը (tc/netem), դադարները (SIGSTOP), սպանեք առաջնորդին (SIGKILL), ստուգեք մետրիկները/լոգները/դարաշրջանները։

Q 'Ի՞ նչ անել երկար խնդիրների հետ առաջնորդի փոփոխության ժամանակ։

A: Chekpoint + idempotent բժիշկ; առաջնորդությունը կորցնելիս 'չարտոնված կանգառ և ռեսուրսների ազատումը։

14) Արդյունքները

Առաջնորդի հուսալի ընտրությունը դարաշրջանի կվորումի մրցավարն է։ Առաջնորդություն պահեք որպես heartbeat, bate բոլոր fencing-tocent էֆեկտները, տեղադրեք պահուստային թայմինգները, առաջնորդի առաջադրանքները դարձրեք համընդհանուր և դիտորդական, պարբերաբար կորցրեք ձախողումները։ Այդ ժամանակ «մեկ և միայն մեկ» կատարողը չի լինի կարգախոսը, այլ սարդերի, ցանցային քմահաճույքների և մարդկային սխալների դեմ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։