NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Kubernetes API for Laravel

Obmedzenie požiadaviek

Každá požiadavka na apiserver prechádza cez http-client-rate-limits-for-laravel s kľúčom pre každý apiserver: host, port a predponu cesty z URL klastra, takže každý klaster za proxy typu Rancher má vlastný rozpočet. Jeden vyťažený klaster nikdy nezablokuje iný, ani keď všetci klienti používajú rovnaké meno managera, a klienti toho istého apiservera zdieľajú jeden rozpočet bez ohľadu na meno managera či prihlasovacie údaje. API Priority and Fairness v Kubernetes funguje pre každý apiserver zvlášť, takže to priamo zodpovedá tomu, ako server presadzuje vlastné limity.

Predvolene klient pošle najviac 400 požiadaviek za minútu na klaster a všetko nad to dávkuje — počká, kým sa okno uvoľní, namiesto chyby. Pri zapnutom adaptive sa z odpovede 429 od apiservera prečíta hodnota Retry-After a limiter sa podľa nej doladí, takže ďalšia požiadavka počká presne toľko, koľko server žiadal. Nastavíte to cez env:

KUBERNETES_RATELIMIT=400            # attempts per window, per cluster
KUBERNETES_RATELIMIT_TIMESPAN=minute
KUBERNETES_RATELIMIT_ADAPTIVE=true  # honour 429 Retry-After
# KUBERNETES_RATELIMIT_MAX_WAIT=2000  # ms — fail fast instead of waiting
# KUBERNETES_RATELIMIT_JITTER=250     # ms of random spread per defer
# KUBERNETES_RATELIMIT_OWNER=app
# KUBERNETES_RATELIMIT_ENABLED=false  # the raw, unthrottled client

Kľúč rozpočtu je k8s:<owner>:<apiserver>, kde <apiserver> je host URL klastra spolu s neštandardným portom a predponou cesty; cez rate_limits.owner môže viac aplikácií či workerov rozpočet zdieľať — alebo oddeliť.

Každý kľúč rate_limits sa číta prísne: nerozpoznaný prepínač, necelé číslo či číslo mimo rozsahu, preklep v timespan alebo owner, ktorý nie je reťazec, vyhodí InvalidConfigurationException s názvom kľúča, namiesto aby sa potichu použila predvolená hodnota; prázdna hodnota sa počíta ako nenastavená a dostane predvolenú hodnotu (pozrite Konfigurácia).

Okamžitá chyba namiesto čakania

Nastavte strop max_wait v milisekundách. Ak by požiadavka musela čakať dlhšie, namiesto blokovania vyhodí RateLimitExceededException. Ponúka ->cluster (meno registrovaného klastra, pri ad-hoc klientovi host apiservera) a retryAfterSeconds():

use RoundlyConsulting\KubernetesApi\Exceptions\RateLimitExceededException;

try {
    $cluster->pods()->get();
} catch (RateLimitExceededException $e) {
    report("Cluster {$e->cluster} is throttled; retry in {$e->retryAfterSeconds()}s");
}

Výnimka implementuje kontrakt HasRetryAfter z package-toolkit-for-laravel, takže aplikácia môže všetky zlyhania limitov z balíkov Roundly obslúžiť na jednom mieste:

use RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter;

if ($e instanceof HasRetryAfter) {
    return response('Too Many Requests', 429, ['Retry-After' => $e->retryAfterSeconds()]);
}

Zdieľaný rozpočet medzi workermi

Limiter predvolene používa úložisko v pamäti — pre každý proces zvlášť, čo stačí pre jeden worker alebo CLI beh. Pre rozpočet zdieľaný medzi workermi fronty alebo servermi nasmerujte úložisko podkladového balíka na Cache, Redis alebo databázu (HTTP_CLIENT_RATE_LIMITS_STORE); tento balík úložisko nevnucuje:

// config/http-client-rate-limits.php — published by the rate-limits package
'store' => RoundlyConsulting\HttpClientRateLimits\Store\RedisStore::class,

Čo sa započítava

Cez limiter prechádzajú operácie so zdrojmi, požiadavky na logy, sledovanie zmien, priame volania request() aj kubernetes:ping; spojenia exec nie a pod Kubernetes::fake() nič. Nastavením KUBERNETES_RATELIMIT_ENABLED=false získate klienta úplne bez obmedzenia.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.