Operasi pembatasan pada Azure Service Bus

Solusi cloud native memberikan gagasan tentang sumber daya tak terbatas yang dapat diskalakan dengan beban kerja Anda. Meskipun gagasan ini lebih benar di cloud daripada dengan sistem lokal, masih ada batasan yang ada di cloud. Batasan ini dapat menyebabkan pembatasan permintaan aplikasi klien di tingkat standar dan premium seperti yang dibahas dalam artikel ini.

Pembatasan di tingkat standar

Tingkat standar Bus Layanan beroperasi sebagai penyiapan multipenyewa dengan model harga prabayar. Di sini beberapa namespace dalam kluster yang sama berbagi sumber daya yang dialokasikan. Tingkat standar adalah pilihan yang direkomendasikan untuk lingkungan pengembang, lingkungan QA, dan sistem produksi throughput rendah.

Di masa lalu, Bus Layanan memiliki batas pembatasan kasar yang sangat bergantung pada pemanfaatan sumber daya. Namun, ada kesempatan untuk menyempurnakan logika pembatasan dan memberikan perilaku pembatasan yang dapat diprediksi ke semua namespace layanan yang berbagi sumber daya ini.

Dalam upaya untuk memastikan penggunaan dan distribusi sumber daya yang adil di semua namespace layanan standar Bus Layanan yang menggunakan sumber daya yang sama, standar Bus Layanan saat ini menggunakan logika pembatasan berbasis kredit.

Catatan

Penting untuk diperhatikan bahwa pembatasan bukan hal baru di Azure Service Bus, atau layanan native cloud apa pun.

Pembatasan berbasis kredit hanya menyempurnakan cara berbagai namespace berbagi sumber daya di lingkungan tingkat standar multi-penyewa dan dengan demikian memungkinkan penggunaan yang adil oleh semua namespace layanan yang berbagi sumber daya.

Apa itu pembatasan berbasis kredit?

Pembatasan berbasis kredit membatasi jumlah operasi yang dapat dilakukan pada namespace tertentu dalam periode waktu tertentu. Berikut adalah alur kerja untuk pembatasan berbasis kredit.

  • Pada awal setiap periode waktu, Bus Layanan memberikan beberapa kredit ke setiap namespace layanan.
  • Setiap operasi yang dilakukan oleh aplikasi klien pengirim atau penerima dihitung terhadap kredit ini (dan dikurangi dari kredit yang tersedia).
  • Jika kredit habis, operasi berikutnya akan dibatasi hingga awal periode waktu berikutnya.
  • Kredit diisi ulang pada awal periode waktu berikutnya.

Berapa batas kreditnya?

Batas kredit saat ini diatur ke 1000 kredit setiap detik (per namespace). Tidak semua operasi dibuat sama. Berikut adalah biaya kredit dari setiap operasi.

Operasi Biaya kredit
Operasi data (Send, SendAsync, Receive, ReceiveAsync, Peek) 1 kredit per pesan
Operasi manajemen (Create, Read, Update, Delete pada antrean, topik, langganan, filter) 10 kredit

Catatan

Saat mengirim ke topik, setiap pesan dievaluasi terhadap filter sebelum tersedia pada langganan. Setiap evaluasi filter juga dihitung terhadap batas kredit (yaitu, 1 kredit per evaluasi filter).

Bagaimana saya tahu bahwa saya sedang dibatasi?

Ketika permintaan aplikasi klien dibatasi, aplikasi klien menerima respons server berikut.

The request was terminated because the entity is being throttled. Error code: 50009. Please wait 2 seconds and try again.

Bagaimana saya bisa menghindari agar tidak dibatasi?

Dengan sumber daya bersama, penting untuk memberlakukan semacam penggunaan yang adil di berbagai Bus Layanan namespace layanan yang berbagi sumber daya tersebut. Pembatasan memastikan bahwa lonjakan dalam satu beban kerja tidak menyebabkan beban kerja lain pada sumber daya yang sama dibatasi. Seperti disebutkan kemudian dalam artikel, tidak ada risiko untuk dibatasi karena kit pengembangan perangkat lunak klien (SDK) dan penawaran Azure PaaS lainnya memiliki kebijakan coba lagi default yang terpasang di dalamnya. Setiap permintaan yang dibatasi dicoba kembali dengan backoff eksponensial dan akhirnya dilalui ketika kredit diisi ulang.

Dapat dimengerti, beberapa aplikasi dapat sensitif untuk dibatasi. Dalam hal ini, kami sarankan Anda memigrasikan namespace Bus Layanan standar Anda saat ini ke premium. Pada migrasi, Anda dapat mengalokasikan sumber daya khusus ke namespace Bus Layanan Anda dan meningkatkan sumber daya dengan tepat jika ada lonjakan beban kerja Anda dan mengurangi kemungkinan dibatasi. Selain itu, ketika beban kerja Anda berkurang ke tingkat normal, Anda dapat menurunkan skala sumber daya yang dialokasikan ke namespace Anda.

Pembatasan di tingkat premium

Tingkat premium Bus Layanan mengalokasikan sumber daya khusus, dalam hal unit olahpesan, ke setiap penyiapan namespace layanan oleh pelanggan. Sumber daya khusus ini menyediakan throughput dan latensi yang dapat diprediksi dan direkomendasikan untuk sistem throughput tinggi atau tingkat produksi yang sensitif. Selain itu, tingkat premium juga memungkinkan pelanggan untuk meningkatkan kapasitas throughput mereka ketika mereka mengalami lonjakan beban kerja. Untuk informasi selengkapnya, lihat Memperbarui unit olahpesan secara otomatis dari namespace azure Bus Layanan.

Bagaimana cara kerja pembatasan di Azure Service Bus Premium?

Dengan alokasi sumber daya eksklusif untuk tingkat premium, pembatasan murni didorong oleh batasan sumber daya yang dialokasikan ke namespace. Jika jumlah permintaan lebih dari yang dapat dilayankan oleh sumber daya saat ini, maka permintaan dibatasi.

Bagaimana saya tahu bahwa saya sedang dibatasi?

Ada berbagai cara untuk mengidentifikasi pembatasan di tingkat premium Bus Layanan.

  • Permintaan yang Dibatasi muncul pada metrik Permintaan Azure Monitor untuk mengidentifikasi berapa banyak permintaan yang dibatasi.
  • Penggunaan CPU tinggi menunjukkan bahwa alokasi sumber daya saat ini tinggi dan permintaan mungkin dibatasi jika beban kerja saat ini tidak berkurang.
  • Penggunaan Memori Tinggi menunjukkan bahwa alokasi sumber daya saat ini tinggi dan permintaan mungkin dibatasi jika beban kerja saat ini tidak berkurang.

Bagaimana saya bisa menghindari agar tidak dibatasi?

Karena namespace layanan premium Bus Layanan sudah memiliki sumber daya khusus, Anda dapat mengurangi kemungkinan dibatasi dengan meningkatkan jumlah unit olahpesan yang dialokasikan ke namespace Anda jika terjadi (atau antisipasi) lonjakan beban kerja. Untuk informasi selengkapnya, lihat Memperbarui unit olahpesan secara otomatis dari namespace azure Bus Layanan.

Tanya Jawab Umum

Bagaimana pembatasan memengaruhi aplikasi saya?

Ketika permintaan dibatasi, itu menyiratkan bahwa layanan sibuk karena menghadapi lebih banyak permintaan daripada yang diizinkan sumber daya. Jika operasi yang sama dicoba lagi setelah beberapa saat, setelah layanan bekerja melalui beban kerjanya saat ini, maka permintaan dapat dipenuhi.

Karena pembatasan adalah perilaku yang diharapkan dari layanan asli cloud apa pun, logika coba lagi dibangun ke dalam Bus Layanan SDK itu sendiri. Defaultnya diatur untuk mencoba kembali secara otomatis dengan back-off eksponensial untuk memastikan bahwa kami tidak memiliki permintaan yang sama yang dibatasi setiap kali. Logika coba lagi default berlaku untuk setiap operasi.

Catatan

Kode pemrosesan pesan yang memanggil layanan pihak ketiga lainnya juga dapat dibatasi oleh layanan lain tersebut. Untuk informasi selengkapnya tentang cara menangani skenario ini, lihat dokumentasi tentang Pola Pembatasan.

Apakah pembatasan mengakibatkan kehilangan data?

Azure Bus Layanan dioptimalkan untuk persistensi. Kami memastikan bahwa semua data yang dikirim ke Bus Layanan berkomitmen untuk penyimpanan sebelum layanan mengakui keberhasilan permintaan.

Setelah permintaan berhasil diakui oleh Bus Layanan, itu menyiratkan bahwa Bus Layanan telah berhasil memproses permintaan. Jika Bus Layanan mengembalikan kegagalan, maka itu menyiratkan bahwa Bus Layanan belum dapat memproses permintaan dan aplikasi klien harus mencoba kembali permintaan.

Namun, ketika permintaan dibatasi, layanan menyiratkan bahwa permintaan tidak dapat menerima dan memproses permintaan sekarang karena keterbatasan sumber daya. Ini tidak menyiratkan kehilangan data apa pun karena Bus Layanan belum melihat permintaan. Dalam hal ini, mengandalkan kebijakan coba lagi default dari SDK Bus Layanan memastikan bahwa permintaan akhirnya diproses.

Untuk informasi selengkapnya dan contoh penggunaan pesan Azure Service Bus, lihat topik lanjutan berikut ini: