Mimari kata · K—05

Anlık Ödemelerde Gerçek Zamanlı Dolandırıcılık Kararı

Mimari kata · kurgusal bir problem tanımı üzerine tasarım çalışması

Sektör
Bankacılık
Konu
Karar
Teknolojiler
Apache Kafka, Apache Flink, Valkey, Drools, ONNX Runtime, Quarkus, Apache Iceberg, MLflow, Keycloak, OpenBao
Akış: mainframe MQ mesajları Kafka'ya girer, Flink özellikleri Valkey'e yazar, tek karar servisi skorlayıp yanıtlar.
Tasarım tek bakışta: 30 dakikalık, tek sayfalık canlı çizim. Diyagram etiketleri İngilizcedir.

Kısaca

Her anlık ödemeyi 150 ms'de dolandırıcılık için skorlamak, kararı yedi yıl yeniden üretilebilir tutmak, mainframe'e yalnızca MQ ile dokunmak.

Problem

Orta ölçekli bir Avrupa perakende bankası anlık ödeme şemasına katılıyor. Dolandırıcılık kuralları bugün gece toplu işinde çalışıyor. Yeni düzende, 10 saniyelik ödeme penceresinin 150 ms’si dolandırıcılık kararına ayrılıyor. Yük ortalama saniyede 300, tepede 3.000 ödeme. Mainframe’e yalnızca IBM MQ ile erişilebiliyor ve değiştirilemiyor. Her karar açıklanabilir olmalı ve yedi yıl boyunca yeniden üretilebilmeli. İki aktif veri merkezi şart; kart ve açık bankacılık da sonradan eklenebilmeli.

Yaklaşım

İki istek birbirine ters düşüyor: dar bir gecikme bütçesi ve yıllar sonra tekrar oynatılabilen kararlar. Tasarım özellikleri önceden hesaplıyor, kararı tek süreçte veriyor ve her girdiyi saklıyor. Flink 90 günlük davranış özelliklerini hesaplayıp Valkey’e yazıyor. Karar servisi tek bir özellik vektörünü okuyor, ardından Drools kurallarını ve ONNX modelini aynı JVM’de çalıştırıyor. Her karar; özellik vektörü, kural seti sürümü, model özeti ve imaj özetiyle bir anlık görüntü (snapshot) olarak kaydediliyor.

Mimari

  • Mainframe köprüsü: IBM MQ için Kafka Connect kaynak ve hedef konnektörleri. Platform mainframe’i hiç çağırmıyor.
  • Omurga: iki veri merkezine yayılmış tek Kafka kümesi, üçüncü sitede KRaft tanığı. Şemalar, Apicurio Registry’de Avro sözleşmesi olarak duruyor.
  • Özellikler ve karar: Flink, Valkey ve Drools ile ONNX Runtime çalıştıran bir Quarkus karar servisi.
  • Kanıt ve öğrenme: snapshot’lar Object Lock’lu nesne depolama üzerinde Apache Iceberg’e gidiyor. MLflow modelleri izliyor. Analist sonuçları eğitim etiketi olarak geri dönüyor.

Veri akışı: MQ’da ödeme isteği, Kafka, karar; ardından karar ve snapshot tek Kafka işleminde yazılıyor ve yanıt MQ’dan dönüyor.

Mimari: ödeme istekleri mainframe'den Kafka'ya girer, Flink özellikleri hesaplar, tek süreç kararı döndürür.
Çözüm genel bakışı: ödeme kanalları ve mainframe'den Kafka ve Flink özellikleri üzerinden süreç içi karar servisine, depolarına ve vaka yönetimi araçlarına. Diyagram etiketleri İngilizcedir.Tam boyutta aç (yeni sekmede açılır)

Neden bu bileşenler

İhtiyaç Seçim Neden
Mainframe köprüsü Kafka Connect IBM MQ kaynak ve hedef konnektörleri Mainframe yalnızca MQ konuşuyor. Konnektör en az bir kez okuyor; tekrar gelen mesaj, ödeme kimliğiyle sıkıştırılmış karar topic’ine karşı eleniyor. IBM bu konnektörü Apache 2.0 ile yayınlıyor.
Olay omurgası Apache Kafka (Strimzi) Kalıcı, tekrar oynatılabilir, müşteri anahtarında sıralı bir log; karar ve snapshot aynı işlemde yazılıyor. MirrorMaker 2 ile bağlı iki küme değil, iki veri merkezine yayılmış tek küme.
Şema sözleşmesi Apicurio Registry (Avro) Kanonik PaymentRequest ve snapshot şemaları sürümleniyor; uyumsuz değişiklik CI’da kırılıyor. Confluent Schema Registry, Community License nedeniyle elendi.
Akış özellikleri Apache Flink Hız, alıcı geçmişi, cihaz yeniliği gibi 90 günlük pencereler durum olarak tutuluyor. Sorgu anında hesaplamak 150 ms’yi tüketirdi. Önceden hesaplamak, okumayı tek GET’e indiriyor.
Çevrimiçi özellik deposu Valkey Her veri merkezinde yerel replikayla milisaniyenin altında GET. Redis 7.x kaynak-erişimli lisanslara geçtiği için BSD lisanslı Redis çatalı. Yalnızca hızlı yol; idempotentliğin kaynağı değil.
Karar servisi Quarkus, Drools ve ONNX Runtime Kural motoru ve model aynı süreçte; ağ sıçraması yok. Drools kuralları sıcak yükleniyor ve sürümleniyor. ONNX Runtime, herhangi bir çerçeveden gelen modeli CPU’da milisaniyede çalıştırıyor.
Snapshot arşivi ve çevrimdışı depo Apache Iceberg, Object Lock’lu Ceph RGW üzerinde Yedi yıllık snapshot’lar için ucuz ve değiştirilemez depolama; Spark ve Trino aynı tabloları okuyor. MinIO topluluk sürümü daraldığı için Ceph.
Eğitim ve model kaydı Apache Spark ve MLflow Eğitim, snapshot’ları analist etiketleriyle birleştiriyor; böylece modelin gerçekten gördüğü özellikleri kullanıyor. MLflow sürüm, metrik ve onayı tutuyor, champion işaretçisini yönetiyor.
Vaka yönetimi PostgreSQL ve özel servisler Uyarı kuyruğu, analist sonuçları ve kural metadata’sı. Küçük, ilişkisel ve denetlenebilir.
Geçit ve kimlik Apache APISIX ve Keycloak Analist ve denetçi ekranları, bankanın kimlik sağlayıcısına federe OpenID Connect ile çalışıyor; rol bazlı erişim ve denetim günlüğü var. Kong OSS açık sürümden özellik çıkardığı için APISIX.
Sır ve anahtar yönetimi OpenBao Konnektör kimlik bilgileri, şifreleme anahtarları ve PKI. HashiCorp Vault, Business Source License’a geçtiği için Vault’un MPL lisanslı çatalı.
Gözlemlenebilirlik OpenTelemetry, Prometheus, Grafana, Loki, Tempo Aşama başına izler, 150 ms’nin nereye gittiğini gösteriyor. Grafana yığınının AGPL lisansı OSI onaylı; kurum içi kullanımda yükümlülük doğurmuyor.

Kararlar ve ödünleşimler

  • Model, karar sürecinin içinde. Kata, ayrı bir model servisi için 150 ms’lik bütçeden 20–40 ms tahmin ediyor. JVM içinde ONNX Runtime yaklaşık 2 ms’de skorluyor. Operasyonel esnekliği p99 gecikme için feda ettim. Terfi ve geri alma yine bir işaretçi değişikliği; iki model de bellekte yüklü. Bütçe bu kadar dar olmasaydı ayrı bir model servisi daha esnek seçim olurdu.
  • Özellikler saklanıyor, yeniden hesaplanmıyor. Her snapshot özellik vektörünü, kural seti sürümünü, model özetini ve imaj özetini tutuyor. Bir kararı tekrar oynatmak, aynı imajı aynı vektörle çalıştırmak demek. Yeniden hesaplamak sonradan gelen veriyi kullanır ve sonucu değiştirir. Aynı snapshot’lar eğitim setine dönüşüyor; eğitim ve servis aynı özellikleri görüyor. Bedeli arşiv boyutu: yedi yılda yaklaşık 45 TB tahmin edildi.
  • MirrorMaker 2 ile iki küme yerine yayılmış tek Kafka kümesi. İdempotentlik, ilk yazanın kazandığı tek bir sıkıştırılmış karar topic’ine dayanıyor. Bu kural iki kümede tanımlanamaz. Karar ortasında bir veri merkezi düşerse diğer taraf skorlamadan önce topic’e bakıyor. Bedeli, KRaft tanığı için iki merkeze de 10 ms’den yakın üçüncü bir site.
  • Senkron yolda doğrudan MQ değil, Kafka. Kafka tek log’dan tekrar oynatma, Flink özellik işlerine dağıtım ve denetim izi veriyor. MQ’dan doğrudan okumak bu üçünü ayrı ayrı kurmak demek. Bedeli poll ve kuyruk beklemesi: yaklaşık 8 ms, tahmini 40 ms’lik p99 içinde kalıyor.
  • Sıralı bozulma. Özellik yoksa yalnızca kurallar; bu, fallback oranı olarak raporlanıyor. Kural yoksa temkinli eşikle model. İkisi de yoksa incelemeye gönderme. Mainframe tarafında zaman aşımı da inceleme demek; kör onay asla. Bedeli, bir olay sırasında daha çok bekletilen ödeme. En büyük risk yanlış pozitif olduğu için fallback oranı panoda duruyor.
  • Challenger aynı süreçte. Challenger her ödemeyi gölge modda skorluyor; sonucu yalnızca kaydediliyor. Terfi, dört göz onayıyla champion işaretçisini taşımak. Geri alma onu geri taşımak; hiçbir şey yeniden başlamıyor. Bedeli, her karar pod’unda bellekte iki model.
Akış: 150 ms bütçe duraklara bölünür, her karar yeniden üretilebilir ve modeller güvenle devreye alınır.
Durak durak gecikme bütçesi, her kararın nasıl yeniden üretildiği ve yeni bir modelin güvenle nasıl devreye alındığı. Diyagram etiketleri İngilizcedir.Tam boyutta aç (yeni sekmede açılır)

Yeniden ele alacaklarım

  • Mainframe zaman aşımı varsayılanı. Yanıt geciktiğinde mainframe bekletiyor mu, onaylıyor mu? Bozulma tasarımı bu cevaba bağlı.
  • Üçüncü site. İki merkeze de 10 ms’den yakın bir site yoksa topoloji MirrorMaker 2 ile iki kümeye döner. O zaman “ilk yazan kazanır” kuralı tasarlandığı gibi çalışmaz.
  • Kart token’ları. Kart platformu gerçekten token gönderebiliyor mu, yoksa kart numarası görünecek mi? PCI kapsamı buna bağlı.
  • Özellik sayısı ve pencereler. 40 özellik ve 90 gün varsaydım. Gerçek sayılar Valkey ve Flink boyutunu belirler.

Sonuç notları (tasarım varsayımları, ölçüm değil)

Bu bir tasarım çalışmasıdır, üretim sistemi değildir. Çıktı: dört sayfalık diyagram seti, tek sayfalık beyaz tahta sürümü ve 14 sayfalık Türkçe PDF. PDF’te varsayımlar, bileşen gerekçeleri, lisanslar, kapasite hesapları ve açık sorular var. Gecikme bütçesi (150 ms’ye karşı p99’da yaklaşık 40 ms) ölçüm değil, tasarım tahminidir.

Kaynaklar

  • Mimari PDF (Türkçe, 14 sayfa).
  • draw.io diyagramları (İngilizce etiketler): dört sayfalık set ve 30 dakikalık tek sayfa sürüm.

Bu konudaki gerçek projeler

  1. P—02

    Tamamlandı

    Öne çıkan

    GA4 Modernizasyonu: Gold Katman, Akış ve Anomali Tespiti

    GA4 analitiği BigQuery'de Gold e-ticaret modeli ve sapma kontrolleriyle yenilendi: aylık maliyet $9K'dan $3K'ya, en ağır sorgular 46 dakikadan 8 saniyeye.

    • Analitiğe hazır veri
    • Karar destek
    • Veri kalitesi
    • Veri gözlemlenebilirliği
    • Bulut

    Rol

    Program liderliği · Veri Çözüm Mimarı

  2. P—06

    Tamamlandı

    1.200+ İş Kullanıcısı için Azure Raporlama Platformu

    1.200+ iş kullanıcısının raporlama platformu Azure Data Factory, Synapse, Analysis Services ve Power BI'a taşındı; IDC Türkiye Ödülleri'nde ikincilik.

    • Karar destek
    • Analitiğe hazır veri
    • Veri platformu
    • Bulut

    Rol

    Göç · Kıdemli Veri Mühendisliği ve Veri Mimarisi Grup Yöneticisi

Karar: projeler, katalar ve yayınlar

Katalar hakkında

Benzer bir tasarım problemi için yazın.