Consensus voting v uptime monitoringu - prečo dáva zmysel
· 10 min čítania
Klasický multi-region monitoring znižuje false negatives ale zvyšuje false positives. Consensus voting rieši oboje. Edukačný rozbor patternu.
Slabé miesto single-region monitoringu
Single-region monitoring znamená, že váš checker beží v jednej lokácii. Ak medzi touto lokáciou a vaším serverom dôjde k sieťovému problému (BGP flap, routing change, údržba ISP), monitor nahlási DOWN, hoci server je v poriadku.
Je to false positive. Dostanete alert, zobudíte sa o tretej ráno, otvoríte laptop a zistíte, že stránka funguje.
False positives škodia z dvoch dôvodov:
- Alert fatigue (únava z upozornení). Ak dostávate notifikácie, ktoré sa ukážu ako nepravdivé, postupne ich začnete ignorovať. Aj tie skutočné.
- Strata dôvery v monitoring. Tím prestane reagovať na alerty, lebo "to bude zase len BGP".
Naivný multi-region rieši jeden problém, zhoršuje druhý
Bežný spôsob, ako tento problém riešiť, je multi-region monitoring. Checker beží z viacerých lokácií a alert sa odošle vždy, keď ktorákoľvek z nich nahlási DOWN.
Tým sa zlepší detekcia skutočných výpadkov - keď je server naozaj nedostupný, nezhasne len jeden checker, ale viac. To je v poriadku.
Problém s false positives sa tým však zhorší. Pri jednej kontrolnej stanici ste mali určitú mieru falošných alarmov. Pri troch staniciach je pravdepodobnejšie, že aspoň jedna z nich falošne nahlási DOWN. Výsledkom je viac falošných alertov, nie menej.
Consensus voting rieši obe stránky problému
Consensus voting funguje inak: pri prvom DOWN signáli sa alert neodošle. Najprv sa systém opýta ostatných regiónov. Ak väčšina z nich tiež hlási DOWN, ide o skutočný výpadok. Ak nie, je to len sieťová anomália v jednom regióne.
Pseudokód:
result = check_http(monitor) # primary region
if result.status == 'down':
secondary_results = check_from_other_regions(monitor)
if secondary_results:
# Predvolené pravidlo: 2 z 3 worker nodov musia potvrdiť DOWN
if count_down(secondary_results) + 1 >= 2:
result.status = 'down'
else:
result.status = 'up'
result.note = 'consensus mismatch'
Príklad situácie:
primary → DOWN (BGP flap z Liptova k vášmu hostingu)
eu1 → UP (Bratislava) (ostatné regióny vidia server normálne)
eu2 → UP (Liptov, sekundár)
Výsledok: UP. Žiadny alert. Záznam zostane v debug logu.
A naopak pri skutočnom výpadku:
primary → DOWN
eu1 → DOWN
eu2 → DOWN
Výsledok: DOWN. Alert ide cez Telegram/email/webhook.
Kompromis: latencia
Consensus voting má svoju cenu: pri DOWN signáli pridá zopár sekúnd latencie navyše, kým sa stihnú vykonať dotazy do ďalších regiónov. Pri väčšine prípadov použitia (uptime monitoring s minútovým intervalom) je to zanedbateľné. Pri extrémne prísnych SLA s detection time pod 30 sekúnd už môže ísť o citeľný kompromis.
Kedy je multi-region nezmyselný
- Interné API na 192.168.x.x. Nikto okrem vašej siete sa tam nedostane, takže multi-region z internetu nemá zmysel. Pre LAN použite pull-agent pattern - agent beží vo vašej sieti, výsledky posiela cez HTTPS.
- Single-customer interná aplikácia. Ak ju používa pár ľudí a vy ste jeden z nich, dozvedíte sa o výpadku skôr ako monitoring.
- Služba, ktorá beží len v jednom regióne sveta. Ak je vaša služba dostupná len v EÚ a vidíte ju z USA ako DOWN, nie je to false positive - je to očakávaný stav.
Ako to máme v ePulz.io
ePulz.io má consensus voting nasadený medzi 3 reálnymi worker nodmi: primary v Liptovskom Mikuláši, eu1 v Bratislave a eu2 v Liptovskom Mikuláši (sekundárny stroj). Default threshold je 2 z 3 - výpadok sa zaznamená, keď ho potvrdia aspoň dva worker nody. Geografická diverzita: 2 mestá; hardvérová redundancia: dva nezávislé stroje v Liptove pre prípad HW/SW zlyhania primary nodu.
Pre každú kontrolu sa ukladajú výsledky z jednotlivých regiónov (napr. „primary:up, eu1:down"), takže pri ladení máte presný záznam o tom, ako padlo rozhodnutie.
Záver
Consensus voting nie je magické riešenie. Nedá vám zero false positives a nezachráni vás pri skutočnom výpadku. Ale je to lepší kompromis ako single-region (vysoké false positives pri network anomáliách) alebo naivný multi-region (multiplikácia false positives).
Pozrite si ePulz.io. 7-dňová skúšobná doba, 3 monitory, bez kreditky.
Súvisiace
Vyskúšajte ePulz.io zadarmo - na 7 dní bez potreby kreditnej karty.
Vytvoriť účet