3 puan yazan GN⁺ 2024-10-12 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Netflix, VoD ve oyun gibi farklı alanlara genişledikçe, büyük hacimli zaman verilerini (petabayt ölçeğinde) milisaniye düzeyinde gecikmeyle depolayıp işleme yeteneği kritik hale geldi.
  • Key-Value soyutlaması ve Data Gateway platformu üzerine kurulan TimeSeries soyutlaması, zamansal olay verilerini farklı kullanım senaryoları genelinde verimli biçimde depolayıp sorgulamak için bir çözüm sunuyor.

Zorluklar

  • Netflix’te kullanıcı etkileşimleri, varlık gösterimleri ve karmaşık mikroservis ağ etkinlikleri gibi alanlarda sürekli olarak zaman verisi üretiliyor ve kullanılıyor.
  • Kullanıcı deneyimini ve sistem güvenilirliğini garanti etmek için bu verileri etkili biçimde yönetmek kritik önem taşıyor.
  • Başlıca zorluklar:
    • Yüksek throughput: Saniyede en fazla 10 milyon yazmayı yönetirken yüksek erişilebilirliği korumak gerekiyor.
    • Büyük veri kümelerinde verimli sorgulama: Petabayt ölçeğinde veri depolarken, birincil anahtar okuma sonuçlarını düşük milisaniye seviyesinde döndürmek ve birden çok ikincil öznitelik üzerinden arama ile agregasyonu desteklemek gerekiyor.
    • Küresel okuma ve yazma: Dünyanın her yerinden okuma ve yazma işlemlerini desteklemek ve ayarlanabilir tutarlılık modeli sunmak gerekiyor.
    • Ayarlanabilir yapılandırma: Veri kümelerini tek kiracılı veya çok kiracılı veri depolarında bölümlendirebilme yeteneği sağlanmalı.
    • Patlamalı trafik yönetimi: Yeni içerik lansmanlarında veya bölgesel arıza kurtarma durumlarında oluşan trafik sıçramalarını yönetmek gerekiyor.
    • Maliyet verimliliği: Uzun süreli saklamayı optimize ederken altyapı maliyetlerini en aza indirmek gerekiyor.

TimeSeries soyutlaması

  • Veri bölümlendirme: Benzersiz bir zaman bölümlendirme stratejisi ve event bucket yaklaşımı kullanarak patlamalı iş yüklerini verimli biçimde yönetiyor ve sorguları sadeleştiriyor.
  • Esnek depolama: Apache Cassandra ve Elasticsearch gibi farklı depolama arka uçlarıyla entegre olabilecek şekilde tasarlandı.
  • Yapılandırılabilirlik: Her veri kümesi için farklı ayarlanabilir seçenekler sunarak çeşitli kullanım senaryolarına uyum sağlayan esneklik veriyor.
  • Ölçeklenebilirlik: Yatay ve dikey ölçeklemeyi destekleyerek Netflix’in kullanıcı tabanı ve hizmetleri büyüdükçe artan throughput ve veri hacmini karşılayabiliyor.
  • Shard altyapısı: Data Gateway Platform kullanılarak, gereken erişim ve trafik izolasyonuyla tek kiracılı ve/veya çok kiracılı altyapılar devreye alınabiliyor.

Veri modeli

  • Olay verisini kapsülleyip verimli biçimde sorgulamayı mümkün kılan benzersiz bir event veri modelini izliyor.
  • Event item: Event item, kullanıcının belirli bir olaya ilişkin veriyi depolamak için kullandığı anahtar-değer çiftidir. Örnek: {"device_type": "ios"}
  • Event: Event, bir veya daha fazla event item’dan oluşan yapılandırılmış bir koleksiyondur. Event, belirli bir anda gerçekleşir ve istemcinin ürettiği zaman damgası ile event tanımlayıcısı (UUID vb.) ile tanımlanır. event_time ve event_id birleşimi, event’in benzersiz idempotency anahtarının bir bölümünü oluşturur; böylece kullanıcılar istekleri güvenle yeniden deneyebilir.
  • Time series ID: time_series_id, bir veri kümesinin saklama süresi boyunca gerçekleşen bir veya daha fazla event’in toplamıdır. Örneğin device_id, saklama süresi boyunca belirli bir cihazda meydana gelen tüm event’leri depolar. Tüm event’ler değiştirilemezdir ve TimeSeries hizmeti belirli bir time series ID’ye yalnızca event ekler.
  • Namespace: Namespace, time series ID’ler ile event verilerinin bir koleksiyonudur ve tüm TimeSeries veri kümesini temsil eder. Kullanıcılar her kullanım senaryosu için bir veya daha fazla namespace oluşturabilir. Soyutlama, namespace seviyesinde çeşitli ayarlanabilir seçenekleri uygular.

API

  • WriteEventRecordsSync: Bu endpoint, bir event batch’ini yazar ve istemciye dayanıklılık onayını geri gönderir. Kullanıcının dayanıklılık garantisi istediği durumlarda kullanılır.
  • WriteEventRecords: Bunun, yukarıdaki endpoint’in fire-and-forget sürümüdür. Dayanıklılık onayı olmadan event batch’ini kuyruğa alır. Kullanıcının throughput’u daha önemli gördüğü ve az miktarda veri kaybını tolere edebildiği logging veya tracing gibi senaryolarda kullanılır.
  • ReadEventRecords: Namespace, timeSeriesId, timeInterval ve isteğe bağlı eventFilters birleşimi verildiğinde, bu endpoint eşleşen tüm event’leri event_time’a göre azalan sırada düşük milisaniye gecikmesiyle döndürür.
  • SearchEventRecords: Arama ölçütleri ve zaman aralığı verildiğinde, bu endpoint eşleşen tüm event’leri döndürür. Bu kullanım senaryoları eventual consistency ile okuma için uygundur.
  • AggregateEventRecords: Arama ölçütleri ve agregasyon modu (ör. DistinctAggregation) verildiğinde, bu endpoint belirtilen zaman aralığında istenen agregasyonu gerçekleştirir. Search endpoint’ine benzer şekilde, kullanıcılar eventual consistency’yi ve potansiyel olarak daha yüksek gecikmeyi (saniye düzeyi) kabul edebilir.

Depolama katmanı

  • TimeSeries’in depolama katmanı, birincil veri deposu ile isteğe bağlı bir indeks veri deposundan oluşur.
  • Apache Cassandra, yüksek throughput senaryolarında dayanıklılığı garanti eden veri deposu olarak tercih edilir.
  • Elasticsearch, indeksleme için tercih edilen veri deposudur.

Birincil veri deposu

  • TimeSeries kullanım senaryolarını ele almak için Apache Cassandra kullanılır.
  • Veri, zaman aralığına göre parçalara ayrılan Temporal Partitioning ile yönetilir.
    • Zaman dilimi: Saklama süresine karşılık gelen Cassandra tablosuna eşlenir
    • Zaman bucket’ı: Belirli zaman aralığı sorgularını optimize etmek için zaman dilimi içinde veriyi yeniden böler
    • Event bucket’ı: Kısa süre içinde bir time series’e gelen yoğun yazmaları işlemek için zaman bucket’ını yeniden böler
  • Veri tabloları gerçek event verisini saklar; metadata tabloları ise namespace bazında zaman dilimi yapılandırma bilgisini tutar.

İndeks veri deposu

  • Birincil anahtar dışındaki öznitelikler üzerinden ikincil erişim desenlerini desteklemek için veri Elasticsearch’e indekslenir.
  • Kullanıcılar, aranacak ve agregasyon yapılacak öznitelik listesini namespace bazında yapılandırabilir.

Kontrol düzlemi

  • Veri düzlemi okuma/yazma işlemlerini yürütürken, kontrol düzlemi namespace davranışının tüm yönlerini yapılandırır.
  • Veri düzlemi, TimeSeries kontrol yığınıyla iletişim kurar; bu da Data Gateway kontrol düzlemiyle etkileşime girer.
  • Namespace yapılandırmasıyla farklı unsurlar esnek biçimde ayarlanabilir (ör. zaman bölümlendirme, buffering, tutarlılık, saklama vb.).

Namespace yapılandırması

  • Hizmetin esnekliğini gösteren yapılandırma snippet’i sayesinde namespace bazında birçok ayar yapılabilir.

Altyapı sağlama

  • Çeşitli parametreler dikkate alınarak otomatikleştirilmiş provisioning iş akışı üzerinden en uygun kurulum belirlenir.
  • Sistem, başlangıç altyapısını sağladıktan sonra kullanıcı iş yüküne göre ölçeklenir.

Ölçeklenebilirlik

  • İlk provisioning sırasında kullanım tahmini sınırlı olduğundan sonradan ayarlama gerekir.
  • Yatay ölçekleme: TimeSeries sunucu instance’ları trafik talebine göre otomatik olarak büyütülür ve küçültülür.
  • Dikey ölçekleme: TimeSeries sunucu instance’ları veya depolama instance’ları daha büyük CPU, RAM ve/veya bağlı depolama kapasitesi elde etmek için dikey olarak ölçeklenebilir.
  • Disk ölçekleme: Veriyi depolamak için EBS bağlanabilir; disk depolaması belirli bir eşiğe ulaştığında EBS volume’ü genişletilir.
  • Veri yeniden bölümlendirme ile fazla ya da yetersiz bölümlendirilmiş veri kümeleri ayarlanır.

Tasarım ilkeleri

  • Event idempotency: Kullanıcıların istekleri güvenle yeniden deneyebilmesi için tüm değiştirici endpoint’lere idempotency yerleşik olarak eklenmiştir.
  • SLO tabanlı hedging: Performansı garanti etmek için farklı endpoint’lere hizmet seviyesi hedefi (SLO) atanır.
  • Kısmi dönüş: İstemci gecikmeye duyarlıysa kısmi sonuç kümesini kabul edebilir.
  • Uyarlanabilir sayfalama: Hizmet katmanı, time series veri kümesinin yoğun olduğunu düşündüğünde fan-out faktörünü dinamik olarak ayarlar.
  • Sınırlı yazma penceresi: Veri mümkün olduğunca hızlı biçimde değiştirilemez hale getirilir, böylece optimizasyonlar uygulanabilir.
  • Yazma buffering’i: Patlamalı iş yüklerini karşılamak için event’ler kısa süreliğine birleştirilerek yük daha dengeli dağıtılır.
  • Dinamik sıkıştırma: Veri değiştirilemez hale geldiğinde, okuma performansını optimize etmek için sıkıştırma stratejileri uygulanır.

Gerçek performans

  • Hizmet, veriyi düşük milisaniye düzeyinde yazabiliyor ve kararlı point read gecikmesini koruyor.

Netflix’te Time Series kullanımı

TimeSeries soyutlaması, Netflix’in temel hizmetleri genelinde önemli bir rol oynuyor. İşte etkili bazı kullanım senaryoları:

  • Tracing ve içgörü: Netflix içindeki tüm uygulama ve mikroservislerde log tracing yaparak servisler arası iletişimi anlamayı, sorun ayıklamayı desteklemeyi ve destek taleplerini yanıtlamayı sağlıyor.
  • Kullanıcı etkileşimi takibi: Video oynatma, arama, içerik etkileşimi gibi milyonlarca kullanıcı etkileşimini takip ederek Netflix’in öneri algoritmalarını gerçek zamanlı iyileştiren ve genel kullanıcı deneyimini geliştiren içgörüler sunuyor.
  • Özellik lansmanı ve performans analizi: Yeni ürün özelliklerinin lansmanını ve performansını izleyerek Netflix mühendislerinin kullanıcıların bu özelliklerle nasıl etkileşim kurduğunu ölçmesine imkân tanıyor; bu da gelecekteki iyileştirmeler için veriye dayalı kararları destekliyor.
  • Varlık gösterimi takibi ve optimizasyonu: Varlık gösterimlerini izleyerek içerik ve varlıkların verimli şekilde sunulmasını sağlarken optimizasyon için gerçek zamanlı geri bildirim veriyor.
  • Faturalama ve abonelik yönetimi: Faturalama ve abonelik yönetimiyle ilgili geçmiş veriyi saklayarak işlem kayıtlarının doğruluğunu güvence altına alıyor ve müşteri hizmetleri taleplerini destekliyor.

Gelecekteki iyileştirmeler

Kullanım senaryoları geliştikçe ve soyutlamayı daha maliyet verimli hale getirme ihtiyacı arttıkça, önümüzdeki aylarda hizmette birçok iyileştirme planlanıyor. Bunlardan bazıları şunlar:

  • Maliyet verimliliği için katmanlı depolama: Eski ve daha az erişilen veriyi, first byte’a ulaşma süresi daha uzun olan daha ucuz nesne depolamaya taşımayı destekleyerek Netflix’e milyonlarca dolar tasarruf sağlayabilir.
  • Dinamik event bucketing: Namespace provisioning sırasında bir ölçüde statik yapılandırma kullanmak yerine, event’ler akarken anahtarları gerçek zamanlı olarak en uygun boyuttaki partition’lara bölmeyi destekler. Bu stratejinin büyük avantajı, bölümlendirme gerektirmeyen time_series_id’leri bölümlendirmeyerek okuma amplifikasyonunun toplam maliyetini azaltmasıdır. Ayrıca Cassandra 4.x ile geniş partition’larda verinin alt kümelerini okumada önemli iyileştirmeler var; bu da tüm veri kümesini önceden agresif biçimde bölme ihtiyacını azaltabilir.
  • Caching: Verinin değiştirilemez olmasından yararlanarak tekil zaman aralıkları için akıllı önbellekleme yapılır.
  • Count ve diğer agregasyonlar: Bazı kullanıcılar, belirli bir zaman aralığındaki tüm event verisini almak yerine yalnızca event sayısıyla ilgilenir.

Sonuç

  • TimeSeries Abstraction, Netflix’in çevrimiçi veri altyapısının kritik bir bileşenidir ve gerçek zamanlı ile uzun vadeli kararları destekler.
  • Netflix yeni alanlara açıldıkça, TimeSeries Abstraction platformun temel unsurlarından biri olmaya devam edecek ve streaming ile ötesindeki olanakların genişlemesine katkı sağlayacak.

GN⁺’ın görüşü

  • TimeSeries soyutlaması sayesinde ölçeklenebilirlik, esneklik ve maliyet verimliliğini aynı anda sağlayarak devasa miktardaki zaman serisi verisini güvenilir biçimde işleyebilmesi, Netflix’in birikimini etkileyici kılıyor. Özellikle zaman tabanlı partitioning, yazma buffering’i ve dinamik compaction gibi veri özellikleri ile erişim desenlerine optimize edilmiş teknikler dikkat çekiyor.
  • Bunun yalnızca basit bir time series DB değil, soyutlama katmanı sayesinde Cassandra, Elasticsearch gibi farklı depoları esnek biçimde kullanabilen ve iş yükü özelliklerine göre altyapıyı provision edip işletebilen bir kontrol düzenine sahip olması etkili görünüyor. Bu soyutlama sayesinde kullanıcılar karmaşıklığı gizleyip veriye odaklanabiliyor.
  • Halihazırda petabayt ölçeğindeki veriyi barındırırken saniyede 15 milyon event işleme performansı göstermesi, yüksek performanslı zaman serisi veri hattı kurmak isteyen şirketler için örnek niteliğinde. Özellikle büyük ölçekli hizmetlerde yalnızca veri hacmi ve hızın değil, maliyet boyutunun da bütüncül şekilde ele alınması gerektiğini gösteriyor.
  • Tracing, kullanıcı davranışı analizi, faturalama yönetimi gibi Netflix işinin temel alanlarında yaygın biçimde kullanılması, zaman serisi verisinin veriye dayalı karar alma ve hizmet inovasyonunun itici gücü olduğunu ortaya koyuyor. Yalnızca logging değil, gerçek zamanlı öneriler gibi ML/AI tabanlı hizmetlerin de temelini oluşturuyor.
  • Gelecekte katmanlı depolama, dinamik partitioning ve agregasyon işlemleri gibi iyileştirme planları, sistemin sürekli evrilme iradesini gösteriyor. Hızla değişen iş gereksinimlerine yanıt verebilmek için bu tür kesintisiz inovasyonun gerekli olduğu anlaşılıyor. Bu süreçte biriken bilgi birikiminin open source gibi kanallarla paylaşılması umuluyor.

Henüz yorum yok.

Henüz yorum yok.