π‘ Rate Limiting, ΡΠ°ΡΡΡ 2: ΠΊΠ°ΠΊ ΡΡΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΏΡΠΈΠΊΡΡΡΠΈΡΡ Π² ASP.NET Core
ΠΠΊΠ΅ΠΉ, Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π±ΡΠ²Π°ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ Π²ΠΊΡΡΠ½ΠΎΠ΅ β ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ Π½Π΅ ΡΡΡΠ΄Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π½Π° ΠΊΠΎΠ΄-ΡΠ΅Π²ΡΡ.
Π Microsoft.AspNetCore.RateLimiting Π²ΡΡ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ. Π‘Π°ΠΌΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΡΠΎΠ·Π΄Π°ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΈ Π²Π΅ΡΠ°Π΅ΡΡ Π½Π° ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ (Π·Π° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠΉΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΈΠΊΠΏΠΈΠΊ 1).
ΠΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ Π»ΠΈΠΌΠΈΡΠ΅Ρ Π½Π° Π²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ°ΡΠ΅ Π½ΡΠΆΠ½Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ β ΡΠ°Π·Π½ΡΠ΅ Π»ΠΈΠΌΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠΎΠ². Π Π΅ΡΡ Π΅ΡΡΡ PartitionedRateLimiter β ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Π²Π΅Π΄ΡΠΎ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π΄ΠΈΠΊΠΏΠΈΠΊ 2). ΠΠ΄ΠΈΠ½ ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡ Ρ ΡΠΈΠΊΠ»ΠΎΠΌ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ.
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΄Π»Ρ ΠΌΠΎΠ΅Π³ΠΎ API Π±Π°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΏΠ»Π°Π½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΎΠΉ:
1οΈβ£ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ article/smart-search, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΡΡΠ³Π°Π΅Ρ LLM β ΠΆΡΡΡΠΊΠΈΠΉ Token Bucket, 20 Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ°Ρ Π½Π° ΡΠ·Π΅ΡΠ°.
2οΈβ£ ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ β ΠΌΡΠ³ΠΊΠΈΠΉ Fixed Window Π½Π° 100 Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΠΌΠΈΠ½ΡΡΡ. Health-ΡΠ΅ΠΊ β Π±Π΅Π· Π»ΠΈΠΌΠΈΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΊΡΠ±Π΅Ρ Π½Π΅ ΡΡΡΠ°Π΄Π°Π». ΠΡΡ ΡΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ Π°ΡΡΠΈΠ±ΡΡ EnableRateLimiting Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ (Π΄ΠΈΠΊΠΏΠΈΠΊ 3).
ΠΡΡ ΠΏΡΠΈΠΊΠΎΠ»ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΡΠΈΡΠ°Π» β ΠΊΠ°ΠΊ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ³Π΄Π° Π»ΠΈΠΌΠΈΡ ΠΏΡΠ΅Π²ΡΡΠ΅Π½?
ΠΡΠ²Π΅Ρ: ΠΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ ΠΏΡΠΎΡΡΠΎ 429, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΠ°ΡΠΈΠ²ΠΎ: ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Retry-After Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ΅ΠΊΡΠ½Π΄ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ π. ΠΠ΅ΠΆΠ»ΠΈΠ²ΠΎ ΠΈ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ (Π΄ΠΈΠΊΠΏΠΈΠΊ 4).
ΠΡΠ±ΠΎΠΉ Π·ΠΎΡΠΊΠΈΠΉ Π³Π»Π°Π·, Π΄ΠΎΡΠΈΡΠ°Π²ΡΠΈΠΉ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΄ΡΠΌΠ°Ρ Π·Π°Π΄Π°Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, Π° ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΈ ΡΠ΅ΠΉΡ-Π»ΠΈΠΌΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
ΠΠ± ΡΡΠΎΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ. Π ΠΏΠΎΠΊΠ° ΡΠΏΠΎΠΉΠ»Π΅Ρ: Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ rate limiter ΡΡΠΈΡΠ°Π΅Ρ in-memory, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΠ΄ ΠΆΠΈΠ²ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΆΠΈΠ·Π½ΡΡβ¦
π¦ ΠΡΡΠ°ΡΠΈ, Π½Π΅ ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄ΠΈΠΊΠΏΠΈΠΊΠ°ΠΌΠΈ Π΅Π΄ΠΈΠ½ΡΠΌΠΈ! π ΠΠΎΡ ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ: https://github.com/Undermove/csharpshortpostsexamples/tree/main/RateLimitingExample
#csharp #ratelimiting
Post #399
599




- π― 2
- β€ 1
- π 1