cuốn sách gpt4 ai đã làm

Sử dụng phần mềm trung gian giới hạn tốc độ trong ASP.NET Core

In lại Tác giả: Sahara Thời gian cập nhật: 27-12-2024 14:49:52 58 4
mua khóa gpt4 Nike

Giới thiệu

Lõi ASP.NET request for API Web ứng dụng hoặc MVC chặn trạng thái chặn quá tải của máy chủ và cải thiện tính bảo mật.

AddRateLimiter:

1. Đăng ký dịch vụ

Startup.cs hoặc Program.cs, bạn cần đăng ký dịch vụ AddRateLimiter. Điều này có thể được thực hiện với đoạn mã sau:

builder.Services.AddRateLimiter(options => { // Định cấu hình tùy chọn giới hạn tỷ lệ});

2. Thêm chính sách giới hạn tỷ lệ

Có thể thêm các loại chính sách giới hạn tốc độ khác nhau, bao gồm cố định cửa sổ, thanh trượt cửa sổ, nhóm thông báo mã hóa và giới hạn thời gian.

Cố định cửa sổ giới hạn

Khi khoảng cách Ví dụ: một chính sách có thể được thiết lập để cho phép tối đa 4 yêu cầu trong mỗi khoảng thời gian 12 giây.

builder.Services.AddRateLimiter(options => { options.AddFixedWindowLimiter("fixed", opt => { opt.Window = TimeSpan.FromMinutes(1); // Khoảng thời gian opt.PermitLimit = 3; // Được phép trong khoảng thời gian Số thời gian lượng tối đa yêu cầu opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst //; được phép tối đa trong hàng đợi } });

Tức là số lượng yêu cầu trong một thời gian cố định. lượng đó sẽ được đặt lại trong cửa sổ tiếp theo trong thời gian.

Sau khi thử nghiệm, các yêu cầu dư thừa vẫn sẽ chờ.

https://www.cnblogs.com/guoxiaotian/p/17834892.html.

Thanh trượt cửa sổ giới hạn

Thanh trượt cửa sổ toán học:

  • Cửa sổ trượt một đoạn tại mỗi khoảng thời gian của đoạn. phân tích số lượng trên mỗi cửa sổ).
  • Giới hạn số lượng yêu cầu cho một cửa sổ để cho phépGiới hạn các yêu cầu.
  • Mỗi thời gian của cửa sổ được chia thành một đoạn của một cửa sổ.
  • Các yêu cầu được nhận từ khoảng thời gian hết hạn quay trở lại một cửa sổ (n đoạn trước đoạn phân đoạn hiện tại) sẽ được thêm vào hiện tại phân đoạn. hết hạn gần đây nhất là "phân đoạn đã hết hạn".

Vui lòng xem bảng đánh giá sau đây hiển thị bộ giới hạn cửa sổ trượt với cửa sổ 30 giây, ba đoạn phân tích trên mỗi cửa yêu cầu sổ và giới hạn 100:

  • Hàng và cột đầu tiên hiển thị trong khoảng thời gian.
  • Dòng thứ hai hiển thị lại số lượng yêu cầu. có sẵn ngoại trừ số lượng yêu cầu được xử lý và số lượng yêu cầu được tái sử dụng.
  • Số lượng yêu cầu mỗi lần chuyển dọc theo đường chéo màu xanh.
  • Bắt đầu từ thời điểm 30, các yêu cầu hết hạn sẽ được thêm lại vào yêu cầu giới hạn, như được show bằng đường màu đỏ.

Bảng bên dưới được định dạng để hiển thị dữ liệu trong biểu đồ phía trên. 100 yêu cầu cầu có sẵn vì không có đoạn nào trước đó.

thời gian Có sẵn Đã nhận được số lượng yêu cầu Số lượng yêu cầu được tái chế từ các phân đoạn đã hết hạn Số dư yêu cầu số lượng
0 100 20 0 80
10 80 30 0 50
20 50 40 0 10
30 10 30 20 0
40 0 10 30 20
50 20 10 40 50
60 50 35 30 45
 services.AddRateLimiter(options => { options.AddSlidingWindowLimiter("sliding", opt => { opt.Window = TimeSpan.FromMinutes(1); // Tổng thời gian của cửa sổ là 1 phút opt.SegmentsPerWindow = 6; // Thay đổi 1 phút PermitLimit = 10; // Số lượng yêu cầu tối đa được phép trong toàn bộ cửa sổ } });

Giới hạn thông báo mã nhóm

Nó bổ sung thêm thông báo mã hóa. một tỷ lệ nhất định và khi yêu cầu dịch vụ xảy ra, dịch vụ sẽ cố gắng trích xuất mã thông báo (giảm số thông báo mã hóa) để đáp ứng yêu cầu. sẽ bị chặn.

    services.AddRateLimiter(configureOptions => { configureOptions.AddTokenBucketLimiter("token-bucket", options => { options.TokenLimit = 100; // Thời gian bổ sung TokensPerPeriod = 10; TokensPerPeriod = 10; bất kỳ tùy chọn.AutoReplenishment=true; hàng đợi.QueueLimit = 10; // Yêu cầu giới hạn độ dài hàng đợi } } ) ;

Đồng thời giới hạn

Bộ giới hạn thời gian là hình thức giới hạn tốc độ đơn giản nhất. tập trung vào số lượng yêu cầu đồng thời.

    services.AddRateLimiter(options => { options.AddConcurrencyLimiter("concurrency", options => { options.PermitLimit = 1; // QueueLimit = 10 ; // Yêu cầu hàng dài giới hạn } });

3. Sử dụng phần mềm trung gian

Program.cs, bạn cần sử dụng phần mềm trung gian UseRateLimiter:

app.UseRateLimiter();

4. Áp dụng chính sách giới hạn tỷ giá

Tỷ lệ giới hạn chính sách có thể được áp dụng trên toàn cầu hoặc áp dụng cho các bộ điều khiển hoặc hành động cụ thể:

Cấu hình toàn cầu

app.MapControllers().RequireRateLimiting("đã sửa");

Áp dụng cho một công cụ điều khiển

[EnableRateLimiting("fixed")] lớp công khai RateLimitTestController : ControllerBase { // Hành động của bộ điều khiển }

ứng dụng cho các công cụ hành động

[EnableRateLimiting("fixed")] Nhiệm vụ không đồng bộ công khai Get() { // Hành động logic }

5. Vô hiệu hóa giới hạn tốc độ

Ngoài ra còn có tùy chọn tắt giới hạn tốc độ, ở bộ điều khiển cấp độ hoặc ở cấp độ hành động cụ thể:

Vô hiệu hóa bộ điều khiển tốc độ giới hạn

[DisableRateLimiting] lớp công khai RateLimitTestController : ControllerBase { // Hành động của bộ điều khiển }

Tắt tốc độ giới hạn cho các công cụ hành động

[DisableRateLimiting] Nhiệm vụ không đồng bộ công khai Get() { // Hành động logic }

phản hồi tùy chỉnh

Phản hồi có thể được tùy chỉnh khi khách hàng vượt quá tốc độ giới hạn. lại OnRejected để tùy chỉnh phản hồi:

options.OnRejected = (context, token) => { context.HttpContext.Response.StatusCode = StatusCodes.Status429TooManyRequests context.HttpContext.Response.Headers["Retry-After"] = "60"; sau 60 giây hãy thử context.HttpContext.Response.StatusCode = StatusCodes.Status429TooManyRequests; context.HttpContext.Response.WriteAsync("Quá nhiều yêu cầu. Vui lòng thử lại sau.", cancelToken: token return Task.CompletedTask };

Tóm tắt

Triển khai các chính sách giới hạn tốc độ hiệu quả trong các ứng dụng ASP.NET Core để bảo vệ API khỏi bị lạm dụng và quá tải. Chào mừng bạn theo dõi tài khoản công khai của tôi: Chia sẻ mạng.

Cuối cùng, bài viết này về việc sử dụng phần mềm trung gian giới hạn tốc độ trong ASP.NETCore kết thúc tại đây. Nếu bạn muốn biết thêm về việc sử dụng phần mềm trung gian giới hạn tốc độ trong ASP.NETCore, vui lòng tìm kiếm bài viết CFSDN hoặc duyệt qua các bài viết liên quan. bạn sẽ ủng hộ blog của tôi trong tương lai! .

58 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress