Tài liệu

Tùy chọn Token Bucket

Thời gian đọc 3 phút Gói: Nalix.Runtime
Trên trang này

Không gian tên: Nalix.Runtime.Options
Assembly: Nalix.Runtime

TokenBucketOptions (public sealed partial class TokenBucketOptions : ConfigurationLoader, IValidatableConfiguration) cấu hình bộ giới hạn tốc độ micro-token dạng fixed-point, phân mảnh TokenBucketLimiter và cung cấp giá trị dự phòng mặc định cho PolicyRateLimiter.

Ánh xạ mã nguồn

  • src/Nalix.Runtime/Options/TokenBucketOptions.cs
  • src/Nalix.Runtime/Throttling/TokenBucketLimiter.cs
  • src/Nalix.Runtime/Throttling/PolicyRateLimiter.cs

Thuộc tính

Được tải từ mục [TokenBucket] trong default.ini qua ConfigurationManager.Instance.Get<TokenBucketOptions>():

Thuộc tínhKiểuMặc địnhKiểm tra hợp lệMô tả
CapacityTokensint64[ValueRange(1, int.MaxValue)]Dung lượng burst tối đa tính bằng số token nguyên cho mỗi endpoint.
RefillTokensPerSeconddouble32.0[ValueRange(0.001, double.MaxValue)]Tốc độ nạp token duy trì mỗi giây.
HardLockoutSecondsint30[ValueRange(0, int.MaxValue)]Thời gian tính bằng giây mà một endpoint bị chặn cứng sau khi đạt MaxSoftViolations (0 = tắt).
StaleEntrySecondsint180[ValueRange(1, int.MaxValue)]Số giây nhàn rỗi trước khi một mục endpoint đủ điều kiện để bị thu hồi ở nền.
CleanupIntervalSecondsint45[ValueRange(1, int.MaxValue)]Khoảng thời gian tính bằng giây cho tác vụ dọn dẹp định kỳ "token.bucket" trong ITaskManager.
TokenScaleint100[ValueRange(1, 1_000_000)]Số micro-token fixed-point trên mỗi token nguyên (CapacityTokens * (long)TokenScale phải vừa trong long).
ShardCountint256[ValueRange(1, int.MaxValue)], lũy thừa của 2Số shard của map đồng thời ((ShardCount & (ShardCount - 1)) == 0).
SoftViolationWindowSecondsint8[ValueRange(1, int.MaxValue)]Cửa sổ trượt tính bằng giây để cộng dồn các vi phạm soft-throttle liên tiếp.
MaxSoftViolationsint5[ValueRange(1, int.MaxValue)]Số vi phạm soft trong SoftViolationWindowSeconds cần thiết để leo thang lên HardLockout.
CooldownResetSecint10[ValueRange(1, int.MaxValue)]Thời gian đặt lại cooldown đã cấu hình tính bằng giây.
MaxTrackedEndpointsint100_000[ValueRange(0, int.MaxValue)]Số endpoint tối đa được theo dõi đồng thời trên tất cả shard (0 = không giới hạn).
AdaptiveThrottlingEnabledbooltrue—Điều chỉnh tốc độ nạp theo ITaskManager.ConcurrencyLimitRatio khi tải CPU của server cao.
InitialTokensint-1<= CapacityTokensSố dư token ban đầu cho endpoint mới gặp (< 0 = đầy CapacityTokens, 0 = rỗng khi khởi động nguội, > 0 = số token cụ thể).
MaxEvictionCapacityint8192[ValueRange(64, 65536)]Dung lượng danh sách ứng viên ban đầu dùng trong các lượt quét dọn khi vượt giới hạn.
MinReportCapacityint256[ValueRange(64, 8192)]Dung lượng danh sách ban đầu tối thiểu khi tạo snapshot IReportable.

Quy tắc kiểm tra hợp lệ (Validate())

Validate() chạy kiểm tra thuộc tính DataAnnotation và áp dụng:

  1. ShardCount > 0 và (ShardCount & (ShardCount - 1)) == 0 (phải là lũy thừa của 2).
  2. CapacityTokens * (long)TokenScale <= long.MaxValue.
  3. InitialTokens <= CapacityTokens.

API liên quan