99,99% rendelkezésre állás egy rádióplatformhoz

Médiaszolgáltatás · Magas rendelkezésre állás · Monitoring · Incidenskezelés

A kihívás

Egy médiatechnológiai vállalat rádiós streaming platformot épített, amit több országban, milliós hallgatóság mellett kellett stabilan működtetni. A rendszer élő adásokat, on-demand tartalmakat és valós idejű hirdetésbeszúrást kezelt, miközben a leállás gyakorlatilag nem fért bele.

A tét nagyon is kézzelfogható volt:

  • Az élő adás nem akadhat meg. Ha egy műsor közben megszakad a stream, a hallgató gyorsan továbbáll, és nem biztos, hogy visszajön
  • A szabályozói elvárások dokumentált rendelkezésre állási garanciákat kértek számon
  • A csúcsforgalom kiszámíthatatlan volt. Egy friss hír pár perc alatt a 10-szeresére tudta húzni a terhelést
  • A meglévő infrastruktúra egyetlen régióban futott, redundancia nélkül, a monitoring pedig nagyjából annyit jelentett, hogy „valaki majd ránéz”. Néha ránéztek, néha kevésbé

Olyan architektúrára volt szükség, ami akkor is megy tovább, amikor több dolog egyszerre romlik el.

A megközelítés

A rendszert geo-redundánsra terveztem és az alapoktól így is építettem fel. A monitoring és az incidenskezelés nem utólagos toldás lett, hanem az első naptól a design része.

Geo-redundáns architektúra

Két AWS régióba telepítettem active-active konfigurációban:

  • Route 53 health checkek latenciaalapú routinggal. A hallgatók automatikusan a legközelebbi, egészséges végpontra kerültek
  • Azonos infrastruktúra stackek mindkét régióban, teljesen Terraformban definiálva. Nincsenek „helyi varázslatok”
  • Régiók közötti adatreplikáció a tartalommetaadatokhoz és a felhasználói állapotokhoz
  • CDN réteg CloudFronttal a statikus elemekhez és az előre felvett tartalmakhoz, ami 70%-kal csökkentette az origin terhelését

A legfontosabb tervezési elv: bármelyik régió önállóan is el tudja vinni a teljes forgalmat. Ezt rendszeresen teszteltem úgy, hogy az egyik régiót teljesen leürítettem. A bizalom jó, a próba még jobb.

Monitoring és megfigyelhetőség

Teljes körű megfigyelhetőségi stacket építettem:

  • Prometheus metrikagyűjtésre, Thanos hosszú távú tárolással
  • Grafana dashboardok, amelyek valódi operatív kérdésekre adtak választ, nem csak szépek voltak. Például: „Egészséges a platform?” „Hol szűkül be?” „Most kell valakit felébreszteni?”
  • Egyedi metrikák a stream állapotához: hallgatószám, buffering arány, stream késleltetés, hirdetésbeszúrási sikerráta
  • Előre definiált SLO-k: 99,99% rendelkezésre állás, <200ms streamindítási idő, <1% hirdetésbeszúrási hibaarány
  • Többcsatornás riasztás. PagerDuty a kritikus eseményekre, Slack figyelmeztetésre, email tájékoztatásra. Sok idő ment el a küszöbök finomhangolására, mert a riasztásfáradtság csendben teszi tönkre a megbízhatóságot

Incidenskezelés

A monitoring önmagában csak fél megoldás, ezért komplett incidenskezelési keretrendszer is készült:

  • Runbookok minden riasztáshoz. Nem az, hogy „nézd meg, mi van”, hanem konkrét lépések, amiket ügyeletben, hajnali 3-kor is végig lehet vinni
  • Automatizált javítások a tipikus problémákra: pod-újraindítás, forgalomátterelés, cache ürítés
  • Incidens súlyossági szintek egyértelmű eszkalációs útvonallal
  • Incidens utáni értékelés hibáztatás helyett rendszerfejlesztési fókuszban
  • Káosztesztek. Havi game day gyakorlatok, amikor szándékosan elrontottunk dolgokat productionben. Meglepően nyugodt érzés, amikor tudod, hogy vissza is tudod hozni

Az eredmények

Három hónap építés és keményítés után:

99,99% uptime

Elérve és fenntartva 12 hónapon át. Összes leállás: kevesebb mint 53 perc egy teljes évben.

< 30mp failover

A régiók közötti átváltás 30 másodpercen belül lezajlott. A hallgatók többsége nem érzékelt megszakítást.

MTTR: 4 perc

Az átlagos helyreállítási idő órákról percekre csökkent a runbookok és az automatizált javítások miatt.

A platform több nagy hírhelyzetet is gond nélkül kezelt 10-szeres forgalmi csúcs mellett, érdemi degradáció nélkül. A monitoring rendszer többször még azelőtt jelezte a problémát, hogy abból felhasználói kiesés lett volna. Egy esetben például az adatbázis connection pool kimerülését 15 perccel a felhasználói hatás előtt sikerült észlelni és kezelni.

Az ügyfél platformba vetett bizalma látványosan megerősödött. A korábbi óvatos bővítés helyett magabiztosabb terjeszkedésre váltottak, mert az infrastruktúra ezt már valóban elbírta.

Beszéljünk? Segítek kitalálni, mire van szükséged.

Ingyenes Konzultáció