Search Fan-Out ve Partial Results Architecture
Travel search'te paralel provider çağrılarını latency budget, bounded concurrency, early return ve final merge ile yönetin.
Fan-out architecture'ın ana problemi paralellik değil, yavaş veya bozuk provider'ların toplam search SLA'yı ele geçirmesini engellemektir.
Production senaryosu
Sekiz provider çağrılıyor. Beşi 500 ms altında, ikisi 1.5 saniyede, biri düzenli olarak timeout oluyor. Kullanıcı ilk sonuçları 1 saniye içinde görmek istiyor.
Akış
Request
-> eligible providers
-> bounded parallel calls
-> stream/collect successes
-> first useful threshold
-> partial response
-> late arrivals
-> final mergeBounded concurrency
Provider sayısı 30 olduğunda 30 çağrıyı aynı anda başlatmak connection pool ve upstream limitleri bozabilir. Concurrency provider, region ve request priority bazında sınırlandırılmalıdır.
Early return kriteri
“İlk provider döndü” yeterli değildir. Useful threshold tanımlayın:
- minimum X mapped hotels,
- minimum Y providers,
- ranking için gerekli offer diversity,
- max initial latency.
Partial/final state
Response modelinde state açık olmalı:
{
"status": "partial",
"completedProviders": 4,
"pendingProviders": 2
}UI final state gelmeden pricing sort'un değişebileceğini bilmelidir.
Trade-off
Erken response latency'yi iyileştirir ama sonuç seti sonradan değişebilir. Tüm provider'ları beklemek determinism sağlar ama tail latency'yi büyütür.
Failure modes
- late result ranking jump,
- duplicate merge,
- request cancellation propagation hatası,
- provider timeout sonrası orphan work,
- retry storm,
- partial analytics'in final ile karışması.
Cache
Cache'i yalnız final response için düşünmeyin. Provider-level result cache ve stale-while-revalidate bazı supplier'larda tail latency'yi azaltabilir.
Observability
- time-to-first-useful-result,
- time-to-final-result,
- completed provider count,
- partial-to-final delta,
- cancellation count,
- orphan task count,
- provider tail latency.
Alternatif
Search sonucu küçük ve provider latency stabilse streaming/partial complexity gereksiz olabilir. Tail latency yüksekse önemli fayda sağlar.
Production checklist
- overall latency budget
- provider timeout
- bounded concurrency
- cancellation propagation
- partial state contract
- dedup on late merge
- deterministic ranking tie-break
- separate partial/final analytics
Mimarinizi birlikte review edelim.
Travel distribution ve metasearch mimarinizi ölçeklenebilirlik, hata senaryoları ve operasyon açısından değerlendirebiliriz.