Быстрые ссылки:
Введение:
Привет, энтузиасты открытого исходного кода и поклонники Go! Я вернулся с кратким обзором моего проекта с открытым исходным кодом ThrottleX, распределенного ограничителя скорости для API. Я все еще новичок в мире открытого исходного кода, поэтому всегда буду рад вашим советам! ?
ThrottleX создан, чтобы помочь вам эффективно управлять трафиком API, обеспечивая бесперебойную и справедливую работу вашей системы. ThrottleX поможет вам предотвратить злоупотребления или справиться с высокой нагрузкой. Давайте рассмотрим некоторые алгоритмы ограничения скорости, которые делают ThrottleX мощным. ?
ThrottleX включает в себя три основных алгоритма, которые помогут вам управлять трафиком API:
Как это работает: представьте, что вы делите время на фиксированные интервалы. В течение каждого интервала вы разрешаете фиксированное количество запросов — скажем, 100 запросов в минуту. После закрытия окна счетчик сбрасывается.
Сценарий использования: отлично подходит для предсказуемых моделей трафика, но будьте осторожны с «проблемой границы», когда многие запросы в конце окна могут обойти предполагаемое ограничение скорости.
Как это работает: это похоже на скользящее среднее — вместо полного сброса в конце каждого окна ограничение скорости «скользит» во времени, обеспечивая более плавное управление.
Сценарий использования: идеально подходит для предотвращения всплесков нагрузки и более равномерного распределения запросов.
Как это работает: представьте себе корзину, которая постоянно наполняется токенами. Запросы потребляют токены, и если корзина пуста, запросы блокируются до тех пор, пока она не пополнится.
Сценарий использования: идеально подходит для разрешения внезапных всплесков трафика при накоплении токенов.
Вот простой пример использования ограничителя скорости фиксированного окна:
package main import ( "github.com/neelp03/throttlex/ratelimiter" "github.com/neelp03/throttlex/store" "time" "fmt" ) func main() { // Initialize an in-memory store and a Fixed Window rate limiter memStore := store.NewMemoryStore() limiter, err := ratelimiter.NewFixedWindowLimiter(memStore, 10, time.Minute) if err != nil { fmt.Println("Failed to create limiter:", err) return } // Simulate API requests key := "user1" for i := 0; iОжидаемый результат:
Request 1 allowed Request 2 allowed ... (up to 10 allowed) Request 11 blocked Request 12 blocked ... (up to 15 blocked)Что будет с ThrottleX дальше? ?
Следите за обновлениями, которые сделают ThrottleX еще более мощным!
Я все еще новичок в открытом исходном коде, и мне бы хотелось, чтобы вы приняли участие в этом путешествии! Вклад всегда приветствуется — будь то исправление ошибок, предложения или улучшения документации.
Ознакомьтесь с репозиторием ThrottleX GitHub Repo и поставьте ему звездочку, если найдете его полезным. Не стесняйтесь открывать проблемы или запросы на извлечение — все поможет!
Заключительные мысли
ThrottleX — это моя попытка сделать ограничение скорости API более доступным и эффективным. Давайте сделаем это весело (и меньше боли)! ?
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3