Topik temu duga representatif

Temu duga reka bentuk sistem: mereka bentuk perkhidmatan tempahan kuota berbilang penyewa (multi-tenant)

Reka bentuk sistemSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Pelbagai produk berkongsi kapasiti storan atau permintaan bagi setiap penyewa. Reka bentuk perkhidmatan kuota dengan reserve, commit, release, dan pemulihan tamat tempoh, serta terangkan konkurensi, kegagalan, tingkah laku pelbagai rantau, dan penyelarasan bil.

Makluman dan skop

Perkhidmatan kuota menjawab sama ada jumlah sumber boleh dituntut sekarang; ia tidak memindahkan fail atau melaksanakan operasi perniagaan. Reka bentuk mesti memisahkan kapasiti autoritatif, tempahan sementara, dan penggunaan akhir sambil mengekalkan keadilan infrastruktur kongsi.

Perkara yang diuji oleh penemu duga

  • Membezakan had kadar (rate limits), kuota kapasiti, tempahan, dan commit.
  • Mencegah lebihan jualan (oversell) dengan kemas kini serentak dan API idempoten.
  • Memulihkan tempahan yang tamat tempoh selepas pemanggil terhenti (crash) dan mencuba semula.
  • Menilai keadilan penyewa, kunci hangat (hot keys), ketekalan serantau, dan degradasi.

Soalan penjelasan untuk ditanya

Jelaskan dimensi sumber (permintaan, bait, atau tugas serentak), skop (penyewa, projek, pengguna, atau titik akhir), peraturan lonjakan (burst) dan hierarki, jangka hayat tempahan, ketekalan pengebilan, dan sama ada permintaan rentas rantau boleh menggunakan satu pihak berkuasa (authority).

Jawapan 30 saat

Saya akan mengekalkan mesin keadaan autoritatif bagi setiap kunci sumber dengan limit, committed, dan reserved, mendedahkan API reserve, commit, release, dan query. Reserve melaksanakan semakan bersyarat atomik dan membawa reservation_id idempoten serta masa tamat tempoh. Commit menukar tempahan kepada penggunaan; release atau tamat tempoh mengembalikannya. Lejar peristiwa tak boleh ubah (immutable event ledger) dan penyelarasan membaiki hanyutan (drift), manakala peraturan penghalaan dan keadilan menghalang penyewa berbeban tinggi daripada meminggirkan penyewa lain.

Analisis mendalam langkah demi langkah

1. Tentukan sempadan keadaan dan API

Setiap rekod kuota mempunyai kunci sumber, had (limit), jumlah terkomited, jumlah ditempah, versi, dan masa kemas kini. reserve mengembalikan reservation_id, jumlah tersedia, dan masa tamat tempoh; commit hanya boleh menggunakan tempahannya; release boleh diulang; query mengembalikan baki kapasiti dan kesegaran. Pemanggil menempah sebelum menulis sumber, melakukan commit selepas berjaya, dan melepaskan (release) apabila gagal atau dibatalkan.

2. Cegah lebihan jualan di bawah konkurensi

Kemas kini kunci sumber mestilah satu transaksi atomik atau operasi storan boleh dilinearkan: buat tempahan hanya apabila committed + reserved + amount <= limit. Mengulang kunci keidempotanan mengembalikan hasil asal; menukar parameternya akan ditolak. Kunci hangat boleh dipecahkan (shard) mengikut penyewa atau sumber, tetapi reka bentuk mesti menyatakan sama ada lebihan sementara dibenarkan dan bagaimana pecahan diselaraskan.

3. Tuntut semula tempahan yang bocor

Pemanggil boleh mengalami kegagalan selepas menempah, jadi simpan masa tamat tempoh dan tuntut semula melalui pengimbas atau giliran tertangguh (delayed queue). Tangani perebutan antara pemulihan dan commit dengan syarat keadaan: tempahan yang telah di-commit tidak boleh dilepaskan, dan tempahan yang telah dilepaskan tidak boleh di-commit. Jejaki lat masa tuntutan semula (reclaim lag) supaya pembersihan yang tertangguh tidak disalah anggap sebagai kapasiti yang tersedia.

4. Kendalikan kolam kongsi dan keadilan

Kolam kongsi boleh mempunyai kekangan global, penyewa, dan projek. Semak kekangan tersebut dalam susunan tetap dan dalam satu transaksi. Peruntukkan lonjakan mengikut kuota penyewa, keutamaan, atau keadilan berwajaran (weighted fairness) supaya seorang penyewa tidak dapat menggunakan keseluruhan kolam. Kembalikan baki kapasiti, masa percubaan semula, atau status giliran untuk mengurangkan percubaan semula secara membuta tuli.

5. Reka bentuk kegagalan, rantau, dan penyelarasan

Jika pihak berkuasa tidak tersedia, tolak tempahan berisiko tinggi secara konservatif daripada membelanjakan kapasiti yang boleh dibilkan daripada keadaan yang tidak diketahui; bacaan berisiko rendah boleh mengembalikan anggaran bertanda masa. Tetapkan penyewa pada rantau asal (home region), atau tentukan sempadan lebihan tempatan yang jelas dan selaraskan secara tidak segerak. Tulis setiap reserve, commit, dan release ke lejar tak boleh ubah, bandingkannya dengan penggunaan sumber sebenar, dan baiki hanyutan dengan tugas pampasan idempoten.

Contoh jawapan yang mantap

Saya akan menjelaskan sumber, hierarki penyewa, jangka hayat tempahan, dan keperluan ketekalan. Perkhidmatan ini menyimpan limit, committed, reserved, dan version bagi setiap kunci sumber serta mendedahkan operasi reserve, commit, release, dan query berasaskan reservation_id. Reserve menyemak jumlah secara atomik; percubaan semula mengembalikan hasil yang sama. Pemanggil melakukan commit selepas penulisan berjaya, melepaskan apabila gagal, dan penuntut semula (reclaimer) mengendalikan tamat tempoh. Kolam kongsi menyemak had global dan penyewa bersama-sama serta menggunakan penghalaan tetap, keutamaan, atau keadilan berwajaran. Sekiranya pihak berkuasa gagal, penulisan berisiko tinggi gagal ditutup (fail closed). Penempatan rentas rantau menggunakan rantau asal penyewa atau lebihan terikat yang jelas. Lejar tak boleh ubah dan penyelarasan berkala memastikan kuota yang dijejaki sejajar dengan penggunaan sebenar.

Kesilapan biasa

  • Menganggap kuota sebagai pengehad kadar (rate limiter) yang hanya mengembalikan 429.
  • Membaca baki kapasiti dan menulis kemudian tanpa syarat atomik.
  • Meniadakan identiti tempahan, tamat tempoh, dan semantik keidempotanan.
  • Membiarkan pemanggil yang terhenti memegang kapasiti selama-lamanya.
  • Mengabaikan kolam kongsi, hierarki, dan keadilan jiran bising (noisy-neighbor).
  • Menggunakan pendekatan fail open semasa gangguan storan dan membetulkan pembilang secara manual selepas itu.

Soalan susulan dan jawapan

Pemanggil tamat masa sebelum commit. Cuba semula atau tempah lagi?

Buat pertanyaan (query) atau cuba semula commit dengan reservation_id yang sama terlebih dahulu. Cipta tempahan baharu hanya selepas mengesahkan tempahan lama telah dilepaskan atau tamat tempoh.

Bagaimana jika beberapa produk berkongsi satu kuota penyewa?

Anggap penyewa sebagai induk kongsi dan produk sebagai kekangan anak, menyemak kedua-duanya dalam satu transaksi. Laporkan lapisan mana yang kehabisan supaya klien boleh beratur atau menurunkan taraf operasi (degrade).

Bolehkah rantau membuat tempahan secara serentak?

Untuk kapasiti pengebilan yang tidak boleh terlebih jual, gunakan satu pihak berkuasa atau penyelarasan yang kukuh. Jika lebihan terikat boleh diterima, berikan setiap rantau had pinjaman dan selaraskan hutang secara eksplisit.

Bagaimana anda mengesan hanyutan (drift) kuota?

Bandingkan peristiwa lejar dan imbasan sumber dengan penggunaan terkomited, ditempah, dan sebenar mengikut penyewa dan jenis sumber. Berikan amaran tentang perbezaan dan jalankan tugas pampasan yang boleh diaudit dan idempoten.

Sumber awam

Soalan berkaitan

Alat temu duga berkaitan

Gunakan Jawab untuk jawapan reka bentuk sistem

Jelaskan keperluan terlebih dahulu, kemudian teruskan dengan skala, seni bina, pilihan komponen dan pertukaran (trade-off).

Lihat alat