Murat Can Ümit

Çözüm mimarı ve kurucu. Üretimdeki yapay zekâ sistemlerini tek başıma kuruyorum ve neyi iddia etmeyi reddetmeleri gerektiğini biliyorum.

Bankacılık, seyahat dağıtımı, telekom ve danışmanlıkta on iki yıl. Son iki yıldır iki yapay zekâ ürününü uçtan uca tek başıma tasarlıyor, kuruyor ve işletiyorum: mimari, çıkarım, hak yönetimi, sürüm ve nöbet. Şu anda İstanbul'dayım.

01 — Sistem

Tactiq

Tactiq, 175 pazarda yirmi binden fazla kullanıcısı olan canlı bir futbol maç analizi platformu. Aşağıdaki bir özellik listesi değil. Mimarinin, kararların zor olduğu ve yanlış verildiğinde gürültülü değil sessiz biçimde başarısız olacağı üç parçası.

2a — Platform
İstemciler iOS · Android · web · masaüstü API Gateway gecikme tabanlı yönlendirme sağlık kontrolü failover us-east-1 80 fonksiyon birincil · batch, kalibrasyon, turnuva eu-central-1 44 fonksiyon kullanıcı yolu ap-northeast-1 52 fonksiyon kullanıcı yolu Tek bölgeli otorite haklar · yenileme token'ları tek yazıcı atomik koşullu yazma her dakika mutabakat active-active · 176 fonksiyon · 41 DynamoDB tablosu 16 Route 53 sağlık kontrolü 36 tablo küresel replike oluyor, beşi bilinçli olarak replikasyon dışında
İstemciler iOS · Android · web · masaüstü API Gateway gecikme tabanlı yönlendirme sağlık kontrolü failover us-east-1 80 fonksiyon birincil · batch, kalibrasyon, turnuva eu-central-1 44 fonksiyon kullanıcı yolu ap-northeast-1 52 fonksiyon kullanıcı yolu Tek bölgeli otorite haklar · yenileme token'ları tek yazıcı · atomik koşullu yazma her dakika mutabakat active-active · 176 fonksiyon 41 DynamoDB tablosu · 16 Route 53 kontrolü 36 tablo küresel replike oluyor, beşi bilinçli olarak replikasyon dışında

Üç bölge, bir istisna

Üç AWS bölgesinde API Gateway'in arkasında yüz yetmiş altı Lambda fonksiyonu duruyor; gecikme tabanlı yönlendirme ve on altı Route 53 sağlık kontrolüyle active-active dağıtılmış. Dağılım simetrik değil, bilinçli: us-east-1 seksen fonksiyon taşıyor ve batch, kalibrasyon ve turnuva iş yüklerini çalıştırıyor; eu-central-1 ve ap-northeast-1 kırk dört ve elli iki fonksiyonla kullanıcı yolunu servis ediyor. Tokyo'daki bir kullanıcı ile Frankfurt'taki bir kullanıcı farklı bölgelerden hizmet alıyor ve aynı ürünü görüyor.

Durumu kırk bir DynamoDB tablosu tutuyor. Otuz altısı üç bölgeye birden replike oluyor. Beşi olmuyor ve asıl tasarım kararı bu istisnada: ücretli hak ve yenileme token'ları tek bölgeli bir otoritede, tek yazıcı ve atomik koşullu yazma ile duruyor, her dakika mutabakat yapılıyor, ve her bölge kararı replikasyondan değil oradan okuyor. Beş dakikada bir çalışan bir replikasyon canary'si bölgeler arası gecikmeyi izliyor ve alarm veriyor, çünkü göremediğin bir replikasyon gecikmesi olmayan bir replikasyonla aynı şeydir.

Çok bölgeli last-writer-wins, bir paket değişikliğini sessizce düşürene kadar sorunsuzdur; ücretli erişimini kaybeden bir müşteriyi ise alarmdan değil, öfkeli bir mesajdan öğrenirsiniz.

2b — Guardrail'ler
İstek Uygulama doğrulaması HMAC istek imzası İmzalı kısa ömürlü token fail-closed fail-closed fail-closed Üretim Dayanak kontrolü Şema doğrulaması Dil guard'ı sunucu otoriteli şekil zorunlu yalnızca istenen dil Cache kararı Yanıt Reddedildi atılır, onarılmaz akış kontrol ve otorite reddedilen HMAC, JWT ve batch secret'ları bölge başına dil uyuşmazlığı isimli bir alarm tetikliyor
İstek Uygulama doğrulamasıfail-closed HMAC istek imzasıfail-closed İmzalı tokenfail-closed Üretim Dayanak kontrolüsunucu otoriteli Şema doğrulamasışekil zorunlu Dil guard'ıistenen dil Cache kararı Yanıt Reddedildi atılır, onarılmaz akış kontrol ve otorite reddedilen HMAC, JWT ve batch secret'ları bölge başına dil uyuşmazlığı isimli bir alarm tetikliyor

Talimat değil, yapısal zorlama

İstek modele ulaşmadan önce üç fail-closed kontrol çalışır: uygulama doğrulaması, HMAC istek imzası ve imzalı kısa ömürlü token. Biri doğrulanamazsa istek orada durur.

Üretimden sonra çıktı; sunucu otoriteli dayanak katmanından, şema doğrulamasından ve dil guard'ından geçer, cache kararı ancak bundan sonra verilir. Model, sunucunun vermediği bir sayıyı üretemez, şemanın kabul etmediği bir şekli döndüremez ve isteğin sormadığı bir dilde yanıt veremez. Başarısız çıktı yamanmaz, atılır.

Prompt seviyesindeki guardrail'ler sessizce başarısız olur ve bunu sosyal medyadaki bir ekran görüntüsünden öğrenirsiniz.

2c — Kalibrasyon
Verilen tahminler Gerçek sonuçlar maç biter, sayı sabittir Derecelendirme Güven bandına göreisabet oranı Canlı baseline'a karşıkalibrasyon hatası mutlak hedef değil Drift alarmı eşik aşımı Otomatik geri alma haftalık döngü haftalık refit Pazar 22:00 UTC · altı saatte bir artımlı izleme · Pazartesileri karşı-olgusal tekrar ince örneklem bekletilir, yeniden fit edilmez geri alma hedefi: bandı temiz olan son model
Verilen tahminler Gerçek sonuçlarmaç biter Derecelendirme Güven bandına göre isabet Canlı baseline'a karşı hata Drift alarmıeşik aşımı Otomatik geri alma ↺ haftalık döngü haftalık refit Pazar 22:00 UTC altı saatte bir artımlı izleme ince örneklem bekletilir, yeniden fit edilmez geri alma: bandı temiz olan son model

Canlı baseline'a karşı ölçüm

Sistem her hafta kendi tahminlerini gerçek sonuçlara karşı puanlıyor, derecelendiriyor ve güven bandı başına isabet oranını hesaplıyor. Belirtilen güven ile gözlenen doğruluk arasındaki fark kalibrasyon hatasıdır. Eşiği aştığında drift alarmı çalar ve sistem otomatik geri alma yapar.

Karşılaştırma mutlak bir hedefe değil canlı bir baseline'a karşı yapılıyor, çünkü mutlak hedef sizin seçtiğiniz bir sayıdır. Futbol, sabit bir takvimde nesnel ground truth üretir ve pazarlık etmez.

İstesem bile kendimi övecek bir değerlendirme kuramazdım.

2d — Sistemin tamamı

Bütünün şekli

Kullanıcı yolu bunun en küçük parçası. Sistemin çoğu, kimse bakmazken çalışan şey: dakikada birden ayda bire kadar değişen programlarla altı sağlayıcıdan veri senkronizasyonu, takım derecelerini ve oyun tarzı profillerini haftalık yeniden hesaplayan tahmin motorları, kendi geçmiş işini derecelendiren kalibrasyon, ve bir kullanıcıyı uyandırmadan önce onun saat dilimini bilmek zorunda olan bir bildirim katmanı.

Dünya Kupası merkezi, kendi analiz, senkronizasyon, canlı ve doğruluk izleme fonksiyonlarıyla izole bir filo olarak kuruldu. Trafiği öngörülemeyen mevsimlik bir olay, yıl boyunca çalışan bir ürünü çökertebilecek konumda olmamalı, ve turnuva bittiğinde filo başka hiçbir şeye dokunmadan kaldırılabilir.

Bunların hepsini bir kişi yazdı, ve sınırların tam olarak orada olmasının sebebi bu.

İSTEMCİLER
iOS · iPadOS
macOS · Android
32 yerel ayar
KENAR
API GATEWAY
3 REST API
10 HTTP API
bölge başına ~50 rota
CLOUDFRONT
küresel dağıtım
ROUTE 53
16 sağlık kontrolü
HESAPLAMA
KULLANICI YOLU
auth · authorizer · me · history
analyze · analyze-v2 · analyze-live
simulate · momentum · stats · search
TAHMİN
compute-v5-elo
style-profile · match-style-forecast
player-impact · counterfactual
KALİBRASYON
auto-calibration
calibration-tracker
weekly-monitor
bedrock-daily-report
VERİ SENKRONU
fixtures · teams · players
leagues · standings · injuries
xg-rolling · shot-profile
search-sync
BİLDİRİMLER
push-worker · match-reminder
daily-reminder · favorite-reminder
SQS kuyruğu + DLQ
TURNUVA
wc-26-analyze · wc-26-live
wc-26-sync · wc-26-accuracy-tracker
wc-26-push-scheduler
izole filo
PLATFORM
warmer · health · replication-canary
log-export · entitlement-sync
export-user-data · user-hard-delete
DURUM
DYNAMODB
41 tablo
36 küresel · 5 tek bölgeli
EN BÜYÜKLERİ
search-index 332k
football-data-v2 55k
player-impact 39k
analyses 20k
S3
11 bucket
SECRETS MANAGER
bölge başına rotasyon
her dakikadan aylığa 80 zamanlanmış iş · üç bölgede 65 CloudWatch alarmı
staging kendi authorizer'ı ile paralel bir filo olarak çalışıyor
20.000+ kullanıcı32 dil175 pazar4 işletim sistemi
3 bölge176 fonksiyon41 tablo80 zamanlanmış iş65 alarm
Tam teknik doküman (PDF) Ürüne bakın: mcvibeapps.com
02 — Envanter

Ayakta tutmanın maliyeti

Mimari diyagramlar bir sistemi olduğundan iyi gösterir. Tasarlanan parçaları gösterir, biriken parçaları gizler. Aşağıdaki birikimin kendisi, hafızadan değil canlı hesaptan alındı.

176
üç bölgeye dağılmış Lambda fonksiyonu
41
DynamoDB tablosu, 36'sı küresel replike
80
zamanlanmış iş, dakikalıktan aylığa
65
isimli eşikleri olan CloudWatch alarmı
13
API Gateway dağıtımı, REST ve HTTP
16
Route 53 sağlık kontrolü
11
S3 bucket'ı
6
mutabakatı yapılan dış veri sağlayıcısı
332.000
arama indeksinde satır
55.000
yuvarlanan istatistikli fikstür kaydı
39.000
oyuncu etki kaydı
9.900
güvenilirlik bantlı kalibrasyon kaydı
7.900
denetim kaydı
4
tam yaşam döngüsü işlenen ödeme rayı
2
alarma bağlı sert bütçe tavanı
1
kişi

Bu rakamların bir kısmı kararların sonucu, bir kısmı bedeli. Seksen zamanlanmış iş bir övünme değil, farklı yenileme ritimlerine sahip altı veri sağlayıcısının gerçekten gerektirdiği şey. Altmış beş alarm, diğer vardiyada kimse yokken uyuyabilmek için gereken şey.

03 — Kararlar

Yine yapacağım beş karar

01

Çalışan özellikleri kaldırdım

Kalibrasyon, bu çıktıların aşırı güvenli olduğunu gösteriyordu. Kimse şikâyet etmiyordu. Üründeki en çok kullanılan özellikler arasındaydılar. Yine de kaldırdım, izleyen ay gelir kaybettim ve retention'ın yükseldiğini gördüm.

Ürün artık daha azını yapıyor ve retention arttı.

02

Bir alarmı görmezden geldim

Sezon dışında, yaklaşık seksen olaylık ince bir örneklemde drift alarmı çaldı. Yüksek güven kovasında bunların onu vardı. On olay üzerinde refit yapmak modele oyunun değil iki haftanın şeklini öğretirdi, bu yüzden dokunmadım. İki hafta sonra dört yüz olayda kalibrasyon sağlıklı çıktı.

Değerlendirmenizin henüz bir şey söylemediğini bilmek, ne söylediğini bilmek kadar önemlidir.

03

Tek bir tabloya kendi mimarisini verdim

Bir tablo dışında tüm durum çok bölgeli. Ücretli hak, tek yazıcılı ve atomik koşullu yazma yapan tek bölgeli bir otoritede tutuluyor; diğer bölgeler onu kopyalamak yerine oradan okuyor. Nadir bir yolda biraz gecikmeye mal oluyor ve bütün bir sessiz hata sınıfını ortadan kaldırıyor.

Tutarlılığı sistemin tekdüze bir özelliği olarak görmeyi bıraktım.

04

Makine öğrenmesi framework'ü kullanmadım

Öğrenme katmanı saf Python. Serverless küçük bir ayak izini ve hızlı soğuk başlangıcı ödüllendirir; düzeltebildiğim şeffaf bir model, tek bir kaynak kaydığında hata ayıklaması zor olan opak bir modelden iyidir. Kalibrasyon oynadığında nedenini bir kayıp eğrisinden çıkarmak yerine kodda okuyabiliyorum.

Daha etkileyici olan yerine daha ucuz, küçük ve incelenebilir olanı seçmek bir taviz değil, bir alışkanlık.

05

Kendi çıkarım harcamama sert bir tavan koydum

Hesapta alarmlara bağlı iki bütçe tavanı var: Bedrock çıkarımı için ayda üç yüz dolar, geri kalan her şey için beş yüz. Tavanı olmayan bir üretken ürün, birim ekonomisini bir fatura e-postasında keşfeder. Tavanı önce koymak, iki kademeli model yönlendirmesini, önbellek kurallarını ve hangi isteklerin daha güçlü bir modeli hak ettiği kararını zorunlu kıldı. Token harcamasında günlük bir rapor da aynı sebeple var.

Bunlar tahmin değil. Üzerinde isim yazan alarmlar.

04 — İkinci ürün

Naryu

Naryu, tek bir doğum kaydını astroloji, numeroloji, Human Design, Vedik astroloji, BaZi ve feng shui alanlarında günlük kişisel rehberliğe dönüştürüyor, şu anda otuz altı farklı okuma tipi. Ürün lansman öncesi aşamada; hesaplama katmanı, içerik hattı ve çıkarım yolu tamamlandı.

Kişiselleştirme katmanı generative değil, deterministik. Bir Python motoru JPL efemerisinden gezegen konumlarını hesaplıyor ve haritayı üretiyor; ev sistemleri, progresyonlar, transitler, dasha dönemleri ve BaZi sütunları da dahil, her biri yayımlanmış referans haritalara karşı doğrulanmış. Generative katman hiçbir şey hesaplamıyor; zaten belirlenmiş bir sonucu yorumluyor ve motorun üretmediği bir değeri getirmesine izin verilmiyor.

Yanlış bir dereceye dayanan yorum, ne kadar iyi okunursa okunsun yanlıştır.

21 dil36 okuma tipi2 AWS bölgesi~2.000 otomatik test
05 — Öncesi

Bundan önceki on iki yıl

Kurumsal yıllar. Doğan Dağıtım'da başladı; ulusal basın dağıtımı için arka uç sistemler kuruyordum, orada yanlış bir varsayım hata kaydı değil, yanlış yerde bir araç üretiyordu. Sonra Garanti, Türkiye'nin en büyük özel bankalarından biri, otuz sekiz milyon müşteri kaydını tutan sistemler, resmî değişiklik kontrolü altında, merkezinde mainframe ile. Sonra Amadeus, seyahat dağıtımında, ölçekte doğruluğun ürünün kendisi olduğu yer.

Sonra telekom. Orion Innovation'da telekom platformları ve müşteri onboarding çözümleri üzerinde. Ardından Vodafone; yirmiden fazla mühendislik ve iş ekibini kapsayan girişimlerde çözüm tasarımına liderlik ettim, hiçbiri bana bağlı değildi, ve tüm çalışan tabanını kapsayan kimlik ve erişim yönetimi modeli dahil olmak üzere kurum içi bir yapay zekâ ürününün teknik mimarı oldum.

Liderlik ve danışmanlık. BlockchainIST'te üç buçuk yıl, yedi mühendisle; bankacılık, sigorta ve kamu sektöründen kurumsal müşterilerle. Tekrar eden durum şuydu: teknolojisini çoktan seçmiş, ama problemini henüz adlandırmamış bir kurum gelirdi. İşin çoğu, talebin altındaki problemi bulmak ve bunu söylemekti.

Girişim. Tosia Tech, kurucu ortak. Fon çekildi. Ekip ve teknoloji taşındı, iş kârlılığa ulaştı ve sonrasında yatırım aldı. Teknik kısım daha kolay olan yarısıydı.

06 — İletişim

Mimari, üst düzey mühendislik rolleri ve gerçek kullanıcılarla temasa dayanması gereken yapay zekâ sistemleri kuran ekipler üzerine konuşmalara açığım.

Şu anda İstanbul'dayım. İhbar süresi yok.

LinkedIn