Soalan dan Masa Ia Digunakan
API satah kawalan mengendalikan pemeriksaan kesihatan, penulisan pengawal, pertanyaan penyewa dan pemantauan (watch) jangka panjang. Lonjakan trafik atau satu penyewa yang bising boleh memperlahankan setiap permintaan. Reka bentuk kawalan keutamaan dan keadilan, serta terangkan cara klasifikasi, had konkurensi, giliran, had masa tamat dan degradasi berfungsi bersama-sama.
Perkara yang Dinilai oleh Penemu Duga
- Menukar konsep "penting" kepada kelas permintaan yang boleh diaudit dan bukannya keistimewaan pasukan yang kekal.
- Melindungi satah kawalan dengan tempat duduk, giliran dan kuota dan bukannya hanya bergantung pada pengehad kadar masuk (ingress rate limiter).
- Menerangkan keterperincian keadilan, penghunian permintaan jangka panjang, pengasingan penyewa dan degradasi kegagalan.
- Mengesahkan reka bentuk dengan kependaman, kadar penolakan, usia giliran dan masa pemulihan pengawal.
Soalan Penjelasan Sebelum Anda Menjawab
- Permintaan manakah yang merupakan penulisan kritikal keselamatan, dan bacaan atau pemantauan manakah yang boleh ditangguhkan?
- Adakah keadilan dikira mengikut penyewa, identiti, beban kerja atau jenis sumber? Adakah laluan pentadbir kecemasan dibenarkan?
- Adakah anda melindungi pelayan API, storan hiliran, atau kedua-duanya?
- Adakah permintaan panjang menggunakan berbilang tempat duduk, dan bagaimanakah tempat duduk dilepaskan semasa pemutusan sambungan?
- Bolehkah beban lampau mengembalikan 429, atau adakah sistem mesti mengekalkan kadar kejayaan minimum dan isyarat percubaan semula?
Kerangka Jawapan 30 Saat
Saya akan memetakan permintaan mengikut identiti, kaedah dan sumber ke dalam aliran keutamaan yang terikat, kemudian memberikan setiap aliran tempat duduk konkurensi dan giliran yang adil. Keutamaan tinggi mendapat kapasiti garis dasar yang terikat; keutamaan rendah beratur atau ditolak di bawah tekanan. Permintaan panjang diklasifikasikan secara berasingan dan dicaj untuk penghunian berterusan. Setiap penolakan membawa isyarat percubaan semula yang boleh diambil tindakan. Saya akan menetapkan pintu pelancaran berdasarkan kependaman p99, usia giliran, kadar 429, ketepuan hiliran dan masa pemulihan untuk pengawal kritikal.
Penyelaman Mendalam Langkah demi Langkah
Langkah 1: Bina kelas permintaan yang boleh dijelaskan
Klasifikasikan daripada identiti yang boleh disahkan, kaedah HTTP, sumber sasaran dan status jangka panjang. Jangan benarkan klien menghantar medan "keutamaan tinggi" sewenang-wenangnya. Asingkan penulisan pengawal, degupan jantung nod, pertanyaan pentadbir dan senarai pukal ke dalam aliran yang berbeza, dan log peraturan yang sepadan.
Langkah 2: Modelkan kapasiti sebagai tempat duduk
Tempat duduk mewakili kapasiti perkhidmatan serentak dan bukannya hanya jumlah permintaan. Bacaan pantas mungkin menggunakan satu tempat duduk; pertanyaan perlahan atau pemantauan mungkin memerlukan lebih banyak. Lepaskan tempat duduk apabila selesai atau dibatalkan. Berikan setiap keutamaan had nominal sambil mengekalkan had siling tempat duduk global supaya garis dasar tidak melebihi kapasiti selamat.
Langkah 3: Gunakan giliran adil dalam setiap keutamaan
Dalam sesuatu keutamaan, gunakan giliran adil berwajaran (weighted fair queue) berpandukan identiti penyewa atau aliran supaya satu penyewa tidak dapat memenuhi kelas tersebut. Hantar aliran tidak kosong yang berada di bawah had semasanya. Peningkatan usia (aging) boleh meningkatkan wajaran permintaan yang ditangguhkan berulang kali, tetapi ia tidak boleh memintas had siling tempat duduk global.
Langkah 4: Kendalikan permintaan panjang dan kebergantungan
Berikan pemantauan dan penjejakan log belanjawan berasingan, tempoh maksimum dan pembatalan degupan jantung. Letakkan sekatan (bulkheads) konkurensi bebas di sekeliling storan, cache dan perkhidmatan luaran; giliran masuk tidak boleh memindahkan tekanan tanpa had ke hiliran. Cuba semula hanya kegagalan yang boleh dicuba semula, dengan backoff eksponen dan jitter.
Langkah 5: Tentukan tindakan beban lampau
Apabila tekanan meningkat, jedakan kerja baharu berkeutamaan rendah, kemudian hadkan senarai pukal dan penapis yang mahal, dan akhirnya kembalikan 429 apabila permintaan tidak dapat beratur. Sertakan petunjuk menunggu yang jelas dalam respons; klien masih memerlukan had percubaan semula, jitter dan tarikh akhir (deadlines). Jika penulisan kritikal tidak boleh digugurkan, letakkannya dalam giliran tahan lama dan kembalikan ID operasi yang boleh ditanya.
Langkah 6: Perhatikan keadilan, bukan hanya kependaman purata
Pantau p50, p99, usia giliran, penghunian tempat duduk, 429, pembatalan dan ralat hiliran mengikut keutamaan, penyewa dan jenis permintaan. Berikan amaran tentang masa menunggu maksimum, kejayaan penulisan kritikal, masa pemulihan dan jurang perkhidmatan antara penyewa. Ujian beban harus merangkumi lonjakan satu penyewa, kehabisan tempat duduk oleh permintaan panjang, salah klasifikasi dan pemulihan pengawal.
Langkah 7: Berkembang dan buat pengunduran (rollback) dengan selamat
Catat padanan klasifikasi baharu dalam mod pemerhatian sahaja sebelum menguatkuasakan had. Buat versi dan audit konfigurasi, serta kekalkan laluan operasi yang dikekang. Apabila tempat duduk atau keutamaan berubah, bandingkan kapasiti hiliran dan taburan giliran sejarah; jangan hanya bergantung pada metrik lapisan API.
Contoh Jawapan Berkualiti Tinggi
Saya akan memodelkan kapasiti satah kawalan sebagai kolam tempat duduk global. Permintaan dipetakan kepada aliran keutamaan menggunakan atribut identiti, kaedah, sumber dan jangka panjang. Penulisan pengawal dan degupan jantung nod mendapat tempat duduk garis dasar, tetapi jumlah garis dasar kekal di bawah kapasiti selamat. Bacaan penyewa biasa berkongsi giliran adil berwajaran. Pemantauan dicaj secara berasingan dan mempunyai tempoh maksimum; pembatalan serta-merta melepaskan tempat duduk. Semasa beban lampau, jedakan bacaan pukal, hadkan penapis mahal dan kembalikan 429 dengan petunjuk menunggu apabila kerja tidak dapat beratur. Penulisan yang mesti selesai pergi ke giliran yang tahan lama. Sebelum penguatkuasaan, saya akan mengukur padanan klasifikasi dan usia giliran penyewa; selepas pelancaran, kejayaan penulisan kritikal, p99, 429, ketepuan hiliran dan masa pemulihan menjadi pintu pengunduran (rollback gates).
Kesilapan Biasa
- Menetapkan had QPS global sahaja, membolehkan permintaan panjang menghabiskan konkurensi.
- Memberikan pentadbir atau penyewa keutamaan tanpa had dan mewujudkan kebuluran (starvation) yang tidak boleh diaudit.
- Mengenakan caj hanya mengikut kiraan permintaan tanpa memodelkan bacaan, senarai dan pemantauan secara berbeza.
- Membuat setiap klien mencuba semula 429 serta-merta dan mewujudkan ribut percubaan semula yang disegerakkan.
- Hanya melihat kependaman purata dan terlepas pandang masa menunggu maksimum bagi giliran berkeutamaan rendah.
- Menukar had tanpa ujian canary, versi atau laluan pengunduran.
Soalan Susulan dan Maklum Balas
Susulan 1: Mengapa tidak menggunakan token bucket sahaja?
Token bucket mengehadkan kadar ketibaan tetapi tidak menyatakan kos konkurensi yang berbeza, penghunian permintaan panjang atau keadilan penyewa. Ia boleh menjadi satu lapisan masuk, tetapi tempat duduk dan giliran masih diperlukan.
Susulan 2: Bolehkah keutamaan tinggi menyebabkan keutamaan rendah kebuluran (starve)?
Ya, melainkan keutamaan tinggi juga mempunyai had dan sistem menguatkuasakan bahagian yang dikhaskan, perkhidmatan berturut-turut maksimum atau penuaan (aging). Laluan kecemasan mesti kekal diaudit dan terikat dengan kapasiti.
Susulan 3: Berapa banyak tempat duduk yang patut digunakan oleh pemantauan (watch)?
Tiada pemalar sejagat. Ukur sambungan, kadar peristiwa, kos pensirilan dan tekanan pertanyaan hiliran, pilih garis dasar yang konservatif dan tentukur dengan ujian beban. Had masa tamat dan pemutusan sambungan mesti melepaskan tempat duduk.
Susulan 4: Siapa yang menentukan masa percubaan semula 429?
Pelayan membekalkan petunjuk menunggu minimum berdasarkan pemulihan yang dijangkakan; klien menambah backoff eksponen, jitter dan tarikh akhir. Petunjuk itu bukan jaminan kapasiti, jadi klien masih mengehadkan percubaan.
Susulan 5: Bagaimanakah anda membuktikan keadilan?
Tentukan objektif peringkat penyewa seperti bahagian tempat duduk, usia giliran maksimum dan kadar penyiapan dalam sesuatu keutamaan. Bandingkan taburan semasa lonjakan satu penyewa dan beban bercampur dan bukannya hanya melaporkan min global.
Susulan 6: Bagaimana jika peraturan tersalah mengelaskan penulisan kritikal sebagai keutamaan rendah?
Kekalkan log padanan peraturan dan semakan manusia, serta hantar konfigurasi sebagai artifak yang mempunyai versi. Jika kejayaan penulisan kritikal menurun, undurkan versi klasifikasi serta-merta dan gunakan laluan keselamatan yang dikekang untuk kerja yang beratur.