Topik temu duga representatif

Temu Duga Backend: Mereka Bentuk API Muat Naik Berbilang Bahagian Boleh Sambung Semula dengan Semakan Integriti

BackendSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Reka bentuk API untuk muat naik fail besar yang boleh disambung semula. Klien mungkin terputus sambungan, memuat naik bahagian dua kali atau menghantar permintaan secara serentak; sistem mesti mengesahkan integriti, mengelakkan bahagian terbiar (orphaned parts) dan mengembalikan versi objek yang stabil selepas selesai.

Prompt dan konteks

Klien perlu memuat naik fail berbilang gigabait melalui rangkaian yang tidak stabil. Klien mudah alih mungkin mencuba semula atau menghantar bahagian yang sama secara serentak. Perkhidmatan mesti memaparkan kemajuan, membenarkan bahagian yang hilang dicuba semula, dan membuktikan integriti kandungan sebelum dan selepas pemuktamadan. Temu duga ini memberi tumpuan kepada keadaan protokol, keidempotenan, checksum, kitaran hayat dan keterlihatan objek.

Perkara yang diuji oleh penemu duga

Penemu duga ingin melihat permintaan besar dipecahkan kepada sesi yang boleh dipulihkan. Google Cloud mentakrifkan muat naik boleh sambung semula sebagai berbilang permintaan yang boleh diteruskan selepas kegagalan komunikasi; muat naik berbilang bahagian Amazon S3 memerlukan bahagian terlebih dahulu dan panggilan selesai yang jelas sebelum memasang objek, serta mengesyorkan pembersihan kitaran hayat untuk muat naik yang tidak lengkap. Jawapan yang kukuh juga merangkumi kebenaran, had kadar dan semantik penyempurnaan pendua.

Soalan penjelasan untuk ditanya terlebih dahulu

Jelaskan saiz objek, saiz bahagian dan had keserentakan; sama ada klien boleh mengekalkan URL sesi; sama ada objek boleh ditulis ganti atau dijadikan versi; sama ada klien membekalkan digest keseluruhan fail atau perkhidmatan yang mengiranya; serta dasar pengekalan sesi, pembatalan, penyalahgunaan dan kuota penyewa. URL yang dipra-tandatangan tidak membawa kebenaran perniagaan secara automatik.

Rangka kerja jawapan 30 saat

Katakan: “Saya akan mendedahkan operasi cipta-sesi, muat-naik-bahagian, status, selesai dan batal. Sesi tersebut mengikat penyewa, kunci objek, saiz, peraturan bahagian, tamat tempoh dan dasar checksum. Setiap bahagian adalah idempoten mengikut (uploadId, partNumber, checksum). Penyempurnaan mengesahkan bahagian berturutan dan digest keseluruhan objek, kemudian menerbitkan versi objek secara atomik. Pekerja (worker) membersihkan sesi yang telah tamat tempoh; kebenaran, kuota dan had kadar diperiksa semasa penciptaan dan pada setiap permintaan bahagian.”

Analisis mendalam langkah demi langkah

1. Cipta dan sahkan sesi muat naik

POST /uploads memeriksa kuota penyewa, saiz objek, jenis kandungan dan kebenaran destinasi, kemudian mengembalikan uploadId rawak, saiz bahagian, tamat tempoh dan kelayakan muat naik yang diskopkan. Sesi ini merekodkan saiz yang dijangka, kunci objek, dasar versi dan algoritma checksum; klien tidak boleh memilih laluan storan sewenang-wenangnya.

2. Reka bentuk bahagian idempoten dan status

PUT /uploads/{id}/parts/{n} membawa panjang bahagian dan checksum. Perkhidmatan menyimpan metadata sah terkini untuk uploadId + partNumber; pendua dengan digest yang sama mengembalikan kejayaan, manakala digest yang berbeza mengembalikan konflik dan meminta klien memuat semula status. GET /uploads/{id} mengembalikan bahagian yang disahkan, saiz dan tindakan seterusnya tanpa mendedahkan data penyewa lain.

3. Sahkan integriti data

Sahkan panjang dan checksum bahagian pada setiap muat naik, kemudian sahkan nombor bahagian yang berturutan, jumlah panjang dan digest keseluruhan objek semasa penyempurnaan. Amazon S3 mendokumenkan checksum bahagian atau komposit; ketidakpadanan mesti menghalang penerbitan. Simpan algoritma dan pengekodan dalam sesi supaya klien dan perkhidmatan tidak mentafsir digest secara berbeza.

4. Selesaikan dan kawal keterlihatan

POST /uploads/{id}/complete membawa senarai bahagian yang tersusun dan digest keseluruhan fail pilihan. Penyempurnaan adalah idempoten: senarai yang sama mengembalikan versi objek yang sama, manakala senarai yang bercanggah akan ditolak. Hanya selepas storan memasang dan mengesahkan objek, rekod pangkalan data beralih daripada UPLOADING kepada READY; operasi baca tidak sekali-kali mendedahkan objek separa.

5. Batal, tamat tempoh dan bersihkan bahagian terbiar

Klien boleh membatalkan secara jelas. Pekerja mengimbas sesi yang tamat tempoh, memanggil operasi batalkan storan dan mengalih keluar bahagian yang dimuat naik. Pembersihan itu sendiri adalah idempoten dan boleh dicuba semula, dengan ralat terakhir dan metrik kos direkodkan. S3 menyatakan bahawa bahagian yang tidak lengkap menanggung caj storan, jadi peraturan kitaran hayat ialah jaring keselamatan muktamad, bukan pengganti keadaan aplikasi.

6. Tambah keselamatan, kuota dan keterlihatan (observability)

Setiap operasi memeriksa penyewa, kebenaran objek, keadaan sesi dan julat bahagian. Kelayakan diskopkan kepada sesi semasa dan tamat tempoh dengan cepat. Hadkan sesi aktif, jumlah bait dan saiz bahagian bagi setiap penyewa. Pantau kejayaan sesi, percubaan semula, kegagalan checksum, kelewatan pembersihan dan bait terbiar, dengan amaran yang diasingkan mengikut penyewa.

Jawapan sampel berkualiti tinggi

“Saya akan mencipta sesi dengan POST /uploads, mengesahkan kuota penyewa dan saiz objek, serta mengeluarkan uploadId rawak, saiz bahagian tetap, algoritma checksum dan tempoh tamat 24 jam. Setiap bahagian membawa nombor, panjang dan digest-nya; (uploadId, partNumber) ialah kunci keidempotenan. Pendua dengan digest yang sama mengembalikan hasil sedia ada, manakala digest yang berbeza ditolak. Klien menggunakan titik akhir status untuk mencari bahagian yang hilang. Penyempurnaan membekalkan senarai tersusun dan digest keseluruhan fail; perkhidmatan mengesahkan penomboran, jumlah panjang dan checksum bahagian, kemudian memanggil operasi selesai stor objek. Hanya selepas pemasangan berjaya barulah ia menandakan objek sebagai READY. Penyempurnaan berulang mengembalikan versi yang sama; senarai yang bercanggah tidak mengubah apa-apa. Pekerja pembatalan dan tamat tempoh membatalkan muat naik yang tidak lengkap dengan percubaan semula, mengelakkan caj storan terbiar. Kelayakan diskopkan mengikut penyewa dan sesi, dan laluan penciptaan, bahagian serta penyempurnaan semuanya menguatkuasakan kuota, kebenaran, had kadar dan audit.”

Kesilapan biasa dan penambahbaikan

  • Menjadikan muat naik satu permintaan yang panjang: Gunakan sesi dan bahagian supaya kegagalan rangkaian hanya menjejaskan data yang hilang.
  • Hanya menjejaki bait yang dimuat naik: Jejaki nombor bahagian, digest dan versi untuk mengelakkan penggantian pendua atau tidak mengikut urutan.
  • Menandakan kejayaan sebelum selesai: Pasang dan sahkan di storan terlebih dahulu, kemudian terbitkan objek READY.
  • Mengabaikan kos bahagian yang tamat tempoh: Sediakan pembatalan, pembatalan latar belakang dan pembersihan kitaran hayat storan secara serentak.

Soalan susulan dan jawapan

Bagaimana jika klien memuat naik bahagian yang sama secara serentak?

Sirikan kemas kini metadata mengikut sesi dan nombor bahagian atau gunakan penulisan bersyarat. Pendua dengan digest yang sama mengembalikan kejayaan idempoten; digest berbeza mengembalikan konflik, dan klien memuat semula status sebelum mencuba semula.

Bagaimana jika penyempurnaan tamat masa selepas storan sebenarnya telah selesai?

Kekalkan kunci keidempotenan penyempurnaan dan versi sasaran. Semasa percubaan semula, buat pertanyaan kepada storan dan keadaan setempat terlebih dahulu. Jika senarai sepadan dengan versi yang telah selesai, kembalikan versi tersebut; jika tidak pasti, kekalkan COMPLETING dan biarkan pekerja mendamaikan (reconcile) daripada memasang secara membuta tuli.

Bagaimanakah anda menghalang klien yang berniat jahat daripada memenuhkan storan?

Rizabkan kuota semasa penciptaan sesi dan hadkan sesi aktif, jumlah bait bahagian, keserentakan dan tamat tempoh bagi setiap penyewa. Ikatkan kelayakan bahagian kepada sesi dan julat, batalkan sesi yang tamat tempoh dengan segera, dan beri amaran tentang kadar percubaan semula yang tidak normal.

Patutkah objek dengan kunci yang sama boleh ditulis ganti?

Tetapkan secara lalai kepada versi baharu atau penulisan bersyarat. Jika tulis ganti diperlukan, terima versi sasaran atau syarat If-Match dan kemas kini rujukan secara atomik selepas selesai, supaya muat naik yang perlahan tidak boleh menulis ganti objek yang lebih baharu.

Sumber awam

Soalan berkaitan