Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

ASP.NET कोर में प्रदर्शन और स्केलेबिलिटी को अधिकतम करना:सिद्ध रणनीतियाँ

<पी> ASP.NET Core एक आधुनिक, ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म फ्रेमवर्क है जिसे उच्च-प्रदर्शन और स्केलेबल वेब अनुप्रयोगों के निर्माण के लिए डिज़ाइन किया गया है। माइक्रोसर्विसेज से लेकर एंटरप्राइज़-ग्रेड एपीआई तक, इसकी वास्तुकला सुनिश्चित करती है कि डेवलपर्स उत्कृष्ट थ्रूपुट, न्यूनतम विलंबता और कुशल संसाधन उपयोग प्राप्त कर सकें।

<पी> इस लेख में, हम आपके ASP.NET कोर अनुप्रयोगों में प्रदर्शन और स्केलेबिलिटी को अधिकतम करने के लिए प्रमुख रणनीतियों, कॉन्फ़िगरेशन युक्तियों और कोड स्निपेट का पता लगाएंगे।

🚀 प्रदर्शन और स्केलेबिलिटी को समझना

<पी> कार्यान्वयन में उतरने से पहले, आइए दो महत्वपूर्ण अवधारणाओं को परिभाषित करें:

  • <पी> प्रदर्शन :आपका एप्लिकेशन किसी एक अनुरोध पर कितनी तेजी से प्रतिक्रिया देता है।
    (उदाहरण:प्रतिक्रिया समय को 300 एमएस से घटाकर 100 एमएस)।
  • <पी> स्केलेबिलिटी :आपका एप्लिकेशन बढ़े हुए लोड को कितनी अच्छी तरह संभालता है।
    (उदाहरण:क्रैश हुए बिना 10,000 समवर्ती उपयोगकर्ताओं को संभालना)।
<पी> ASP.NET कोर कुशल मेमोरी प्रबंधन, एसिंक्रोनस प्रोग्रामिंग, निर्भरता इंजेक्शन, कैशिंग और वितरित सिस्टम के लिए अंतर्निहित समर्थन दोनों के माध्यम से हासिल करता है।

<पी> ASP.NET कोर में प्रदर्शन और स्केलेबिलिटी को अधिकतम करना:सिद्ध रणनीतियाँ

⚙️ एसिंक्रोनस प्रोग्रामिंग का उपयोग करना

<पी> ASP.NET कोर रनटाइम एसिंक्रोनस I/O संचालन के लिए अनुकूलित है . async का उपयोग करके और await कीवर्ड, आप एक साथ अधिक अनुरोधों को संभालने के लिए थ्रेड्स को मुक्त कर सकते हैं।

✅ उदाहरण:एसिंक्रोनस कंट्रोलर एक्शन

 
 [ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
 private readonly IProductService _productService;
 public ProductsController(IProductService productService)
 {
 _productService = productService;
 }
 [HttpGet("{id}")]
 public async Task<IActionResult> GetProductById(int id)
 {
 var product = await _productService.GetProductAsync(id);
 if (product == null)
 return NotFound();
 return Ok(product);
 }
}
 
<पी> Task<IActionResult> का उपयोग करके , डेटाबेस क्वेरीज़ या एपीआई कॉल जैसे I/O-बाउंड ऑपरेशंस की प्रतीक्षा करते समय थ्रेड ब्लॉक नहीं होता है। यह भारी भार के तहत स्केलेबिलिटी में नाटकीय रूप से सुधार करता है।

🧩 मिडिलवेयर पाइपलाइन को अनुकूलित करें

<पी> मिडलवेयर घटक प्रत्येक अनुरोध को क्रमिक रूप से संभालते हैं। अपने मिडलवेयर को हल्का रखें और अनावश्यक प्रोसेसिंग से बचें।

✅ उदाहरण:कस्टम लाइटवेट मिडलवेयर

 
 public class RequestTimingMiddleware
{
 private readonly RequestDelegate _next;
 private readonly ILogger<RequestTimingMiddleware> _logger;
 public RequestTimingMiddleware(RequestDelegate next, ILogger<RequestTimingMiddleware> logger)
 {
 _next = next;
 _logger = logger;
 }
 public async Task InvokeAsync(HttpContext context)
 {
 var start = DateTime.UtcNow;
 await _next(context);
 var elapsed = DateTime.UtcNow - start;
 _logger.LogInformation($"Request took {elapsed.TotalMilliseconds} ms");
 }
}
// Registration in Program.cs
app.UseMiddleware<RequestTimingMiddleware>();
 
<पी> 👉टिप :
हल्के मिडलवेयर को शीर्ष पर रखें (जैसे रूटिंग या कम्प्रेशन), और भारी मिडलवेयर (जैसे प्रमाणीकरण) को पाइपलाइन में नीचे रखें।

⚡ रिस्पांस कैशिंग सक्षम करें

<पी> कैशिंग से परिणामों की पुनः गणना करने या डेटाबेस को बार-बार हिट करने की आवश्यकता कम हो जाती है। ASP.NET कोर एक अंतर्निहित रिस्पॉन्स कैशिंग मिडलवेयर प्रदान करता है .

✅ उदाहरण:रिस्पांस कैशिंग सक्षम करें

 
 // In Program.cs
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseResponseCaching();
app.MapGet("/time", (HttpContext context) =>
{
 context.Response.GetTypedHeaders().CacheControl =
 new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
 {
 Public = true,
 MaxAge = TimeSpan.FromSeconds(30)
 };
 return DateTime.UtcNow.ToString("T");
});
 
<पी> अब, बाद के अनुरोधों को 30 सेकंड के भीतर कैश से पूरा किया जाएगा - प्रदर्शन में काफी सुधार होगा।

🧠 EF Core के साथ डेटा एक्सेस को अनुकूलित करें

<पी> डेटाबेस पहुंच अक्सर मुख्य बाधा होती है। एंटिटी फ्रेमवर्क कोर का उपयोग करें कुशलतापूर्वक लागू करके:

  • <पी> AsNoTracking() केवल पढ़ने योग्य प्रश्नों के लिए

  • <पी> संकलित प्रश्न बार-बार पहुंच के लिए

  • <पी> कनेक्शन पूलिंग

✅ उदाहरण: का उपयोग करना AsNoTracking()

 
 public async Task<IEnumerable<Product>> GetAllProductsAsync()
{
 return await _context.Products
 .AsNoTracking() // Improves performance
 .ToListAsync();
}
 
<पी> यदि आप बार-बार इसी तरह की क्वेरी चलाते हैं, तो संकलित क्वेरी पर विचार करें :

 
 private static readonly Func<AppDbContext, int, Task<Product?>> _getProductById =
 EF.CompileAsyncQuery((AppDbContext context, int id) =>
 context.Products.FirstOrDefault(p => p.Id == id));
public Task<Product?> GetProductAsync(int id) =>
 _getProductById(_context, id);
 

🧰 आउटपुट कंप्रेशन का उपयोग करें

<पी> क्लाइंट को भेजने से पहले प्रतिक्रियाओं को संपीड़ित करने से बैंडविड्थ का उपयोग कम हो जाता है और डिलीवरी में तेजी आती है।

✅ उदाहरण:प्रतिक्रिया संपीड़न सक्षम करें

 
 // In Program.cs
builder.Services.AddResponseCompression(options =>
{
 options.EnableForHttps = true;
 options.MimeTypes = new[] { "text/plain", "application/json" };
});
var app = builder.Build();
app.UseResponseCompression();
 
<पी> अब सभी application/json प्रतिक्रियाएँ स्वचालित रूप से GZIP-संपीड़ित हो जाएंगी।

🌍 लोड संतुलन के साथ स्केलिंग

<पी> ट्रैफ़िक बढ़ने पर प्रदर्शन ट्यूनिंग पर्याप्त नहीं है। स्केलेबिलिटी अक्सर इसका उपयोग करके कई सर्वरों पर लोड वितरित करना शामिल होता है:

  • <पी> क्षैतिज स्केलिंग :अधिक सर्वर जोड़ना

  • <पी> लोड बैलेंसर्स :एनजीआईएनएक्स, एज़्योर फ्रंट डोर, एडब्ल्यूएस ईएलबी, आदि
<पी> वितरित सिस्टम में, सत्र स्थिति और कैशिंग बाहरीकरण किया जाना चाहिए (उदाहरण के लिए, रेडिस)।

✅ उदाहरण:वितरित कैश (रेडिस) कॉन्फ़िगर करें

 
 builder.Services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost:6379";
});
public class CacheService
{
 private readonly IDistributedCache _cache;
 public CacheService(IDistributedCache cache)
 {
 _cache = cache;
 }
 public async Task SetCacheAsync(string key, string value)
 {
 await _cache.SetStringAsync(key, value, new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
 });
 }
 public Task<string?> GetCacheAsync(string key) => _cache.GetStringAsync(key);
}
 
<पी> इससे आपका ऐप स्टेटलेस हो जाता है , जो लोड संतुलन के लिए आवश्यक है।

🧩 उच्च थ्रूपुट के लिए केस्ट्रेल और होस्टिंग कॉन्फ़िगर करें

<पी> Kestrel, अंतर्निहित ASP.NET कोर वेब सर्वर, ठीक से कॉन्फ़िगर होने पर प्रति सेकंड सैकड़ों हजारों अनुरोधों को संभाल सकता है।

✅ उदाहरण:केस्ट्रेल कॉन्फ़िगरेशन को अनुकूलित करें

 
 builder.WebHost.ConfigureKestrel(options =>
{
 options.Limits.MaxConcurrentConnections = 10000;
 options.Limits.MaxConcurrentUpgradedConnections = 1000;
 options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(30);
});
 
<पी> इसके अतिरिक्त:

  • <पी> रिवर्स प्रॉक्सी सर्वर का उपयोग करें (जैसे एनजीआईएनएक्स या आईआईएस) स्थिर फ़ाइल प्रबंधन और टीएलएस समाप्ति के लिए।
  • <पी> कंटेनरीकृत वातावरणमें तैनात करें ऑटो-स्केलिंग के लिए (उदाहरण के लिए, कुबेरनेट्स)।

🧮 मेमोरी और ऑब्जेक्ट पूलिंग का उपयोग करें

<पी> बार-बार ऑब्जेक्ट आवंटन और कचरा संग्रहण से बचने के लिए, ASP.NET कोर ऑब्जेक्ट पूलिंग का समर्थन करता है .

✅ उदाहरण: का उपयोग करना ArrayPool<T>

 
 using System.Buffers;
public class BufferService
{
 public void ProcessData()
 {
 var pool = ArrayPool<byte>.Shared;
 var buffer = pool.Rent(1024); // Rent 1KB buffer
 try
 {
 // Use the buffer
 }
 finally
 {
 pool.Return(buffer);
 }
 }
}
 
<पी> यह दृष्टिकोण ढेर आवंटन को कम करता है और जीसी दबाव को कम करता है - प्रदर्शन-संवेदनशील अनुप्रयोगों के लिए महत्वपूर्ण।

🧱 स्टार्टअप समय और मेमोरी फ़ुटप्रिंट को कम करें

  • <पी> अनावश्यक सेवाओं से बचें Program.cs में .

  • <पी> AddSingleton का उपयोग करें AddTransient के बजाय जहां उचित हो.

  • <पी> निर्भरताओं को ट्रिम करें *.csproj में फ़ाइलें.

✅ उदाहरण:न्यूनतम एपीआई सेटअप

 
 var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IProductService, ProductService>();
var app = builder.Build();
app.MapGet("/products", async (IProductService service) =>
 await service.GetAllProductsAsync());
app.Run();
 
<पी> न्यूनतम एपीआई बॉयलरप्लेट को कम करते हैं और स्टार्टअप प्रदर्शन में सुधार करते हैं।

📊 निगरानी और बेंचमार्किंग

<पी> आप जिसे मापते नहीं उसे सुधार नहीं सकते। जैसे टूल का उपयोग करें:

  • <पी> डॉटनेट-ट्रेस और डॉटनेट-काउंटर
  • <पी> एप्लिकेशन अंतर्दृष्टि
  • <पी> बेंचमार्कडॉटनेट

✅ उदाहरण:बेंचमार्कडॉटनेट का उपयोग करना

 
 [MemoryDiagnoser]
public class PerformanceTests
{
 private readonly ProductService _service = new();
 [Benchmark]
 public async Task FetchProducts()
 {
 await _service.GetAllProductsAsync();
 }
}
 
<पी> बाधाओं और स्मृति अक्षमताओं की पहचान करने के लिए इस बेंचमार्क को चलाएँ।

🧩 अतिरिक्त अनुकूलन युक्तियाँ

  • <पी> HTTP/2 या HTTP/3 सक्षम करें बेहतर समानता के लिए।

  • <पी> सीडीएन का उपयोग करें स्थैतिक संपत्तियों के लिए।

  • <पी> रोजगारकनेक्शन पूलिंग डेटाबेस और HTTP क्लाइंट के लिए।

  • <पी> IHttpClientFactory का प्रयोग करें सॉकेट थकावट को रोकने के लिए।

 
 builder.Services.AddHttpClient("MyClient")
 .SetHandlerLifetime(TimeSpan.FromMinutes(5));
 

🏁निष्कर्ष

<पी> ASP.NET कोर में उच्च प्रदर्शन और मापनीयता एसिंक्रोनस डिज़ाइन के संयोजन के माध्यम से प्राप्त की जाती है , कैशिंग , कुशल डेटा पहुंच , और स्मार्ट इंफ्रास्ट्रक्चर विकल्प.

<पी> चर्चा की गई रणनीतियों को लागू करके - मिडलवेयर और केस्ट्रेल कॉन्फ़िगरेशन को अनुकूलित करने से लेकर रेडिस और संपीड़न का लाभ उठाने तक - आपका ASP.NET कोर एप्लिकेशन कम विलंबता और उच्च विश्वसनीयता के साथ बड़े पैमाने पर कार्यभार को संभाल सकता है।


  1. रिस्पॉन्सिव नेविगेशन बार कैसे बनाएं (फ्लेक्सबॉक्स बनाम सीएसएस ग्रिड) रिस्पॉन्सिव नेविगेशन बार कैसे बनाएं (फ्लेक्सबॉक्स बनाम सीएसएस ग्रिड)

    आज के ट्यूटोरियल में, हम HTML और CSS के साथ एक शीर्ष नेविगेशन बार बनाने जा रहे हैं। हम इस नावबार को बनाने के दो अलग-अलग तरीकों को देखेंगे, एक तरीका फ्लेक्सबॉक्स के साथ, और दूसरा सीएसएस ग्रिड के साथ। यह दो दृष्टिकोणों के बीच के अंतरों की तुलना करने का एक अच्छा तरीका होगा। और आप देख सकते हैं कि आपको

  1. CSS का उपयोग करके अलग-अलग पक्षों के लिए मार्जिन सेट करना CSS का उपयोग करके अलग-अलग पक्षों के लिए मार्जिन सेट करना

    CSS हमें किसी तत्व के अलग-अलग पक्षों के आसपास के स्थान को नियंत्रित करने की अनुमति देता है। CSS मार्जिन प्रॉपर्टी निम्न गुणों के लिए एक शॉर्टहैंड है:मार्जिन-टॉप, मार्जिन-राइट, मार्जिन-बॉटम और मार्जिन-लेफ्ट। सिंटैक्स CSS मार्जिन प्रॉपर्टी का सिंटैक्स इस प्रकार है - चयनकर्ता { मार्जिन-टॉप:/*वैल्यू*/

  1. टिंकर का उपयोग करके वस्तुओं को फ्रेम के बीच में कैसे रखें? टिंकर का उपयोग करके वस्तुओं को फ्रेम के बीच में कैसे रखें?

    किसी फ़्रेम के बीच में ऑब्जेक्ट रखने के लिए, हम स्थान . का उपयोग कर सकते हैं तरीका। आइए एक उदाहरण लें और देखें कि यह कैसे किया जाता है। कदम - आवश्यक पुस्तकालयों को आयात करें और टिंकर फ्रेम का एक उदाहरण बनाएं। win.geometry . का उपयोग करके फ़्रेम का आकार सेट करें विधि। इसके बाद, एक बटन बनाएं