पारंपरिक भार संतुलन वातावरण में सत्र
<पी> सामान्य तौर पर, हम सभी वेब अनुप्रयोगों में इन-मेमोरी सत्र (रैम में संग्रहीत डेटा) का उपयोग करते हैं। यह अधिकांश पारंपरिक होस्टिंग परिवेशों में अच्छी तरह से काम करता है जहां हम अपने एप्लिकेशन को एक समर्पित वीएम या किसी साझा होस्टिंग योजना में होस्ट करते हैं। <पी> हालाँकि, जब ट्रैफ़िक बढ़ता है, तो हम कई वेब सर्वर बनाकर और लोड बैलेंसर्स का उपयोग करके ट्रैफ़िक को नियंत्रित करके लोड संतुलन की योजना बनाते हैं। इन परिदृश्यों में, सत्र काम नहीं करेगा क्योंकि अनुरोध (एकल सत्र से संबंधित) कई सर्वरों द्वारा परोसे जाएंगे (एक ही सत्र के अनुरोधों को पूरा करने के लिए एक ही सर्वर भी संभव है, लेकिन इसका सुझाव नहीं दिया गया है)। इसका समाधान सत्रों को SQL सर्वर में संग्रहीत करना है जो लोड बैलेंसिंग वातावरण के सभी वेब सर्वरों तक पहुंच योग्य है। Azure ऑटो-स्केल वातावरण में सत्र
<पी> इस पर सैद्धांतिक चर्चा के बजाय, आइए एक छोटा प्रोग्राम विकसित करके सीधे कुछ व्यावहारिक चर्चा में उतरें जो सत्रों का उपयोग करता है और देखें कि Azure में सत्र कैसे काम करते हैं। <पी> आइए निम्नलिखित वेब पेजों के साथ एक वेबसाइट बनाएं (आप एमवीसी एप्लिकेशन भी बना सकते हैं) और एप्लिकेशन को तैनात करें जैसा कि मेरे पिछले लेखों में से एक में दिखाया गया है, - Azure ऐप सेवा - विज़ुअल स्टूडियो से मौजूदा एप्लिकेशन को कॉन्फ़िगर करें
लॉगिन.aspx
<पी> यह पेज केवल उपयोगकर्ता नाम और पासवर्ड स्वीकार करता है। "लॉगिन" बटन पर क्लिक करें, एक सत्र बनाएं और एक सत्र में लॉग-इन उपयोगकर्ता नाम का मान संग्रहीत करें और उपयोगकर्ता को "Default.aspx" पर रीडायरेक्ट करें। <पी> कृपया ध्यान दें कि पेज उस वर्चुअल मशीन का आईपीएड्रेस "10.202.116.91" भी प्रदर्शित करता है जहां वेब साइट होस्ट की गई है। <पी> पी> Default.aspx
<पी> यह पृष्ठ सत्र में मूल्य के आधार पर निम्नलिखित संदेश प्रदर्शित करता है। <पी> यदि सत्र का कुछ मूल्य है, तो यह "उपयोगकर्ता को व्यवस्थापक के रूप में लॉग इन किया गया है। आप 10.202.116.91 में हैं" प्रदर्शित करता है जैसा कि नीचे स्क्रीन कैप्चर में दिखाया गया है। <पी> पी> <पी> यदि सत्र का कोई मूल्य नहीं है, तो यह "सत्र शून्य है। आप 10.202.116.91 में हैं" प्रदर्शित करता है जैसा कि नीचे स्क्रीन कैप्चर में दिखाया गया है। <पी> पी> <पी> कृपया ध्यान दें कि Login.aspx और Default.aspx दोनों में सर्वर का IPAddress एक ही है। सभी अनुरोधों को उसी सर्वर पर पुनः निर्देशित किया जा रहा है। <पी> साथ ही, नीचे दिए गए स्क्रीन कैप्चर के अनुसार, सत्रों को "ASP.NET_SessionID" नामक कुकी का उपयोग करके बनाए रखा जाता है। यह हममें से अधिकांश को परिचित होना चाहिए। <पी>
<पी> आइए मान लें कि हमारी वेबसाइट पर ट्रैफ़िक बढ़ गया है और हम इसे दो उदाहरणों तक बढ़ाना चाहेंगे। आइए आगे बढ़ें और उदाहरणों की संख्या दो तक बढ़ाएं। <पी> ध्यान दें: कृपया ध्यान दें कि आप फ्री और शेयर्ड टियर में इंस्टेंस की संख्या नहीं बढ़ा सकते। आपकी ऐप सेवा "बेसिक", "स्टैंडर्ड" या "प्रीमियम" स्तरों में होनी चाहिए। <पी>
<पी> आइए फिर से लॉगिन पेज तक पहुंचें और पेज को रीफ्रेश करके इसे कई बार एक्सेस करें। पेज को कितनी भी बार रिफ्रेश करने से आईपीएड्रेस नहीं बदलेगा। <पी> आप देखेंगे कि वही वेब सर्वर पेज परोस रहा है। हालाँकि हमने दो उदाहरणों में स्केलिंग सक्षम की है, ऐप सेवा अभी भी एक सर्वर से अनुरोधों को पूरा कर रही है। <पी> यह वास्तविक दुनिया के परिदृश्यों में एक समस्या हो सकती है क्योंकि लोड बैलेंसिंग सक्षम होने के बावजूद वही सर्वर अनुरोधों को पूरा कर रहा है और अन्य सर्वरों का ठीक से उपयोग नहीं किया जा रहा है। <पी> सभी अनुरोधों को पूरा करने का कारण ARR कुकी है, जैसा कि नीचे दिखाया गया है। अधिक जानकारी के लिए कृपया यहां देखें। <पी>
<पी> सरल शब्दों में, इस कुकी में सर्वर की जानकारी होती है जिससे प्रारंभिक अनुरोध परोसा गया है ताकि उसी सत्र से सभी बाद के अनुरोध उसी वीएम द्वारा परोसे जा सकें। <पी> आइए नीचे दिखाए अनुसार ऐप सेवा की एप्लिकेशन सेटिंग्स पर जाकर ARR कुकी सुविधा को अक्षम करें। <पी>
<पी> उपरोक्त स्क्रीन कैप्चर में दिखाए अनुसार "एआरआर एफ़िनिटी" को बंद करें और परिवर्तनों को सहेजने के लिए "सहेजें" बटन पर क्लिक करें। कृपया सभी सत्रों को साफ़ करने के लिए ऐप सेवा को पुनरारंभ करें। <पी> कृपया अब से थोड़ा सतर्क रहें। निम्नलिखित कुछ पैराग्राफ थोड़े भ्रमित करने वाले हैं। महत्वपूर्ण
<पी> ARR एफ़िनिटी को बंद करने से कुकी ARRAffinity कुकी बनाने की प्रक्रिया अक्षम हो जाएगी। इसलिए, जब कुकी अक्षम हो जाती है, तो अनुरोध किसी भी उपलब्ध सर्वर पर भेजा जा सकता है। इसलिए, इस बात की कोई गारंटी नहीं है कि सत्र ठीक से बनाए रखा जाएगा। सत्र केवल तभी काम करेंगे जब अनुरोध समान सर्वर से परोसे जा रहे हों। यदि कोई भी अनुरोध किसी अन्य सर्वर द्वारा परोसा जाता है (उस सर्वर के बजाय जहां सत्र संग्रहीत है) तो सत्र शून्य हो जाएगा। <पी> अब, वेब ऐप पर वापस आएं और लॉगिन पेज पर जाएं और नए आईपीएड्रेस "10.202.174.84" पर ध्यान दें। (आपके मामले में, शुरुआत में आपको पहले जैसा ही आईपीएड्रेस दिखाई दे सकता है। पेज को रिफ्रेश करने से आईपीएड्रेस बदल जाएगा। मेरे मामले में, मैंने नया आईपीएड्रेस पाने के लिए पेज को दो बार रिफ्रेश किया, जैसा कि नीचे दिखाया गया है।) <पी>
<पी> लॉगिन बटन पर क्लिक करने से यह गारंटी नहीं होगी कि फॉर्म 10.202.174.84 पर पोस्ट किया जाएगा। यह डेटा को दूसरे सर्वर पर पोस्ट कर सकता है जो मेरे मामले में "10.202.116.91" है। <पी> मेरे मामले में, जब मैंने उपरोक्त स्क्रीन कैप्चर के "लॉगिन" बटन पर क्लिक किया, तो यह मुझे निम्नलिखित मानों के साथ डिफ़ॉल्ट पृष्ठ पर ले गया। <पी>
- आईपी पता 10.202.174.84 है (मेरे लॉगिन पेज में भी यही है)।
- सत्र शून्य है. कारण यह है कि, जब लॉगिन पर क्लिक किया जाता है, तो अनुरोध दूसरे उदाहरण ("10.202.116.91") पर चला गया होगा जहां मेरा सत्र संग्रहीत हो गया था।
- पेज को कुछ बार रीफ़्रेश करें.

<पी> कृपया निम्नलिखित का ध्यान रखें। - सत्र का कुछ मूल्य "व्यवस्थापक" है।
- आईपीएड्रेस 10.202.116.91 है।
<पी> तो, यहां निष्कर्ष यह है कि जब आप ऑटो-स्केलिंग सुविधा का उपयोग करके लोड बैलेंसर को कॉन्फ़िगर करते हैं तो "सत्र" Azure ऐप सेवा में अपेक्षा के अनुरूप काम नहीं करेगा। <पी> यहाँ उद्धारकर्ता आता है. रेडिस कैश प्रदाता। नीचे Azure आधिकारिक वेब साइट से परिभाषा दी गई है। <पी> Azure Redis Cache लोकप्रिय ओपन-सोर्स Redis कैश पर आधारित है। यह आपको एक सुरक्षित, समर्पित Redis कैश तक पहुंच प्रदान करता है, जो Microsoft द्वारा प्रबंधित है और Azure के भीतर किसी भी एप्लिकेशन से पहुंच योग्य है। <पी> हमारे सत्रों को अपेक्षा के अनुरूप संचालित करने के लिए आवश्यक कदम नीचे दिए गए हैं। - Azure प्रबंधन पोर्टल से Redis कैश बनाएं।
- एज़्योर रेडिस कैश का उपयोग करने के लिए एप्लिकेशन को कॉन्फ़िगर करें।
- सत्रों का उपयोग करें।
<पी> Azure प्रबंधन पोर्टल से Redis कैश बनाएं। <पी> आइए Azure प्रबंधन पोर्टल का उपयोग करके रेडिस कैश बनाना शुरू करें जैसा कि नीचे दिखाया गया है। <पी>
<पी> रेडिस कैश का विवरण प्रदान करें जैसा कि नीचे दिखाया गया है। <पी>
<पी> उपरोक्त स्क्रीन कैप्चर के "बनाएँ" बटन पर क्लिक करें। रेडिस कैश बनाने में कुछ मिनट लगेंगे। एज़्योर रेडिस कैश का उपयोग करने के लिए एप्लिकेशन को कॉन्फ़िगर करें
<पी> आइए हमारे द्वारा अभी बनाए गए रेडिस कैश का उपयोग करने के लिए एप्लिकेशन को कॉन्फ़िगर करें। <पी>
<पी> जैसा कि ऊपर स्क्रीन कैप्चर में दिखाया गया है, पैकेज मैनेजर कंसोल पर जाएं और "इंस्टॉल-पैकेज StackExchange.Redis" कमांड टाइप करें और "एंटर" पर क्लिक करें। <पी>
<पी> अब, हमने आवश्यक पैकेज सफलतापूर्वक स्थापित कर लिए हैं। (कृपया ध्यान दें कि आपका .NET फ्रेमवर्क 4 या उससे अधिक होना चाहिए।) <पी> असेंबली का उपयोग करने के लिए, हमें पहले अपने Login.aspx पेज और Default.aspx पेज दोनों में निम्नलिखित नेमस्पेस जोड़ना होगा। <पी> StackExchange.Redis; का उपयोग करना <पी> आइए प्रोजेक्ट में "RedisConnection" नामक एक नया वर्ग जोड़ें। कृपया संलग्न परियोजना देखें। <पी> रेडिस कैश से कनेक्ट करने के लिए, हमें निम्नलिखित जानकारी को ConnectionMultiplexer.Connect फ़ंक्शन में पास करना होगा। आइए उन्हें पोर्टल से प्राप्त करें। <पी>
<पी>
- रेडिस कैश यूआरएल.
- कुंजियाँ.
<पी> कृपया कोड में कुंजियाँ न सहेजें। चीजों को सरल बनाने के लिए, मैं स्रोत कोड में कुंजियाँ संग्रहीत कर रहा हूँ। कृपया इस पृष्ठ को देखें जो क्रेडेंशियल्स को संग्रहीत करने के तरीके के बारे में जानकारी प्रदान करता है। <पी> अब हम उस क्लास के साथ तैयार हैं जिसका उपयोग रेडिस कैश से कनेक्ट करने के लिए किया जा सकता है। आइए रेडिस कैश में सत्र बनाने के लिए कक्षा का उपयोग करें। <पी> अपनी Login.aspx.cs फ़ाइल खोलें और कोड की निम्न पंक्ति बदलें।
Session["login"] = this.txtUsername.Text.Trim();
<पी> साथ.
IDatabase cache = RedisConnection.Connection.GetDatabase();
cache.StringSet("login", this.txtUsername.Text.Trim());
<पी> Default.aspx.cs खोलें और कोड की निम्न पंक्ति बदलें।
protected void Page_Load(object sender, EventArgs e)
{
if (Session["login"] == null)
{
Response.Write("Session is NULL. You are in " + Request.ServerVariables["LOCAL_ADDR"]);
}
else
{
Response.Write("Logged in user is " + Session["login"] + ". You are in " + Request.ServerVariables["LOCAL_ADDR"]);
}
}
<पी> साथ.
protected void Page_Load(object sender, EventArgs e)
{
IDatabase cache = RedisConnection.Connection.GetDatabase();
string strLoginValue = cache.StringGet("login");
if (strLoginValue == null)
{
Response.Write("Session is NULL. You are in " + Request.ServerVariables["LOCAL_ADDR"]);
}
else
{
Response.Write("Logged in user is " + strLoginValue + ". You are in " + Request.ServerVariables["LOCAL_ADDR"]);
}
}
<पी> आइए कोड को Azure ऐप सेवा पर तैनात करें और परिवर्तनों की समीक्षा करें और नीचे दिखाए अनुसार लॉगिन पेज पर नेविगेट करें। <पी> पी> <पी> आईपीएड्रेस पर ध्यान दें. यह 10.202.174.84 है। अब “लॉगिन” बटन पर क्लिक करें। जैसा कि नीचे दिखाया गया है, आपको Default.aspx पृष्ठ पर ले जाया जाएगा। <पी> पी> <पी> ध्यान दें कि उपरोक्त स्क्रीन कैप्चर में, हालांकि आईपीएड्रेस अलग है, फिर भी हम उपयोगकर्ता नाम "एडमिन" देख पा रहे हैं क्योंकि सत्र अब एक वितरित स्थान "रेडिस कैश" में संग्रहीत हैं जो दोनों उदाहरणों के लिए पहुंच योग्य है। <पी> अब पेज को कई बार रिफ्रेश करते रहें। आप देखेंगे कि आईपी पते बदल रहे हैं लेकिन उपयोगकर्ता नाम का मूल्य नहीं। <पी> बस इतना ही हमने सीखा है कि लोड बैलेंसिंग वातावरण में सत्रों को कैसे संग्रहीत किया जाए। Redis Cache में आप किसी भी प्रकार का डेटा स्टोर कर सकते हैं। <पी> आशा है आपको लेख पढ़कर आनंद आया होगा। आपकी प्रतिक्रिया वास्तव में सराहनीय है।