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.
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 egyszerre több. Ez rendben is van.
A false positive probléma viszont rosszabb lesz. Egy checkerrel volt egy bizonyos hamis riasztási arányod. Három checkerrel matematikailag valószínűbb, hogy legalább az egyik tévesen DOWN-ot jelez. Így több hamis riasztást kapsz, 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, akkor valódi outage-ról van szó. Ha nem, akkor csak 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 ára van: DOWN jelzésnél néhány másodpercnyi extra latenciát ad hozzá, amíg lekérdezi a többi régiót. A legtöbb use case-nél (uptime monitorozás perces intervallummal) ez elhanyagolható. Extrém szigorú SLA-knál, ahol a detection time 30 másodperc alatti, már érzékelhető 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, hanem 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.
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