Zum Inhalt springen
Clinford Jordano Valencia
Alle Projekte
PlattformWebMobil

Signal, eine Echtzeit-Telemetrieplattform

Ein typisiertes Frontend-SDK und eine Event-Pipeline, die Binances globalen KYC-Funnels Echtzeit-Einblick gaben und die Diagnose von Störungen von Tagen auf Minuten verkürzten.

Rolle
Senior Frontend Engineer
Zeitraum
2025–heute
Stack
TypeScript · Mini Program · BFF · Kafka · Flink · ClickHouse · Grafana

Das Problem

Millionen Menschen in über 100 Ländern durchliefen die Identitätsprüfung, und manche brachen unbemerkt ab. Fiel eine Anbieter-Integration aus, sah es niemand: Wir lasen verstreute Server-Logs von Hand, und eine Diagnose dauerte ein bis drei Tage. Jeder dieser Tage bedeutete echte Menschen, die das Onboarding nicht abschließen konnten.

Der Ansatz

  • Ein kleines, typisiertes SDK. Ein TypeScript-Tracker erfasste auf jedem Bildschirm dieselben Nutzeraktionen, im Web, mobil und im Mini Program, sodass Events überall dasselbe bedeuteten.
  • Drosselung mit Sicherheitsventil. Das SDK sammelt Events in einer Warteschlange und sendet sie alle 3 Sekunden oder bei 10 Events, je nachdem, was zuerst eintritt. Eine Anfrage pro Klick blockiert die Netzwerk-Threads des Browsers; Events zu lange zurückzuhalten riskiert, sie beim Schließen des Tabs zu verlieren. Beim Verlassen der Seite nutzt es navigator.sendBeacon.
  • Ein BFF, der validiert. Die Batches landen in einem Backend for Frontend, das das Schema gegen die TypeScript-Definitionen prüft, Zeitstempel auf Plausibilität testet, unerwartete Felder und personenbezogene Daten (PII) entfernt und Sitzungsmetadaten sowie das Urteil des Backends anhängt (bestanden, abgelehnt, Prüfung ausstehend). Der Vergleich dieses Urteils mit der Anzeige in der UI deckte Abweichungen zwischen UI- und Backend-Zustand auf.
  • Kafka, Flink, ClickHouse, Grafana. Kafka fängt globale Lastspitzen ab, Flink verarbeitet Events in Echtzeit, ClickHouse speichert sie (spaltenorientierter Speicher beantwortet Aggregationen über Milliarden Events mit hoher Kardinalität in Millisekunden, wo zeilenorientierte Datenbanken kriechen) und Grafana zeigt die Funnels.
  • Leise Fehlerbehandlung. Ist die Pipeline ausgefallen, hält das SDK bis zu 100 Events in localStorage, und ein passiver Circuit Breaker pausiert das Senden. Es fragt den Server nicht aktiv nach seinem Zustand, sondern wartet auf die nächste erfolgreiche Antwort.

Das Ergebnis

Die Zeit bis zur Erkennung einer Störung sank von 24–72 Stunden auf unter 5 Minuten. Für einen Funnel, in dem ein defekter Anbieterschritt Tausende gescheiterte Onboardings bedeutet, ist das der Unterschied zwischen einer Notiz im Postmortem und einer Korrektur am selben Morgen.