Обмеження Частоти Запитів важливий механізм контролю за ресурсами, його використовують для підтримки необхідного рівня роботи (і обмеження навантаження на сервера з сторонніх джерел). Реалізація обмежувача в Go є можливою за допомоги горутин, каналів та маятників. |
|
|
|
|
|
|
|
Розглянемо одну з реалізацій обмежувача частоти запитів.
Припустимо - нам необхідно обмежити обробку
вхідних запитів, отож, ми будемо працювати з ними (запитами)
через одноіменний канал ( |
|
Канал |
|
Тут відбувається блокування на отримання з каналу
|
|
Можливо, ми захочемо дозволяти невеликі “навали” запитів,
в цілому притримуючись нашої стандартної схеми обмежень.
Досягнути цього ми можемо створивши буфер
в нашому каналі “обмеження”. Канал |
|
Заповнено канал значеннями, для імітування “напливу”. |
|
Кожні 200 мілісекунд ми спробуємо додати значення в
|
|
Ми симулюємо 5 вхідних подій, 3 з яких
- не будуть обмежені у виконанні, а все тому,
що вони отримали перевагу від буферизованого
каналу |
|
Запускаючи нашу програму - ми бачимо першу партію запитів, які обробляються кожні 200 мілісекунд. |
|
Друга ж партія, представляє собою три запити що не обмежуються (це “навала” - дозволена кількість без обмеження) та ще 2 - додаткових, що обмежені 200 мілісекундними інтервалами. |
|
Наступний приклад: Атомарні Лічильники.