Belgeler / Bellek & Performans
Belgeler

Bellek & Performans

CWaptcha'nın nonce deposu, istek başına tek RAM tüketicisidir. Her trafik seviyesinde tam olarak ne kadar kullandığı aşağıdadır.

İstek başına ne depolanır

Her verilen CAPTCHA tokeni, IMemoryCache'de bir NonceEntry oluşturur. Nonce kullanılana veya TTL sona erene kadar bellekte kalır.

Alan Değer Boyut
Nonce64 karakterlik hex dizisi~154 bytes
FieldSalt32 karakterlik hex dizisi~90 bytes
ExpiryDateTimeOffset16 bytes
Usedbool1 byte
Önbellek anahtarı + IMemoryCache ek yükücaptchaId anahtarı, CacheEntry, sözlük~300 bytes
Giriş başına toplam~560 bytes

Kararlı hal formülü

Herhangi bir anda yalnızca TTL süresi dolmamış nonce'lar bellekte tutulur. Kararlı haldeki canlı giriş sayısı formülü:

live_entries = requests_per_second × NonceTtlSeconds

RAM = live_entries × 560 bytes

Örnek — günde 10.000 istek

10,000 req/day ÷ 86,400 sec/day = 0.116 req/sec
live_entries = 0.116 × 300 = ~35 entries
RAM = 35 × 560 bytes = ~20 KB

Yaygın trafik seviyelerinde RAM kullanımı

Varsayılan NonceTtlSeconds = 300 (5 dakika) ve düzgün trafik dağılımı ile hesaplanmıştır.

Günlük istek İstek / sn Canlı giriş Nonce deposu RAM
10,000 0.12 ~35 ~20 KB
100,000 1.16 ~350 ~195 KB
1,000,000 11.6 ~3,470 ~1.9 MB
10,000,000 116 ~34,700 ~19 MB

Günde 10 M istekte nonce deposu ~19 MB kullanır. ASP.NET Core çalışma zamanı temeli bundan bağımsız olarak 50–150 MB'dır.

NonceTtlSeconds'ın etkisi

TTL en büyük tek ayar koludur. TTL'yi yarıya indirmek canlı girişleri ve RAM'i yarıya indirir. Aşağıdaki tüm değerler günde 10.000 istek için hesaplanmıştır.

NonceTtlSeconds Göreceli giriş sayısı 10k/gün RAM
600.2×~4 KB
300 varsayılan ~20 KB
600~40 KB
360012×~240 KB

60 sn altındaki değerler yavaş bağlantıları reddedebilir. 600 sn üzerindeki değerler, çalınan tokenlerin tekrar kullanılmasına daha fazla zaman tanır.

Dağıtık nonce deposu (Redis)

UseDistributedNonceStore() ile nonce'lar Redis'te saklanır. Uygulama sunucusu trafik yoğunluğundan bağımsız olarak sıfır nonce yığın tahsisi taşır.

// Moves nonce storage to Redis — zero per-nonce RAM on the app server
builder.Services.AddCWaptcha(builder.Configuration.GetSection("CWaptcha"))
                .UseDistributedNonceStore();

Tam kurulum talimatları için README'deki Çok Düğümlü Dağıtımlar bölümüne bakın.

Çalışma zamanı temeli

ASP.NET Core çalışma zamanı boşta 50–150 MB kullanır; bu, herhangi bir gerçekçi trafik seviyesinde nonce deposunu çok aşar. CWaptcha arka plan iş parçacığı, zamanlayıcı veya yoklama döngüsü eklemez — sona erme, IMemoryCache'in yerleşik TTL mekanizması tarafından yönetilir.