Signal, een realtime telemetrieplatform
Een getypeerde frontend-SDK en eventpipeline die de wereldwijde KYC-funnels van Binance realtime inzicht gaven, waardoor het diagnosticeren van storingen van dagen naar minuten ging.
- Rol
- Senior Frontend Engineer
- Periode
- 2025–heden
- Stack
- TypeScript · Mini Program · BFF · Kafka · Flink · ClickHouse · Grafana
Het probleem
Miljoenen mensen in meer dan 100 landen doorliepen identiteitsverificatie, en sommigen haakten ongemerkt af. Als een koppeling met een leverancier brak, zag niemand het: we lazen versnipperde serverlogs met de hand en een diagnose duurde één tot drie dagen. Elke dag daarvan betekende echte gebruikers die hun onboarding niet konden afronden.
De aanpak
- Een kleine, getypeerde SDK. Eén TypeScript-tracker verzamelde op elk scherm dezelfde gegevens over gebruikersacties, op web, mobiel en Mini Program, zodat events overal hetzelfde betekenden.
- Throttling met een veiligheidsklep. De SDK zet events in een wachtrij en verstuurt ze elke 3 seconden of bij 10 events, wat het eerst komt. Eén request per klik put de netwerkthreads van de browser uit; events te lang vasthouden riskeert verlies als het tabblad sluit. Bij het verlaten van de pagina gebruikt de SDK
navigator.sendBeacon. - Een BFF die valideert. Batches komen binnen bij een Backend for Frontend die het schema controleert tegen de TypeScript-definities, tijdstempels op plausibiliteit toetst, onverwachte velden en persoonsgegevens (PII) verwijdert, en sessiemetadata plus het oordeel van de backend toevoegt (geslaagd, afgewezen, wacht op beoordeling). Door dat oordeel te vergelijken met wat de UI toonde, kwamen verschillen tussen de status in de UI en de backend aan het licht.
- Kafka, Flink, ClickHouse, Grafana. Kafka vangt wereldwijde verkeerspieken op, Flink verwerkt events realtime, ClickHouse slaat ze op (kolomopslag beantwoordt aggregaties over miljarden events met hoge kardinaliteit in milliseconden, waar rijopslag kruipt) en Grafana toont de funnels.
- Stille foutafhandeling. Ligt de pipeline eruit, dan bewaart de SDK tot 100 events in
localStorageen pauzeert een passieve circuit breaker het versturen. De SDK pingt de server niet om de status te controleren, maar wacht op de volgende geslaagde respons.
Het resultaat
De tijd tot het detecteren van een storing daalde van 24–72 uur naar minder dan 5 minuten. Voor een funnel waarin één kapotte leveranciersstap duizenden mislukte onboardings betekent, is dat het verschil tussen een notitie in de postmortem en een fix dezelfde ochtend.