Hız Sınırlama Ara Yazılımını Yapılandırma
Uç nokta ve ilke başına hız sınırları uygulayın.
Hız Sınırlama Ara Yazılımını Yapılandırma, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
AddRateLimiter
Yapılandırma, hizmet kapsayıcısındaki AddRateLimiter ile başlar. Bir veya daha fazla adlandırılmış ilke ve isteğe bağlı bir genel ret durum kodu tanımlarsınız.
builder.Services.AddRateLimiter(options =>
{
options.RejectionStatusCode =
StatusCodes.Status429TooManyRequests;
});Sabit Pencere İlkesi
AddFixedWindowLimiter, adlandırılmış bir ilke kaydeder. İzin sınırını, pencere süresini ve kuyruk davranışını ayarlayın.
options.AddFixedWindowLimiter("fixed", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
limiter.QueueLimit = 0;
});Kayan Pencere İlkesi
AddSlidingWindowLimiter, yumuşatma ayrıntı düzeyini denetlemek için SegmentsPerWindow özelliğini ekler.
options.AddSlidingWindowLimiter("sliding", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.SegmentsPerWindow = 6;
limiter.QueueLimit = 0;
});Belirteç Kovası İlkesi
AddTokenBucketLimiter, kova boyutunu ve yenileme hızını ayarlar.
options.AddTokenBucketLimiter("token", limiter =>
{
limiter.TokenLimit = 100;
limiter.TokensPerPeriod = 20;
limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
limiter.QueueLimit = 0;
});Eşzamanlılık İlkesi
AddConcurrencyLimiter, eşzamanlı istekleri sınırlar.
options.AddConcurrencyLimiter("concurrent", limiter =>
{
limiter.PermitLimit = 5;
limiter.QueueLimit = 10;
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});Ara Yazılımı Ekleme
Hız sınırlamayı işlem hattında UseRateLimiter ile etkinleştirin. Yönlendirmeden sonra, erken bir aşamaya yerleştirin.
var app = builder.Build();
app.UseRateLimiter();
app.MapControllers();RequireRateLimiting
Adlandırılmış bir ilkeyi uç noktalara RequireRateLimiting (minimal API) veya [EnableRateLimiting] özniteliği (denetleyiciler) ile uygulayın.
app.MapGet("/search", () => Results.Ok())
.RequireRateLimiting("token");
// Controller equivalent:
// [EnableRateLimiting("token")]Belirli Uç Noktalarda Devre Dışı Bırakma
Bir uç noktayı grup ya da genel sınırlayıcıdan DisableRateLimiting veya [DisableRateLimiting] ile muaf tutun.
app.MapGet("/health", () => Results.Ok())
.DisableRateLimiting();Bölümlere Sahip Genel Sınırlayıcı
GlobalLimiter her isteğe uygulanır. Her kullanıcıya veya IP'ye kendi sayacını vermek için PartitionedRateLimiter.Create kullanın.
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)
});
});Reddetme Davranışını Özelleştirme
OnRejected, bir istek kısıtlandığında Retry-After üst bilgisi veya anlaşılır bir gövde eklemenizi sağlar.
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);
};Bir Rota Grubuna Uygulama
Bir ilkeyi tüm rota grubuna ekleyerek içindeki her uç noktanın sınırı paylaşmasını sağlayın.
var api = app.MapGroup("/api")
.RequireRateLimiting("fixed");
api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());Kısa Kontrol
Ara yazılım kurulumunu doğrulayın.
Özet
Hız sınırlamayı yapılandırdınız:
AddRateLimiter, sabit pencere, kayan pencere, belirteç kovası ve eşzamanlılık ilkelerini tanımlar.UseRateLimiterara yazılımı etkinleştirir;RequireRateLimitingbir ilkeyi uygular.GlobalLimiterilePartitionedRateLimiter, istemci başına sayaçlar sağlar.OnRejected, 429 yanıtını özelleştirir.
Sırada: çıktı önbellekleme.
Sıkça Sorulan Sorular
“Hız Sınırlama Ara Yazılımını Yapılandırma” dersi ücretsiz mi?
Evet — “Hız Sınırlama Ara Yazılımını Yapılandırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Hız Sınırlama Ara Yazılımını Yapılandırma” dersinde ne öğreneceğim?
Uç nokta ve ilke başına hız sınırları uygulayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Hız Sınırlama Ara Yazılımını Yapılandırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Hız Sınırlama Algoritmaları
- Hız Sınırlama Ara Yazılımını Yapılandırma
- Çıktı Önbellekleme Temelleri
- Önbellek İlkeleri ve Geçersiz Kılma