Masalah dan skop
Platform ini menerima 10 juta imej asal setiap hari, manakala klien meminta pelbagai dimensi, pemangkasan, dan format output. Reka bentuk storan imej asal, tugas transformasi, caching imej terbitan, dan penghantaran CDN. Imej asal mestilah boleh diproses semula; lapisan penyuntingan kolaboratif, model penyederhanaan kandungan, dan penentukuran warna profesional adalah di luar skop. Angka-angka ini adalah andaian temu duga, bukan penanda aras industri.
Perkara yang dinilai oleh penemu duga
Memisahkan identiti imej asal, permintaan transformasi, dan aset terbitan. Menjelaskan bagaimana pemprosesan tak segerak (asynchronous) wujud bersama bacaan kependaman rendah. Jawapan yang kukuh merangkumi kunci cache deterministik, penggabungan tugas pendua (duplicate-job coalescing), tekanan balik (backpressure) giliran, bom piksel dan penyahmampatan, kebenaran objek, rundingan kandungan, dan pembersihan selepas pemadaman.
Soalan penjelasan
- Adakah sebarang dimensi, pemangkasan, dan penapis dibenarkan? Apakah had piksel, saiz fail, dan masa?
- Format, tahap kualiti, ruang warna, dan kelakuan animasi yang manakah diperlukan?
- Adakah permintaan pertama mesti segerak, atau bolehkah ia mengembalikan
202bersama status tugas? - Apakah keperluan pengekalan, pengasingan penyewa (tenant isolation), dan rentas rantau?
- Adakah hasilnya awam, atau setiap URL mesti membawa kebenaran?
Kerangka jawapan 30 saat
"Saya akan menyimpan imej asal sebagai aset tak boleh ubah (immutable) beralamat kandungan dan mengekodkan parameter transformasi yang dinormalkan ke dalam kunci terbitan. Bacaan memeriksa CDN dan objek terbitan terlebih dahulu; kegagalan carian (miss) menghantar tugas idempoten yang dipisahkan mengikut penyewa dan imej asal. Pekerja (workers) berjalan dalam sandbox dengan had piksel, memori, CPU, penyahmampatan, dan output, kemudian menerbitkan objek sementara yang disahkan secara atomik. Percubaan semula membawa versi pemproses dan belanjawan, manakala permintaan yang serupa berkongsi satu tugas. Lapisan akses menggunakan URL bertandatangan, rundingan, dan kawalan cache; peristiwa pemadaman membersihkan indeks terbitan dan entri CDN."
Reka bentuk terperinci langkah demi langkah
API muat naik mengesahkan identiti, mengesahkan ringkasan (digest), dan menulis objek asal. Metadata merekodkan asset_id, penyewa, cincangan kandungan, jenis media, dimensi, bilangan bingkai, maklumat warna, status imbasan, dan dasar pengekalan. Penyahduplikasian kandungan tidak sekali-kali menggantikan semakan kebenaran penyewa. Sahkan bait ajaib (magic bytes) dan kebolehdekodan dan bukannya mempercayai nama fail atau Content-Type.
Normalkan parameter transformasi seperti had dimensi, koordinat pemangkasan, algoritma pensampelan semula, kualiti, putaran, latar belakang, dan format output ke dalam jujukan yang stabil. Kunci terbitan boleh menjadi hash(original_bytes, normalized_transform, processor_version). Peningkatan pemproses menukar versi, supaya algoritma lama dan baharu tidak menimpa antara satu sama lain secara senyap. Tolak nilai negatif, NaN, nisbah ekstrem, dan penapis rekursif.
Laluan bacaan memeriksa CDN, indeks objek terbitan, dan jadual penyahduplikasian tugas. Terbitan yang boleh digunakan mengembalikan Cache-Control, ETag, dan jenis kandungan yang betul. Jika berlaku miss, cipta tugas PENDING dan kembalikan URL status apabila kependaman boleh diterima; imej biasa yang kecil boleh menggunakan laluan segerak yang terikat rapi. Kekangan unik pada (tenant_id, derived_key) membolehkan permintaan yang serupa berkongsi kerja.
Bahagikan giliran mengikut penyewa dan cincangan imej asal, dan jadualkan mengikut kos piksel dan bukannya bilangan permintaan. Kuota penyewa, konkurensi global, dan giliran keutamaan menyediakan tekanan balik; satu imej yang besar tidak boleh mendominasi semua pekerja. Tugas membawa pajakan (leases) dan versi pemproses, supaya pekerja yang dimatikan boleh dicuba semula. Pengunduran eksponen (exponential backoff) adalah untuk kegagalan yang boleh dipulihkan; parameter tidak sah dan format yang tidak disokong akan gagal secara eksplisit.
Sandbox pemprosesan mengehadkan CPU, memori, cakera sementara, nisbah penyahmampatan, bilangan bingkai, dan dimensi output, serta tidak boleh mencapai rangkaian dalaman. Kira semula piksel dan bingkai sebenar selepas penyahkodan untuk menghentikan bom penyahmampatan. Tulis objek sementara, sahkan ringkasan, dimensi, dan format, kemudian terbitkan secara atomik melalui penulisan bersyarat atau berversi. Tentukan dasar yang jelas untuk SVG, profil ICC, dan metadata untuk mengelakkan skrip, traversal laluan, dan kebocoran privasi.
Cache terbitan mengikut kuncinya. Pemadaman imej asal atau perubahan kebenaran akan mengeluarkan peristiwa aset yang membatalkan indeks terbitan dan CDN. Aset peribadi menggunakan URL bertandatangan jangka pendek dengan tandatangan merangkumi penyewa, kunci terbitan, tamat tempoh, dan pengepala respons yang dibenarkan. Pastikan Vary terhad kepada dimensi rundingan yang benar-benar mengubah output; parameter pertanyaan sewenang-wenangnya tidak boleh mencipta varian cache tanpa had.
Pantau kejayaan penulisan imej asal, usia giliran, daya pemprosesan berwajaran piksel, kadar hit cache, penggabungan tugas pendua, kependaman transformasi p95, kelas kegagalan, puncak sandbox, pertumbuhan terbitan, dan 5xx CDN. Penyesuaian (reconciliation) membandingkan metadata asal, keadaan terminal tugas, indeks terbitan, dan penyenaraian objek untuk membuang objek yatim. Suntik penamatan pekerja, masa tamat storan objek, mesej pendua, peningkatan pemproses, kegagalan pembatalan CDN, dan kehabisan kuota penyewa.
Contoh jawapan berkualiti tinggi
"Saya akan menganggap imej asal sebagai aset tak boleh ubah yang boleh dialamatkan dan menggabungkan parameter yang dinormalkan dengan versi pemproses ke dalam kunci terbitan. Permintaan memeriksa CDN dan objek terbitan; jika berlaku miss, sistem mencipta tugas yang dikongsi di bawah kekangan unik dan mengembalikan tugas sedia ada atau URL status. Giliran dijadualkan mengikut penyewa dan kos piksel. Pekerja berjalan dalam sandbox yang mengehadkan nisbah penyahmampatan, memori, CPU, bingkai, dan saiz output, kemudian mengesahkan dan menerbitkan hasil sementara secara atomik.
Akses peribadi menggunakan URL bertandatangan yang merangkumi penyewa, kunci terbitan, dan tamat tempoh; respons awam menetapkan ETag, Cache-Control, dan jenis kandungan yang betul. Peristiwa pemadaman membersihkan indeks dan entri CDN. Metrik meliputi kadar hit, usia giliran, kependaman p95, puncak sumber, dan kelas kegagalan; penyesuaian mencari objek yatim. Permintaan yang serupa tidak dikira semula, imej berniat jahat tidak dapat menghabiskan kapasiti, dan peningkatan pemproses tidak boleh mencemari terbitan lama."
Kesilapan lazim
- Menggunakan nama fail sebagai identiti → penamaan semula dan perlanggaran akan menimpa aset → gunakan cincangan kandungan dan ID aset.
- Mencantumkan parameter mentah → permintaan yang setara memecahkan cache → normalkan sebelum menjana kunci.
- Mencipta tugas bagi setiap miss → imej popular mencetuskan lonjakan pengiraan (compute storm) → gabungkan mengikut penyewa dan kunci terbitan.
- Mengehadkan bait sahaja → bom penyahmampatan berkembang menjadi piksel yang sangat besar → hadkan piksel yang dinyahkod, bingkai, dan nisbah.
- Memproses setiap permintaan secara segerak → kerja yang perlahan menyekat bacaan → gabungkan giliran tak segerak dengan laluan pantas yang terikat.
- Menulis terus ke objek akhir → klien boleh membaca output separa → sahkan objek sementara dan terbitkan secara atomik.
- Menandatangani URL sahaja → parameter atau dasar respons boleh berubah → tandatangani penyewa, kunci, tamat tempoh, dan dasar.
- Memadam imej asal sahaja → terbitan peribadi kekal boleh diakses → pacukan pembersihan daripada peristiwa aset.
Soalan susulan dan jawapan
Soalan susulan 1: Mengapa memasukkan versi pemproses dalam kunci cache?
Algoritma atau pustaka yang berbeza boleh menghasilkan bait yang berbeza. Pemversian membolehkan hasil baharu wujud bersama dan hasil lama ditamatkan secara teratur.
Soalan susulan 2: Bagaimana anda mengendalikan imej animasi?
Sertakan bilangan bingkai, tempoh masa, dan dasar output dalam model kos, hadkan jumlah bingkai dan piksel, serta gunakan kunci berasingan untuk lakaran kecil (thumbnail) bingkai pertama.
Soalan susulan 3: Bilakah anda mengembalikan 202?
Kembalikan 202, ID tugas, dan panduan percubaan semula apabila kos tidak dapat diramalkan, output adalah besar, atau giliran tersekat. Format biasa yang kecil boleh menggunakan belanjawan segerak yang ketat.
Soalan susulan 4: Bagaimana anda menghalang keracunan cache (cache poisoning)?
Hanya pelayan yang mencipta kunci daripada parameter yang dinormalkan. Sahkan jenis, panjang, dan ringkasan sebelum penerbitan; ikat cache peribadi dengan kebenaran penyewa.
Soalan susulan 5: Apakah yang berlaku kepada URL lama selepas menggantikan imej asal?
Gunakan ID versi yang tidak boleh ubah. Penggantian mencipta aset baharu atau peristiwa versi; terbitan lama kekal atau tamat tempoh mengikut dasar pengekalan dan bukannya menukar bait secara senyap.
Soalan susulan 6: Bagaimana anda memastikan kos kekal adil?
Caj mengikut piksel yang dinyahkod, piksel output, dan kerumitan penapis. Token bucket penyewa, had konkurensi, dan belanjawan harian mengawal kerja yang mahal serta menghasilkan respons kuota yang boleh diaudit.