Di bawah akses serentak yang tinggi, seperti promosi e-dagang, trafik terus mengalir masuk, dan kekerapan panggilan bersama antara perkhidmatan tiba-tiba meningkat, menyebabkan beban sistem menjadi terlalu tinggi Pada masa ini, kestabilan perkhidmatan yang bergantung kepada sistem Kesan pada sistem adalah sangat besar, dan terdapat banyak faktor tidak pasti yang menyebabkan runtuhan salji, seperti gangguan sambungan rangkaian, masa berhenti perkhidmatan, dsb. Secara amnya, komponen tahan kerosakan perkhidmatan mikro menyediakan pengehadan semasa, pengasingan, degradasi, pemutus litar dan cara lain, yang boleh melindungi sistem perkhidmatan mikro kami dengan berkesan. Artikel ini terutamanya membincangkan tentang pengehadan semasa.
Penghadan semasa bermaksud mengehadkan aliran maksimum untuk mengelakkan kekerapan operasi daripada melebihi had yang ditetapkan. Keselarasan maksimum yang boleh disediakan oleh sistem adalah terhad, dan terdapat terlalu banyak permintaan pada masa yang sama, yang memerlukan pendikitan, seperti jualan kilat dan promosi utama Apabila sejumlah besar permintaan membanjiri serta-merta, pelayan tidak dapat menyampaikannya. jadi ia mesti pendikit. Pengehadan kadar melindungi perkhidmatan daripada penggunaan berlebihan secara tidak sengaja atau berniat jahat dengan mengehadkan bilangan permintaan yang boleh mencapai API dalam tempoh masa tertentu. Tanpa mengehadkan kadar, mana-mana pengguna boleh membedil pelayan anda dengan permintaan, yang membawa kepada situasi di mana pengguna lain mati kelaparan.
Kenapa ada had laju?
- Mencegah kebuluran sumber: Sebab paling biasa untuk mengehadkan kadar adalah untuk meningkatkan ketersediaan perkhidmatan berasaskan API dengan mengelakkan kebuluran sumber. Jika anda menggunakan pengehadan kadar, anda boleh menghalang serangan penafian perkhidmatan (doS) berasaskan beban. Walaupun seorang pengguna membombardir API dengan banyak permintaan, pengguna lain tidak akan kelaparan.
- Keselamatan: Penghadan kadar menghalang serangan kekerasan terhadap ciri intensif keselamatan seperti log masuk, kod promo dan banyak lagi. Bilangan permintaan untuk fungsi ini adalah terhad pada peringkat pengguna, jadi algoritma brute force tidak akan berfungsi dalam senario ini.
- Cegah Kos Operasi: Dalam kes penskalaan automatik sumber dalam model bayar setiap guna, pengehadan kadar membantu mengawal kos operasi dengan meletakkan had atas maya pada pengembangan sumber. Tanpa pengehadan kadar, sumber boleh berskala secara tidak seimbang, mengakibatkan bil eksponen.
Had Kadar Dasar Had kadar boleh digunakan pada parameter berikut:
- Pengguna: Hadkan bilangan permintaan yang dibenarkan kepada pengguna dalam tempoh masa tertentu. Pengehadan kadar berasaskan pengguna ialah salah satu bentuk pengehadan kadar yang paling biasa dan intuitif.
- Concurrency: Ini mengehadkan bilangan sesi selari yang boleh dibenarkan oleh pengguna dalam jangka masa tertentu. Mengehadkan bilangan sambungan selari juga membantu mengurangkan serangan DDOS.
- Lokasi/ID: Ini membantu dalam menjalankan kempen berasaskan lokasi atau berfokuskan demografi. Permintaan yang tidak datang daripada demografi sasaran boleh dikurangkan untuk meningkatkan ketersediaan di kawasan sasaran
- Pelayan: Pengehadan kadar berasaskan pelayan ialah strategi khusus. Ini biasanya digunakan apabila pelayan tertentu memerlukan kebanyakan permintaan, iaitu, pelayan sangat digabungkan dengan fungsi tertentu
Seterusnya, kami akan memperkenalkan empat algoritma pengehad arus biasa
1. Algoritma baldi bocor
idea algoritma baldi bocor , ialah algoritma mudah dan intuitif, iaitu baldi bocor dengan kapasiti tetap yang mengalir keluar titisan air pada kadar tetap yang tetap. Jika baldi kosong, tiada titisan air yang perlu mengalir. Air boleh mengalir ke dalam baldi yang bocor pada sebarang kadar. Jika titisan air yang masuk melebihi kapasiti baldi, titisan air yang masuk melimpah (dibuang), manakala kapasiti baldi bocor kekal tidak berubah.
Kelebihan algoritma ini ialah ia melancarkan letusan permintaan dan memprosesnya pada kadar yang tetap. Ia juga mudah untuk dilaksanakan pada pengimbang beban dan cekap memori untuk setiap pengguna. Mengekalkan trafik hampir seragam yang berterusan ke pelayan tanpa mengira bilangan permintaan.
Kelemahannya ialah letusan permintaan boleh mengisi baldi, membawa kepada kebuluran permintaan baharu. Ia juga tidak menjamin bahawa permintaan akan diselesaikan dalam masa tertentu.
Kelebihan:
Trafik lancar. - Oleh kerana algoritma baldi bocor memproses permintaan pada kadar tetap, ia boleh melicinkan dan membentuk trafik dengan berkesan serta mengelakkan letusan dan turun naik trafik (serupa dengan kesan pencukuran puncak dan mengisi lembah baris gilir mesej).
Elakkan beban berlebihan. - Apabila permintaan masuk melebihi kapasiti baldi, permintaan boleh dibuang terus untuk mengelakkan beban sistem.
Kelemahan:
-
Tidak boleh mengendalikan trafik pecah: Memandangkan kelajuan eksport baldi bocor ditetapkan, ia tidak dapat mengendalikan trafik pecah. Contohnya, permintaan tidak boleh diproses dengan lebih pantas walaupun ketika trafik lancar.
-
Kemungkinan kehilangan data: Jika trafik masuk terlalu besar dan melebihi kapasiti baldi, maka beberapa permintaan perlu dibuang. Ini mungkin menjadi masalah dalam beberapa senario di mana permintaan yang hilang tidak boleh diterima. Algoritma Baldi Token Maksimum b token boleh disimpan dalam baldi Apabila baldi penuh, token yang baru ditambah akan dibuang atau ditolak. Apabila paket bersaiz n bait tiba, n token dikeluarkan daripada baldi dan paket dihantar ke rangkaian. Jika terdapat kurang daripada n token dalam baldi, token tidak akan dipadamkan dan paket akan dihadkan aliran (sama ada dibuang atau penimbal untuk menunggu). Prinsip mengehadkan arus baldi token adalah seperti yang ditunjukkan dalam rajah.
Baldi token pada pelayan pengehad semasa boleh melaraskan kelajuan menjana token dan kapasiti baldi berdasarkan prestasi perkhidmatan dan tempoh masa sebenar. Apabila kadar perlu dinaikkan, kadar token yang dimasukkan ke dalam baldi boleh dinaikkan atas permintaan
Kadar di mana token dijana adalah malar, manakala kadar permintaan dibuat untuk mendapatkan token tidak terhad. Ini bermakna apabila berhadapan dengan trafik besar serta-merta, algoritma boleh memperoleh sejumlah besar token dalam tempoh masa yang singkat, dan proses mendapatkan token tidak menggunakan banyak sumber
Apabila setiap permintaan baharu tiba di pelayan , ia akan dilaksanakan Dua operasi:
Dapatkan Token
: Dapatkan bilangan token semasa untuk pengguna ini. Jika ia lebih besar daripada had yang ditetapkan, permintaan akan digugurkan.
- Token Kemas Kini: Jika token yang diperoleh kurang daripada had tempoh d, terima permintaan dan lampirkan token.
- Algoritma adalah cekap memori kerana kami menjimatkan jumlah data yang lebih sedikit bagi setiap pengguna untuk aplikasi kami. Masalahnya di sini ialah ia boleh membawa kepada keadaan perlumbaan dalam persekitaran teragih. Ini berlaku apabila dua permintaan daripada dua pelayan aplikasi berbeza cuba mendapatkan token pada masa yang sama. Kelebihan:
boleh mengendalikan trafik pecah
: Algoritma baldi token boleh mengendalikan trafik pecah. Apabila baldi penuh, permintaan boleh diproses pada kelajuan maksimum. Ini berguna untuk aplikasi yang perlu mengendalikan lalu lintas pecah.
-
Hadkan kadar purata: Dalam jangka panjang, kadar pemindahan data akan dihadkan kepada kadar purata yang telah ditetapkan (iaitu kadar di mana token dijana).
-
Fleksibiliti: Berbanding dengan algoritma baldi bocor, algoritma baldi token memberikan fleksibiliti yang lebih besar. Sebagai contoh, kadar token dijana boleh dilaraskan secara dinamik.
-
Kelemahan: Boleh menyebabkan beban berlebihan
: Jika token dijana terlalu cepat, ia boleh menyebabkan sejumlah besar trafik pecah, yang mungkin membebankan rangkaian atau perkhidmatan.
-
Memerlukan ruang storan: Baldi token memerlukan sejumlah ruang storan untuk menyimpan token, yang mungkin menyebabkan pembaziran sumber memori.
-
Pelaksanaannya sedikit rumit: Berbanding dengan algoritma kaunter, pelaksanaan algoritma baldi token adalah lebih kompleks sedikit.
-
3. Algoritma tetingkap masa tetap membenarkan bilangan permintaan tertentu untuk masuk dalam tetingkap masa tetap. Jika melebihi kuantiti, ia akan ditolak atau beratur untuk menunggu tempoh masa seterusnya. Pengehadan arus kaunter ini dilaksanakan dengan mengehadkan dalam selang masa. Jika pengguna menghantar permintaan sebelum tamat selang sebelumnya (tetapi tidak melebihi had) dan juga menghantar permintaan pada permulaan selang semasa (juga tidak melebihi had), maka permintaan ini akan menjadi perkara biasa untuk mereka. selang masing-masing. Walau bagaimanapun, apabila permintaan melebihi had sistem semasa tempoh masa kritikal, ia boleh menyebabkan beban sistem
Disebabkan kecacatan titik kritikal masa algoritma kaunter, ia terdedah kepada serangan dalam tempoh masa yang sangat singkat sekitar titik kritikal masa. Sebagai contoh, ia ditetapkan untuk meminta antara muka tertentu sehingga 100 kali seminit Contohnya, tiada permintaan data dalam tempoh masa 12:00:00-12:00:59, tetapi terdapat permintaan serentak secara tiba-tiba. tempoh masa 12:00:59-12:01:00 100 permintaan, dan kemudian memasuki kitaran pengiraan seterusnya, kaunter dikosongkan, dan terdapat 100 permintaan antara 12:01:00-12:01:01. Dalam erti kata lain, sekitar titik kritikal masa, mungkin terdapat dua kali lebih banyak permintaan daripada ambang pada masa yang sama, menyebabkan beban permintaan pemprosesan latar belakang, mengakibatkan keupayaan operasi sistem tidak mencukupi, malah menyebabkan sistem ranap.
Kelemahan:
- Had semasa tidak cukup lancar. Contohnya: had semasa ialah 3 sesaat, dan 3 permintaan dihantar dalam milisaat pertama Jika had semasa dicapai, semua permintaan untuk baki masa tetingkap akan ditolak, mengakibatkan pengalaman buruk.
- Tidak boleh menangani isu sempadan tingkap. Oleh kerana kawalan aliran dilakukan dalam tetingkap masa tertentu, kesan sempadan tetingkap mungkin berlaku, iaitu, sebilangan besar permintaan mungkin dibenarkan untuk melepasi sempadan tetingkap masa, mengakibatkan trafik pecah.
Contohnya: had semasa ialah 3 sesaat, 3 permintaan dihantar dalam milisaat terakhir saat pertama dan 3 permintaan dihantar dalam milisaat pertama saat kedua. Enam permintaan telah diproses dalam dua milimeter ini, tetapi had semasa tidak dicetuskan. Jika terdapat sesak trafik, ia boleh mengatasi pelayan.
4. Algoritma tetingkap masa gelongsor
Algoritma tetingkap gelongsor membahagikan tempoh masa tetap dan menggerakkannya dengan masa titik masa dan mengulanginya secara berterusan boleh mengelakkan masalah titik kritikal kaunter.
Algoritma tetingkap gelongsor dengan berkesan boleh mengelakkan masalah titik kritikal masa dalam algoritma kaunter, tetapi masih terdapat konsep segmen masa. Pada masa yang sama, operasi mengira algoritma tetingkap gelongsor juga lebih memakan masa daripada algoritma tetingkap masa tetap.
Kelemahan: Masih ada masalah had semasa tidak cukup lancar. Contohnya: had semasa ialah 3 sesaat, dan 3 permintaan dihantar dalam milisaat pertama Jika had semasa dicapai, semua permintaan dalam masa tetingkap yang tinggal akan ditolak, mengakibatkan pengalaman yang buruk.
Ringkasan
Memperkenalkan empat algoritma pengehad semasa yang biasa digunakan: algoritma tetingkap tetap, algoritma tetingkap gelongsor, algoritma baldi bocor dan algoritma baldi token. Setiap algoritma mempunyai ciri tersendiri dan senario yang boleh digunakan Mari kita ringkaskan dan bandingkannya di bawah.
-
Algoritma Token Bucket boleh melancarkan trafik dan mengendalikan trafik pecah, dan sesuai untuk senario di mana trafik pecah perlu diproses. Kelebihan
-
Algoritma Baldi Bocor ialah pemprosesan trafik lebih lancar, tetapi ia tidak dapat menampung trafik pecah dan sesuai untuk senario yang memerlukan trafik lancar.
-
Algoritma tetingkap tetap adalah mudah untuk dilaksanakan, tetapi had semasa tidak cukup lancar dan mempunyai masalah sempadan tingkap Ia sesuai untuk senario yang memerlukan pelaksanaan mudah had semasa.
-
Algoritma tetingkap gelongsor menyelesaikan masalah sempadan tingkap, tetapi masih terdapat masalah kelancaran yang tidak mencukupi dalam pengehadan semasa Ia sesuai untuk senario di mana kadar permintaan purata perlu dikawal.
Atas ialah kandungan terperinci Kuasai empat algoritma pengehad semasa yang biasa digunakan dan anda pasti akan lulus temu duga. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!