1. Pertanyaan
Sebuah platform menerima metrik time-series yang diberi label berdasarkan layanan, penyewa (tenant), dan wilayah. Proses debugging jangka pendek memerlukan data tingkat detik, sedangkan laporan jangka panjang memerlukan tren menit atau jam. Penyerapan data terus meningkat. Pertahankan 15 hari sampel mentah dan 2 tahun data agregat sambil mengendalikan biaya dan mencegah kardinalitas tinggi membebani kueri.
2. Batasan dan klarifikasi
- Konfirmasikan interval scrape, jumlah dan kardinalitas label, rentang kueri, SLO, penundaan data yang dapat diterima, dan persyaratan penghapusan.
- Pisahkan sampel mentah, agregat fixed-window, hasil recording-rule, dan arsip jangka panjang.
- Jangan mengganti counter, histogram, atau kuantil dengan rata-rata sederhana; agregasi harus mempertahankan semantik metrik.
- Tentukan penyerapan at-least-once, sampel duplikat, stempel waktu yang tidak berurutan (out-of-order), dan isolasi tenant.
3. Arsitektur inti
Lapisan penyerapan (ingestion layer) menerapkan daftar izin label, anggaran kardinalitas, dan kompresi batch sebelum menulis ke penyimpanan panas terpartisi waktu. Lapisan kueri merutekan berdasarkan rentang dan langkah (step): rentang pendek membaca blok mentah, rentang panjang membaca blok pra-agregasi, dan rentang campuran digabungkan dengan metadata resolusi. Tugas jendela yang dapat diputar ulang (replayable window job) membaca data mentah, menulis blok agregat berversi, memverifikasinya, dan baru setelah itu menghapus blok mentah yang telah kedaluwarsa.
4. Alur referensi
ingest(sample):
series = canonicalize(metric_name, sorted_labels)
enforce_cardinality_budget(series)
append_to_time_partition(series, sample)
downsample(window):
raw = read_raw(window)
agg = aggregate_by_metric_semantics(raw, resolution=5m)
write_versioned_block(window, agg, source_watermark)
verify_counts_checksums_and_watermark(agg)
query(range, step):
blocks = choose_resolution(range, step)
return merge_with_gap_and_resolution_metadata(blocks)Untuk counter, pertahankan inkremen dan reset; untuk gauge, pertahankan min/maks/rata-rata; untuk histogram, gabungkan bucket atau struktur histogram native. Kembalikan resolusi aktual, cakupan, dan celah data (gaps) agar pengguna tidak salah mengira data hasil downsampling sebagai presisi mentah.
5. Kompromi konsistensi dan biaya
Sampel yang terlambat atau eksekusi berulang dapat mengubah agregat, sehingga tugas memerlukan watermark, versi, dan penulisan idempoten, ditambah periode koreksi yang ditentukan setelah jendela ditutup. Label berkardinalitas tinggi melipatgandakan biaya memori, indeks, dan kueri; batasi label pengguna arbitrer dengan kuota tenant atau pra-agregasi. Resolusi yang lebih tinggi, retensi yang lebih lama, dan latensi kueri yang lebih rendah memiliki biaya penyimpanan dan komputasi langsung.
6. Verifikasi dan observabilitas
- Validasi jumlah sampel input/output, inkremen counter, total bucket, checksum, dan watermark untuk setiap jendela.
- Putar ulang jendela yang sama secara berulang dan konfirmasikan idempotensi serta versi hasil yang dapat digantikan.
- Pantau tingkat penolakan penyerapan, jumlah deret (series count), sampel kueri, penundaan downsampling, tingkat celah (gap rate), dan biaya penyimpanan.
- Bandingkan hasil mentah dan agregat untuk insiden nyata guna memastikan lonjakan, reset, dan anomali tidak hilang akibat perataan (averaging).
7. Kesalahan umum
- Merata-ratakan setiap metrik berdasarkan waktu dan merusak semantik counter, kuantil, atau histogram.
- Menggunakan string label yang tidak berurutan sebagai kunci deret, menciptakan deret duplikat dan kardinalitas yang salah.
- Menghapus blok mentah sebelum downsampling diverifikasi, membuat pemutaran ulang atau koreksi data yang terlambat menjadi mustahil.
- Hanya merutekan berdasarkan rentang waktu dan mengabaikan step, celah data, dan metadata resolusi.
8. Poin penilaian wawancara
Menentukan model data bertingkat (tiered data model)
Kandidat memisahkan data mentah, data pra-agregasi, dan data yang diarsipkan serta menyatakan resolusi, retensi, dan tujuan kueri dari masing-masing tingkatan.
Mempertahankan semantik metrik
Kandidat memperlakukan counter, gauge, histogram, dan kuantil secara berbeda, alih-alih menerapkan satu fungsi rata-rata ke semua tipe.
Mengendalikan kardinalitas dan biaya
Kandidat mengusulkan aturan label, kuota tenant, penolakan penyerapan, dan anggaran penyimpanan, lalu menjelaskan hubungan biaya kueri.
Merancang validasi yang dapat diputar ulang
Kandidat menggunakan watermark, versi, penulisan idempoten, dan pemeriksaan pemutaran ulang sambil memantau celah data, penundaan, dan fidelitas anomali.