दिलचस्प पोस्ट
स्पष्ट रूप से एक पायथन सूची या ट्यूपल से आइटम का चयन करें कस्टम ड्राइंग के लिए पेंट इवेंट हैंडलर की बजाय CreateGraphics का उपयोग करते समय आरेखण अवक्षेप जावा में "इंफरेस्ट नहीं किया जा सकता" आइस क्रीम सैंडविच और जेली बीन में होम बटन ब्लॉक करें कैसे "अनदेखा डालें" और "डुप्लिकेट कुंजी अद्यतन पर" (एसक्यूएल मर्ज) का अनुकरण कैसे करना है postgresql? आईपैड में UIImagePickerController का उपयोग कैसे करें? मैं Visual Studio (और / या ReSharper) का उपयोग कर कक्षा क्षेत्रों से एक कंसट्रक्टर कैसे बना सकता हूं? "चेतावनी: आईफ़ोन एप में बिल्ड वर्कचर भी शामिल होना चाहिए" यहां तक ​​कि बिल्ड कॉन्फ़िग सेट के साथ सी ++ में फ़ंक्शन नाम के लिए मैं एक उपनाम कैसे निर्दिष्ट करूं? लार्वेल के सार्वजनिक फ़ोल्डर से बचें और सीधे वेब सर्वर में रूट खोलें SSE / AVX के साथ फ्यूज़ गुणा-जोड़ (एफएमए) निर्देशों का उपयोग कैसे करें एंड्रॉइड: ListView की सूची आइटम में बटन के लिए onClick ईवेंट को कैसे सेट करें मैं इमियॉप्शन को कैसे पूरा करता हूं? जावा की यूयूआईडी.रैंडयूयूआईडी कितना अच्छा है? jQuery मोबाइल / एमवीसी: रीडायरेक्ट टाईएक्शन के साथ बदलने के लिए ब्राउज़र यूआरएल प्राप्त करना

एएसपी.नेट एमवीसी में अनुरोध थ्रॉटलिंग को लागू करने का सर्वोत्तम तरीका?

हम एक निश्चित समय अवधि में उपयोगकर्ता कार्यों को गड़बड़ने के विभिन्न तरीकों से प्रयोग कर रहे हैं:

  • सीमा प्रश्न / उत्तर पोस्ट
  • सीमाएं संपादन
  • फ़ीड पुनः प्राप्त करने की सीमाएं

समय के लिए, हम बस यूज़र गतिविधि का रिकार्ड सम्मिलित करने के लिए कैश का उपयोग कर रहे हैं – अगर वह रिकॉर्ड मौजूद है तो / जब उपयोगकर्ता एक ही गतिविधि करता है, तो हम थ्रॉटल

कैश का उपयोग स्वचालित रूप से उपयोगकर्ताओं की बाली डेटा सफाई और स्लाइडिंग गतिविधि खिड़कियां देता है, लेकिन यह एक समस्या कैसे हो सकता है।

यह सुनिश्चित करने के कुछ अन्य तरीके क्या हैं कि अनुरोध / प्रयोक्ता कार्रवाइयां प्रभावी रूप से गड़बड़ कर सकती हैं (स्थिरता पर जोर)?

Solutions Collecting From Web of "एएसपी.नेट एमवीसी में अनुरोध थ्रॉटलिंग को लागू करने का सर्वोत्तम तरीका?"

हम पिछले वर्ष के लिए स्टैक ओवरफ़्लो पर क्या उपयोग कर रहे हैं, इसका एक सामान्य संस्करण है:

/// <summary> /// Decorates any MVC route that needs to have client requests limited by time. /// </summary> /// <remarks> /// Uses the current System.Web.Caching.Cache to store each client request to the decorated route. /// </remarks> [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public class ThrottleAttribute : ActionFilterAttribute { /// <summary> /// A unique name for this Throttle. /// </summary> /// <remarks> /// We'll be inserting a Cache record based on this name and client IP, eg "Name-192.168.0.1" /// </remarks> public string Name { get; set; } /// <summary> /// The number of seconds clients must wait before executing this decorated route again. /// </summary> public int Seconds { get; set; } /// <summary> /// A text message that will be sent to the client upon throttling. You can include the token {n} to /// show this.Seconds in the message, eg "Wait {n} seconds before trying again". /// </summary> public string Message { get; set; } public override void OnActionExecuting(ActionExecutingContext c) { var key = string.Concat(Name, "-", c.HttpContext.Request.UserHostAddress); var allowExecute = false; if (HttpRuntime.Cache[key] == null) { HttpRuntime.Cache.Add(key, true, // is this the smallest data we can have? null, // no dependencies DateTime.Now.AddSeconds(Seconds), // absolute expiration Cache.NoSlidingExpiration, CacheItemPriority.Low, null); // no callback allowExecute = true; } if (!allowExecute) { if (String.IsNullOrEmpty(Message)) Message = "You may only perform this action every {n} seconds."; c.Result = new ContentResult { Content = Message.Replace("{n}", Seconds.ToString()) }; // see 409 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html c.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict; } } } 

नमूना उपयोग:

 [Throttle(Name="TestThrottle", Message = "You must wait {n} seconds before accessing this url again.", Seconds = 5)] public ActionResult TestThrottle() { return Content("TestThrottle executed"); } 

एएसपी.नेट कैश एक विजेता की तरह काम करता है – इसका इस्तेमाल करके, आप अपनी थ्रॉटल प्रविष्टियों की स्वत: साफ-सफाई कर सकते हैं। और हमारे बढ़ते यातायात के साथ, हम नहीं देख रहे हैं कि यह सर्वर पर एक मुद्दा है

इस विधि पर प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें; जब हम स्टैक अतिप्रवाह को बेहतर बनाते हैं, तो आप अपने ईवॉक को और भी तेज़ बनाते हैं 🙂

IIS 7.0 के लिए माइक्रोसॉफ्ट के आईआईएस 7.0 के लिए डायनेमिक आईपी प्रतिबंध विस्तार नामक एक नया एक्सटेंशन है – बीटा

"आईआईएस 7.0 के लिए डायनामिक आईपी प्रतिबंध एक ऐसा मॉड्यूल है जो वेब सर्वर और वेब साइटों पर सेवा और जबरदस्ती बल हमलों के खिलाफ सुरक्षा प्रदान करता है। ऐसी सुरक्षा अस्थायी रूप से HTTP क्लाइंटों के आईपी पते को अवरुद्ध करके प्रदान की जाती है जो असामान्य रूप से अधिक समवर्ती अनुरोध करते हैं या जो छोटी अवधि के लिए बड़ी संख्या में अनुरोध करते हैं। " http://learn.iis.net/page.aspx/548/using-dynamic-ip-restrictions/

उदाहरण:

यदि आप X requests in Y milliseconds या X requests in Y milliseconds बाद ब्लॉक करने के लिए मापदंड निर्धारित करते हैं तो आईपी पते को Y milliseconds लिए अवरुद्ध कर दिया जाएगा, तो अनुरोधों को फिर से अनुमति दी जाएगी।

हम इस यूआरएल http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx से उधार ली गई तकनीक का इस्तेमाल करते हैं, थ्रॉटलिंग के लिए नहीं, बल्कि एक गरीब व्यक्ति के सेवा के लिए नकार (डॉस) के लिए। यह कैश-आधारित भी है, और आप जो कर रहे हैं उसके समान हो सकते हैं। क्या आप डॉस हमलों को रोकने के लिए थ्रॉटलिंग कर रहे हैं? डॉस को कम करने के लिए राउटर का इस्तेमाल किया जा सकता है; क्या आपको लगता है कि रूटर आपको थ्रॉटलिंग को संभाल सकता है?