Konszenzusos szavazás az uptime monitorozásban - miért van értelme
· 10 perc olvasás
A klasszikus multi-region monitorozás csökkenti a false negative-okat, de növeli a false positive-okat. A konszenzusos szavazás mindkettőt megoldja. A minta oktatási célú elemzése.
Az egyrégiós monitorozás gyenge pontja
Az egyrégiós monitorozás azt jelenti, hogy a checkered egyetlen helyen fut. Ha hálózati probléma adódik az adott hely és a szerver közötti útvonalon (BGP flap, routing változás, ISP karbantartás), a monitor DOWN állapotot jelez, pedig a szerverrel minden rendben.
Ez egy false positive. Megkapja a riasztást, hajnali 3-kor felébred, kinyitja a laptopot, és azt látja, hogy az oldal működik.
A false positive-ok két okból fájnak:
- Alert fatigue. Ha olyan értesítéseket kap, amelyek hamisak, fokozatosan elkezdi figyelmen kívül hagyni őket. Még a valódiakat is.
- A monitorozás iránti bizalom elvesztése. A csapat abbahagyja a riasztásokra való reagálást, mert "valószínűleg megint csak a BGP".
A naiv multi-region egy problémát megold, a másikat súlyosbítja
Az általános megközelítés erre a multi-region monitorozás. A checker több helyről fut, és riasztás akkor lép életbe, amikor bármelyik DOWN állapotot jelez.
Ez javítja a valódi outage-ok észlelését - amikor a szerver tényleg elérhetetlen, nemcsak egy checker megy le, hanem több. Rendben.
De a false positive probléma rosszabb lesz. Egy checkerrel volt egy bizonyos hamis riasztási arány. Három checkerrel matematikailag valószínűbb, hogy legalább az egyik tévesen DOWN-ot fog jelezni. Több hamis riasztást kap, nem kevesebbet.
A konszenzusos szavazás mindkét oldalt megoldja
A konszenzusos szavazás másképp működik: az első DOWN jelnél nem indít riasztást. Először megkérdezi a többi régiót. Ha azok többsége is DOWN-ot jelez, valódi outage. Ha nem, hálózati anomália az egyik régióban.
Pseudokód:
result = check_http(monitor) # primary region
if result.status == 'down':
secondary_results = check_from_other_regions(monitor)
if secondary_results:
# Default rule: 2 of 3 regions must agree on DOWN
if count_down(secondary_results) + 1 >= 2:
result.status = 'down'
else:
result.status = 'up'
result.note = 'consensus mismatch'
Példa forgatókönyv:
primary -> DOWN (egy checkernek BGP flap volt)
region_a -> UP (a többi régió normálisan látja a szervert)
region_b -> UP
Eredmény: UP. Nincs riasztás. Bejegyzés a debug logba.
És ellenkezőleg, valódi outage:
primary -> DOWN
region_a -> DOWN
region_b -> DOWN
Eredmény: DOWN. Riasztás megy Telegramon/emailen/webhookon keresztül.
Tradeoff: latencia
A konszenzusos szavazásnak van ára - DOWN jelzésnél hozzáad néhány másodperc latenciát a többi régió lekérdezésére. A legtöbb use case-nél (uptime monitorozás perces intervallummal) elhanyagolható. Extrém szigorú SLA-knál, ahol a detection time 30 másodperc alatti, kompromisszum lehet.
Mikor nincs értelme a multi-region
- Belső API-k 192.168.x.x címeken. A hálózatán kívül senki sem éri el őket, így az internetről érkező multi-region értelmetlen. LAN-ra használjon pull-agent mintát - az ügynök az Ön hálózatában fut, és HTTPS-en keresztül küldi az eredményeket.
- Egy ügyfél belső alkalmazása. Ha csak néhány ember használja és Ön is köztük van, az outage-ról előbb fog tudni, mint a monitorozás.
- Olyan szolgáltatás, amely a világ egyetlen régiójában fut. Ha a szolgáltatás csak EU-ban érhető el, és az USA-ból DOWN-ot lát, az nem false positive - az várt viselkedés.
Hogyan csináljuk ePulz.io-ban
Az ePulz.io architektúrájában szerepel a konszenzusos szavazás. A gather_multiregion() és combine_consensus() a monitoring.py-ban implementálja a fenti mintát. A küszöbérték (hány régiónak kell megerősítenie a DOWN-ot) a min_down paraméterrel konfigurálható.
A Check táblában minden sor tárolja a consensus mezőt CSV-vel (pl. "primary:up,region_a:up,region_b:down"), így debug céljára pontos rekordja van arról, hogyan született a döntés.
Self-hosting workerhez egy másik régióban az admin panelben van WireGuard bundle generátor - létrehoz egy tar.gz-t a konfigurációval egy új worker node-hoz, és hozzáadja a worker_urls-hoz.
Konklúzió
A konszenzusos szavazás nem varázsmegoldás. Nem fog nulla false positive-ot adni, és nem fogja megmenteni valódi outage során. De jobb kompromisszum, mint az egyrégiós (magas false positive arány hálózati anomáliák során) vagy a naiv multi-region (a false positive-ok szorzódása).
Nézze meg az ePulz.io szolgáltatást. 7 napos próbaidőszak, 3 monitor, bankkártya nélkül.
Kapcsolódó
Próbálja ki az ePulz.io-t ingyen - 7 nap bankkártya nélkül.
Fiók létrehozása