CWaptcha'nın nonce deposu, istek başına tek RAM tüketicisidir. Her trafik seviyesinde tam olarak ne kadar kullandığı aşağıdadı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 |
|---|---|---|
Nonce | 64 karakterlik hex dizisi | ~154 bytes |
FieldSalt | 32 karakterlik hex dizisi | ~90 bytes |
Expiry | DateTimeOffset | 16 bytes |
Used | bool | 1 byte |
| Önbellek anahtarı + IMemoryCache ek yükü | captchaId anahtarı, CacheEntry, sözlük | ~300 bytes |
| Giriş başına toplam | ~560 bytes |
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
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.
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 |
|---|---|---|
| 60 | 0.2× | ~4 KB |
| 300 varsayılan | 1× | ~20 KB |
| 600 | 2× | ~40 KB |
| 3600 | 12× | ~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.
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.
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.