3 poin oleh GN⁺ 2024-10-12 | Belum ada komentar. | Bagikan ke WhatsApp
  • Seiring Netflix berekspansi ke berbagai bidang seperti VoD dan Gaming, kemampuan untuk menyimpan dan memproses data berbasis waktu dalam jumlah sangat besar (skala petabita) dengan latensi milidetik menjadi semakin penting.
  • Dengan berlandaskan abstraksi Key-Value dan platform Data Gateway, Netflix mengembangkan abstraksi TimeSeries untuk menyediakan solusi yang dapat menyimpan dan melakukan kueri data peristiwa temporal secara efisien di berbagai use case.

Tantangan

  • Di Netflix, data berbasis waktu terus-menerus dihasilkan dan digunakan dari interaksi pengguna, impresi aset, hingga aktivitas jaringan microservice yang kompleks.
  • Mengelola data ini secara efektif sangat penting untuk memastikan pengalaman pengguna dan keandalan sistem.
  • Tantangan utama:
    • Throughput tinggi: harus mampu menangani hingga 10 juta penulisan per detik sambil mempertahankan ketersediaan tinggi.
    • Kueri efisien pada dataset berskala besar: harus menyimpan data skala petabita sambil mengembalikan hasil pembacaan primary key dalam latensi milidetik rendah, serta mendukung pencarian dan agregasi melalui berbagai atribut sekunder.
    • Baca dan tulis global: harus mendukung operasi baca dan tulis dari mana pun di dunia, serta menyediakan model konsistensi yang dapat disesuaikan.
    • Konfigurasi yang dapat disesuaikan: menyediakan kemampuan untuk mempartisi dataset dalam penyimpanan data single-tenant atau multi-tenant.
    • Penanganan lonjakan trafik: harus mampu mengelola lonjakan trafik saat peluncuran konten baru atau pemulihan gangguan regional.
    • Efisiensi biaya: harus meminimalkan biaya infrastruktur sambil mengoptimalkan retensi jangka panjang.

Abstraksi TimeSeries

  • Partisi data: menggunakan strategi partisi waktu yang unik dan pendekatan event bucket untuk menangani workload burst secara efisien dan menyederhanakan kueri.
  • Penyimpanan fleksibel: dirancang agar dapat terintegrasi dengan berbagai backend penyimpanan seperti Apache Cassandra dan Elasticsearch.
  • Dapat dikonfigurasi: menyediakan berbagai opsi yang dapat disesuaikan untuk setiap dataset sehingga fleksibel beradaptasi dengan beragam use case.
  • Skalabilitas: mendukung penskalaan horizontal dan vertikal untuk menangani throughput dan volume data yang terus meningkat seiring pertumbuhan basis pengguna dan layanan Netflix.
  • Infrastruktur shard: memanfaatkan Data Gateway Platform untuk menerapkan infrastruktur single-tenant dan/atau multi-tenant dengan isolasi akses dan trafik yang diperlukan.

Model data

  • Mengikuti model data peristiwa yang unik, yang mengenkapsulasi data event agar dapat dikueri secara efisien.
  • Event item: event item adalah pasangan key-value yang digunakan pengguna untuk menyimpan data terkait event tertentu. Contoh: {"device_type": "ios"}
  • Event: event adalah koleksi terstruktur yang terdiri dari satu atau lebih event item. Event terjadi pada waktu tertentu dan diidentifikasi oleh timestamp yang dibuat klien serta pengenal event (seperti UUID). Kombinasi event_time dan event_id membentuk bagian dari kunci idempotensi unik event, sehingga pengguna dapat melakukan retry permintaan dengan aman.
  • Time series ID: time_series_id adalah kumpulan satu atau lebih event yang terjadi selama periode retensi dataset. Misalnya, device_id menyimpan semua event yang terjadi pada perangkat tertentu selama periode retensi. Semua event bersifat immutable, dan layanan TimeSeries hanya menambahkan event ke time series ID yang diberikan.
  • Namespace: namespace adalah kumpulan time series ID dan data event yang merepresentasikan keseluruhan dataset TimeSeries. Pengguna dapat membuat satu atau lebih namespace untuk setiap use case. Abstraksi ini menerapkan berbagai opsi yang dapat disesuaikan pada tingkat namespace.

API

  • WriteEventRecordsSync: endpoint ini menulis batch event dan mengirimkan kembali konfirmasi durabilitas ke klien. Ini digunakan saat pengguna memerlukan jaminan durabilitas.
  • WriteEventRecords: ini adalah versi fire-and-forget dari endpoint di atas. Endpoint ini memasukkan batch event ke antrean tanpa konfirmasi durabilitas. Cocok untuk kasus seperti logging atau tracing, ketika pengguna lebih mengutamakan throughput dan dapat mentoleransi sedikit kehilangan data.
  • ReadEventRecords: jika diberikan kombinasi namespace, timeSeriesId, timeInterval, dan eventFilters opsional, endpoint ini mengembalikan semua event yang cocok dalam urutan menurun berdasarkan event_time dengan latensi milidetik rendah.
  • SearchEventRecords: jika diberikan kriteria pencarian dan interval waktu, endpoint ini mengembalikan semua event yang cocok. Use case seperti ini cocok untuk pembacaan yang eventually consistent.
  • AggregateEventRecords: jika diberikan kriteria pencarian dan mode agregasi (misalnya DistinctAggregation), endpoint ini menjalankan agregasi yang diberikan dalam interval waktu tertentu. Seperti endpoint Search, pengguna perlu menerima eventual consistency dan potensi latensi yang lebih tinggi (dalam hitungan detik).

Lapisan penyimpanan

  • Lapisan penyimpanan TimeSeries terdiri dari penyimpanan data utama dan penyimpanan data indeks opsional.
  • Apache Cassandra dipilih sebagai penyimpanan data yang menjamin durabilitas dalam skenario throughput tinggi.
  • Elasticsearch dipilih sebagai penyimpanan data untuk indexing.

Penyimpanan data utama

  • Memanfaatkan Apache Cassandra untuk menangani use case TimeSeries.
  • Mengelola data dengan Temporal Partitioning, yang membagi data menjadi chunk berdasarkan interval waktu.
    • Time slice: dipetakan ke tabel Cassandra yang sesuai dengan periode retensi
    • Time bucket: mempartisi ulang data di dalam time slice untuk mengoptimalkan kueri rentang waktu tertentu
    • Event bucket: mempartisi ulang time bucket untuk menangani penulisan massal time series dalam jangka pendek
  • Tabel data menyimpan data event aktual, sedangkan tabel metadata menyimpan informasi konfigurasi time slice per namespace.

Penyimpanan data indeks

  • Untuk mendukung pola akses sekunder melalui atribut non-primary key, data diindeks ke Elasticsearch.
  • Pengguna dapat mengonfigurasi daftar atribut untuk pencarian dan agregasi per namespace.

Control plane

  • Data plane menangani operasi baca/tulis, sedangkan control plane mengonfigurasi seluruh aspek perilaku namespace.
  • Data plane berkomunikasi dengan stack kontrol TimeSeries, yang kemudian berinteraksi dengan control plane Data Gateway.
  • Melalui konfigurasi namespace, berbagai hal dapat disesuaikan secara fleksibel (misalnya partisi waktu, buffering, konsistensi, retensi, dan lain-lain).

Konfigurasi namespace

  • Melalui snippet konfigurasi yang menunjukkan fleksibilitas layanan, berbagai hal dapat disesuaikan untuk tiap namespace.

Provisioning infrastruktur

  • Dengan mempertimbangkan berbagai parameter, sistem menentukan pengaturan optimal melalui workflow provisioning otomatis.
  • Sistem memprovisioning infrastruktur awal lalu menskalakannya sesuai workload pengguna.

Skalabilitas

  • Karena prediksi penggunaan saat provisioning awal terbatas, penyesuaian setelahnya diperlukan.
  • Skalabilitas horizontal: instance server TimeSeries secara otomatis scale up dan scale down sesuai permintaan trafik.
  • Skalabilitas vertikal: instance server TimeSeries atau instance penyimpanan dapat diskalakan secara vertikal untuk memperoleh CPU, RAM, dan/atau kapasitas penyimpanan terpasang yang lebih besar.
  • Ekspansi disk: data dapat disimpan dengan memasang EBS, dan saat penyimpanan disk mencapai ambang tertentu, volume EBS akan diperluas.
  • Repartitioning data digunakan untuk menyesuaikan dataset yang over-partitioned atau under-partitioned.

Prinsip desain

  • Idempotensi event: idempotensi dibangun ke dalam semua endpoint mutasi agar pengguna dapat melakukan retry permintaan dengan aman.
  • Hedging berbasis SLO: target service level objective (SLO) ditetapkan untuk berbagai endpoint guna menjamin performa.
  • Partial return: jika klien sensitif terhadap latensi, mereka dapat menerima himpunan hasil parsial.
  • Adaptive pagination: jika lapisan layanan menilai dataset time series padat, fanout factor disesuaikan secara dinamis.
  • Jendela penulisan terbatas: data dibuat menjadi immutable secepat mungkin agar optimisasi dapat diterapkan.
  • Write buffering: untuk menangani workload burst, event digabungkan selama periode singkat agar beban dapat diratakan.
  • Kompaksi dinamis: saat data menjadi immutable, strategi kompaksi digunakan untuk mengoptimalkan performa baca.

Performa nyata

  • Layanan ini dapat menulis data dalam latensi milidetik rendah sambil mempertahankan latensi point read yang stabil.

Pemanfaatan Time Series di Netflix

Abstraksi TimeSeries memainkan peran penting di seluruh layanan utama Netflix. Berikut beberapa use case yang berdampak besar.

  • Tracing dan insight: melakukan log tracing pada semua aplikasi dan microservice di Netflix untuk memahami komunikasi antar-layanan, membantu debugging issue, dan menjawab permintaan dukungan.
  • Pelacakan interaksi pengguna: melacak jutaan interaksi pengguna seperti pemutaran video, pencarian, dan engagement konten untuk meningkatkan algoritme rekomendasi Netflix secara real time serta menyediakan insight yang memperbaiki pengalaman pengguna secara keseluruhan.
  • Peluncuran fitur dan analisis performa: melacak peluncuran dan performa fitur produk baru agar engineer Netflix dapat mengukur bagaimana pengguna berinteraksi dengan fitur tersebut, sehingga mendukung pengambilan keputusan berbasis data untuk perbaikan berikutnya.
  • Pelacakan dan optimisasi impresi aset: melacak eksposur aset untuk memastikan konten dan aset dikirim secara efisien, sambil menyediakan umpan balik real time untuk optimisasi.
  • Penagihan dan manajemen langganan: menyimpan data historis terkait penagihan dan pengelolaan langganan untuk memastikan akurasi catatan transaksi dan mendukung pertanyaan layanan pelanggan.

Peningkatan ke depan

Seiring use case terus berkembang dan kebutuhan untuk membuat abstraksi ini semakin efisien secara biaya meningkat, Netflix berencana melakukan banyak peningkatan layanan dalam beberapa bulan ke depan. Sebagiannya adalah sebagai berikut.

  • Tiered storage untuk efisiensi biaya: mendukung pemindahan data lama dan yang jarang diakses ke object storage yang lebih murah tetapi membutuhkan waktu lebih lama hingga first byte, yang dapat menghemat jutaan dolar bagi Netflix.
  • Dynamic event bucketing: alih-alih memiliki konfigurasi yang agak statis saat memprovisioning namespace, sistem akan mendukung pemartisian key secara real time ke partisi berukuran optimal saat event di-streaming. Strategi ini memiliki keuntungan besar karena mengurangi total biaya read amplification dengan tidak mempartisi time_series_id yang memang tidak memerlukan partisi. Selain itu, di Cassandra 4.x terdapat peningkatan besar dalam membaca subset data dari partisi yang luas, sehingga kebutuhan untuk mempartisi seluruh dataset secara agresif sebelumnya dapat berkurang.
  • Caching: memanfaatkan sifat immutable dari data untuk melakukan caching secara cerdas pada rentang waktu individual.
  • Count dan agregasi lainnya: beberapa pengguna hanya tertarik pada jumlah event dalam interval waktu tertentu, alih-alih mengambil seluruh data event.

Kesimpulan

  • TimeSeries Abstraction adalah komponen penting dari infrastruktur data online Netflix, yang mendukung pengambilan keputusan real time maupun jangka panjang.
  • Seiring Netflix berekspansi ke bidang-bidang baru, TimeSeries Abstraction akan tetap menjadi elemen inti platform yang membantu memperluas kemungkinan dalam streaming dan seterusnya.

Opini GN⁺

  • Keahlian Netflix dalam menangani data deret waktu dalam jumlah sangat besar secara andal melalui abstraksi TimeSeries sangat mengesankan, karena berhasil mengamankan skalabilitas, fleksibilitas, dan efisiensi biaya sekaligus. Secara khusus, teknik yang dioptimalkan untuk karakteristik data dan pola akses seperti partisi berbasis waktu, write buffering, dan kompaksi dinamis sangat menonjol.
  • Ini bukan sekadar database time series, tetapi lapisan abstraksi yang memungkinkan pemanfaatan fleksibel berbagai penyimpanan seperti Cassandra dan Elasticsearch, sekaligus memiliki sistem kontrol untuk memprovisioning dan mengoperasikan infrastruktur sesuai karakteristik workload. Melalui abstraksi, pengguna dapat menyembunyikan kompleksitas dan fokus pada data.
  • Saat ini sistem ini menunjukkan performa yang mampu menampung data skala petabita sambil memproses 15 juta event per detik, sehingga layak menjadi teladan bagi perusahaan yang ingin membangun pipeline data deret waktu berperforma tinggi. Ini juga menunjukkan bahwa untuk layanan berskala besar, bukan hanya volume dan kecepatan data yang perlu dipertimbangkan, tetapi juga aspek biaya secara menyeluruh.
  • Karena dimanfaatkan secara luas di area inti bisnis Netflix seperti tracing, analisis perilaku pengguna, dan manajemen penagihan, terlihat jelas bahwa data deret waktu adalah penggerak utama pengambilan keputusan berbasis data dan inovasi layanan. Ini bukan sekadar logging, tetapi juga fondasi bagi layanan berbasis ML/AI seperti rekomendasi real time.
  • Rencana peningkatan berkelanjutan seperti tiered storage, partisi dinamis, dan operasi agregasi menunjukkan komitmen untuk terus berevolusi. Untuk merespons kebutuhan bisnis yang berubah cepat, inovasi berkelanjutan seperti ini tampaknya memang diperlukan. Ada harapan agar pengetahuan yang terakumulasi dalam proses ini juga dapat dibagikan melalui open source dan saluran lainnya.

Belum ada komentar.

Belum ada komentar.