0Pricing
C# Academy · Lekcja

Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości

Stosuj limity przepustowości dla poszczególnych endpointów i zasad.

Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

AddRateLimiter

Konfigurację rozpoczyna się od dodania AddRateLimiter do kontenera usług. Należy zdefiniować co najmniej jedną nazwaną politykę oraz opcjonalny globalny kod stanu odrzucenia.

builder.Services.AddRateLimiter(options =>
{
    options.RejectionStatusCode =
        StatusCodes.Status429TooManyRequests;
});

Polityka stałego okna

AddFixedWindowLimiter rejestruje nazwaną politykę. Należy ustawić limit zezwoleń, długość okna i zachowanie kolejki.

options.AddFixedWindowLimiter("fixed", limiter =>
{
    limiter.PermitLimit = 100;
    limiter.Window = TimeSpan.FromMinutes(1);
    limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    limiter.QueueLimit = 0;
});

Polityka przesuwnego okna

AddSlidingWindowLimiter udostępnia ustawienie SegmentsPerWindow, które określa dokładność wygładzania.

options.AddSlidingWindowLimiter("sliding", limiter =>
{
    limiter.PermitLimit = 100;
    limiter.Window = TimeSpan.FromMinutes(1);
    limiter.SegmentsPerWindow = 6;
    limiter.QueueLimit = 0;
});

Polityka wiadra tokenów

AddTokenBucketLimiter ustawia rozmiar wiadra i częstotliwość uzupełniania tokenów.

options.AddTokenBucketLimiter("token", limiter =>
{
    limiter.TokenLimit = 100;
    limiter.TokensPerPeriod = 20;
    limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
    limiter.QueueLimit = 0;
});

Polityka współbieżności

AddConcurrencyLimiter ogranicza liczbę jednocześnie obsługiwanych żądań.

options.AddConcurrencyLimiter("concurrent", limiter =>
{
    limiter.PermitLimit = 5;
    limiter.QueueLimit = 10;
    limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});

Dodawanie oprogramowania pośredniczącego

Ograniczanie liczby żądań należy włączyć w potoku za pomocą UseRateLimiter. Powinno ono znajdować się odpowiednio wcześnie, po routingu.

var app = builder.Build();

app.UseRateLimiter();

app.MapControllers();

RequireRateLimiting

Nazwaną politykę można zastosować do endpointów za pomocą RequireRateLimiting (Minimal API) lub atrybutu [EnableRateLimiting] (kontrolery).

app.MapGet("/search", () => Results.Ok())
   .RequireRateLimiting("token");

// Controller equivalent:
// [EnableRateLimiting("token")]

Wyłączanie dla konkretnych endpointów

Endpoint można wyłączyć z działania ogranicznika grupowego lub globalnego za pomocą DisableRateLimiting albo [DisableRateLimiting].

app.MapGet("/health", () => Results.Ok())
   .DisableRateLimiting();

Globalny ogranicznik z partycjami

GlobalLimiter stosuje się do każdego żądania. Za pomocą PartitionedRateLimiter.Create można przydzielić każdemu użytkownikowi lub adresowi IP własny licznik.

options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(
    context =>
    {
        var key = context.User.Identity?.Name
                  ?? context.Connection.RemoteIpAddress?.ToString()
                  ?? "anon";
        return RateLimitPartition.GetFixedWindowLimiter(key, _ =>
            new FixedWindowRateLimiterOptions
            {
                PermitLimit = 100,
                Window = TimeSpan.FromMinutes(1)
            });
    });

Dostosowywanie odrzucania

OnRejected pozwala dodać nagłówek Retry-After lub przyjazną treść odpowiedzi, gdy żądanie zostanie ograniczone.

options.OnRejected = async (context, token) =>
{
    if (context.Lease.TryGetMetadata(
            MetadataName.RetryAfter, out var retry))
        context.HttpContext.Response.Headers.RetryAfter =
            ((int)retry.TotalSeconds).ToString();
    await context.HttpContext.Response
        .WriteAsync("Rate limit exceeded.", token);
};

Stosowanie do grupy tras

Politykę można przypisać do całej grupy tras, aby każdy znajdujący się w niej endpoint współdzielił limit.

var api = app.MapGroup("/api")
             .RequireRateLimiting("fixed");

api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());

Szybkie sprawdzenie

Należy sprawdzić konfigurację oprogramowania pośredniczącego.

Podsumowanie

Skonfigurowano ograniczanie liczby żądań:

  • AddRateLimiter definiuje polityki stałego okna, przesuwnego okna, wiadra tokenów i współbieżności.
  • UseRateLimiter włącza oprogramowanie pośredniczące, a RequireRateLimiting stosuje politykę.
  • GlobalLimiter wraz z PartitionedRateLimiter zapewnia osobne liczniki dla poszczególnych klientów.
  • OnRejected dostosowuje odpowiedź 429.

Następnie: buforowanie wyników.

Często zadawane pytania

Czy lekcja „Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości” jest bezpłatna?

Tak — pełny tekst „Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości”?

Stosuj limity przepustowości dla poszczególnych endpointów i zasad. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Algorytmy ograniczania przepustowości
  2. Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości
  3. Podstawy buforowania odpowiedzi
  4. Zasady buforowania i unieważnianie
← Powrót do C# Academy