প্রথাগত লোড ব্যালেন্সিং পরিবেশে সেশন
সাধারণভাবে, আমরা সমস্ত ওয়েব অ্যাপ্লিকেশনে ইন-মেমরি সেশন (RAM-এ সংরক্ষিত ডেটা) ব্যবহার করি। এটি বেশিরভাগ ঐতিহ্যবাহী হোস্টিং পরিবেশে ভাল কাজ করে যেখানে আমরা একটি ডেডিকেটেড VM বা কোনো শেয়ার করা হোস্টিং প্ল্যানে আমাদের অ্যাপ্লিকেশন হোস্ট করি।
যাইহোক, যখন ট্র্যাফিক বৃদ্ধি পায়, আমরা একাধিক ওয়েব সার্ভার তৈরি করে এবং লোড ব্যালেন্সার ব্যবহার করে ট্র্যাফিক নিয়ন্ত্রণ করে লোড ব্যালেন্স করার পরিকল্পনা করি। এই পরিস্থিতিতে, সেশনটি কাজ করবে না কারণ অনুরোধগুলি (একটি একক সেশনের সাথে সম্পর্কিত) একাধিক সার্ভার দ্বারা পরিবেশন করা হবে (একই সেশনের অনুরোধগুলি পরিবেশন করার জন্য একই সার্ভারও সম্ভব, তবে এটি প্রস্তাবিত নয়)। সমাধান হল একটি SQL সার্ভারে সেশনগুলি সংরক্ষণ করা যা লোড ব্যালেন্সিং পরিবেশের সমস্ত ওয়েব সার্ভারে অ্যাক্সেসযোগ্য৷
Azure অটো-স্কেল পরিবেশে সেশন
এই বিষয়ে একটি তাত্ত্বিক আলোচনার পরিবর্তে, আসুন একটি ছোট প্রোগ্রাম তৈরি করে সরাসরি কিছু ব্যবহারিক আলোচনায় ঝাঁপিয়ে পড়ি যা সেশনগুলি ব্যবহার করে এবং দেখুন কিভাবে Azure-এ সেশনগুলি কাজ করে৷
আসুন নিম্নলিখিত ওয়েব পৃষ্ঠাগুলির সাথে একটি ওয়েবসাইট তৈরি করি (আপনি এমভিসি অ্যাপ্লিকেশনও তৈরি করতে পারেন) এবং আমার আগের নিবন্ধগুলির একটিতে দেখানো অ্যাপ্লিকেশনটি স্থাপন করি,
- Azure অ্যাপ পরিষেবা - ভিজ্যুয়াল স্টুডিও থেকে বিদ্যমান অ্যাপ্লিকেশন কনফিগার করুন
Login.aspx
এই পৃষ্ঠাটি শুধুমাত্র ব্যবহারকারীর নাম এবং পাসওয়ার্ড গ্রহণ করে। "লগইন" বোতামে ক্লিক করুন, একটি সেশন তৈরি করুন এবং একটি সেশনে লগ-ইন করা ব্যবহারকারীর নামের মান সংরক্ষণ করুন এবং ব্যবহারকারীকে "Default.aspx" এ পুনঃনির্দেশ করুন৷
অনুগ্রহ করে মনে রাখবেন যে পৃষ্ঠাটি ভার্চুয়াল মেশিনের আইপিএড্রেস "10.202.116.91"ও প্রদর্শন করে যেখানে ওয়েব সাইটটি হোস্ট করা হয়েছে৷
Default.aspx
এই পৃষ্ঠাটি সেশনের মানের উপর ভিত্তি করে নিম্নলিখিত বার্তাগুলি প্রদর্শন করে৷
৷যদি সেশনের কিছু মান থাকে, তাহলে এটি "প্রশাসক হিসাবে লগ ইন করা ব্যবহারকারী। আপনি 10.202.116.91 এ" প্রদর্শন করে যা নীচের স্ক্রীন ক্যাপচারে দেখানো হয়েছে।
যদি সেশনের কোনো মান না থাকে, তাহলে এটি "সেশন ইজ শূন্য। আপনি 10.202.116.91-এ আছেন" নিচের স্ক্রীন ক্যাপচারে দেখানো হয়েছে।
অনুগ্রহ করে লক্ষ্য করুন যে Login.aspx এবং Default.aspx উভয়ের সার্ভারের IPA ঠিকানা একই। সমস্ত অনুরোধ একই সার্ভারে পুনঃনির্দেশিত হচ্ছে৷
৷এছাড়াও, নীচের স্ক্রীন ক্যাপচার অনুসারে, "ASP.NET_SessionID" নামে একটি কুকি ব্যবহার করে সেশনগুলি রক্ষণাবেক্ষণ করা হয়৷ এটি আমাদের বেশিরভাগের কাছে পরিচিত হওয়া উচিত।

ধরা যাক যে আমাদের ওয়েবসাইটে ট্রাফিক বেড়েছে এবং আমরা এটিকে দুটি দৃষ্টান্তে স্কেল করতে চাই। চলুন এগিয়ে যাই এবং ইনস্ট্যান্সের সংখ্যা বাড়িয়ে করি দুই।
দ্রষ্টব্য: অনুগ্রহ করে মনে রাখবেন যে আপনি বিনামূল্যে এবং ভাগ করা স্তরগুলিতে উদাহরণের সংখ্যা বাড়াতে পারবেন না৷ আপনার অ্যাপ পরিষেবা "বেসিক", "স্ট্যান্ডার্ড" বা "প্রিমিয়াম" স্তরে হওয়া উচিত।

আসুন আবার লগইন পৃষ্ঠাটি অ্যাক্সেস করি এবং পৃষ্ঠাটি রিফ্রেশ করে এটি একাধিকবার অ্যাক্সেস করি। পৃষ্ঠাটি যতবার রিফ্রেশ করলে তা আইপিএড্রেস পরিবর্তন করবে না।
আপনি লক্ষ্য করবেন যে একই ওয়েব সার্ভার পৃষ্ঠাগুলি পরিবেশন করছে। যদিও আমরা দুটি দৃষ্টান্তে স্কেলিং সক্ষম করেছি, অ্যাপ পরিষেবা এখনও একটি সার্ভার থেকে অনুরোধগুলি পরিবেশন করছে৷
বাস্তব-বিশ্বের পরিস্থিতিতে এটি একটি সমস্যা হতে পারে কারণ লোড ব্যালেন্সিং সক্ষম থাকা সত্ত্বেও একই সার্ভার অনুরোধগুলি পরিবেশন করছে এবং অন্যান্য সার্ভারগুলি সঠিকভাবে ব্যবহার করা হচ্ছে না৷
নীচে দেখানো হিসাবে ARR কুকির কারণে সমস্ত অনুরোধ পরিবেশন করা হচ্ছে। আরও তথ্যের জন্য, দয়া করে এখানে দেখুন৷
৷

সহজ শর্তে, এই কুকিতে সার্ভারের তথ্য রয়েছে যেখান থেকে প্রাথমিক অনুরোধটি পরিবেশিত হয়েছে যাতে একই সেশন থেকে পরবর্তী সমস্ত অনুরোধ একই VM দ্বারা পরিবেশিত হয়।
আসুন নীচে দেখানো হিসাবে অ্যাপ পরিষেবার অ্যাপ্লিকেশন সেটিংসে নেভিগেট করে ARR কুকি বৈশিষ্ট্যটি অক্ষম করি৷

উপরের স্ক্রীন ক্যাপচারে দেখানো "ARR অ্যাফিনিটি" বন্ধ করুন এবং পরিবর্তনগুলি সংরক্ষণ করতে "সংরক্ষণ করুন" বোতামে ক্লিক করুন। সমস্ত সেশন সাফ করতে অনুগ্রহ করে অ্যাপ পরিষেবা পুনরায় চালু করুন৷
৷দয়া করে এখন থেকে একটু সাবধানে থাকবেন। নিচের কয়েকটি অনুচ্ছেদ কিছুটা বিভ্রান্তিকর।
গুরুত্বপূর্ণ
ARR অ্যাফিনিটি বন্ধ করা কুকি ARRAffinity কুকি তৈরির প্রক্রিয়াটিকে অক্ষম করবে৷ সুতরাং, যখন কুকি নিষ্ক্রিয় করা হয়, তখন অনুরোধগুলি উপলব্ধ সার্ভারগুলির যেকোনো একটিতে পাঠানো হতে পারে। সুতরাং, সেশনগুলি সঠিকভাবে রক্ষণাবেক্ষণ করা হবে এমন কোনও গ্যারান্টি নেই৷ সেশনগুলি তখনই কাজ করবে যখন একই সার্ভার থেকে অনুরোধগুলি পরিবেশিত হচ্ছে৷ যদি কোনো অনুরোধ অন্য সার্ভার দ্বারা পরিবেশিত হয় (যেখানে সেশনটি সংরক্ষিত থাকে তার পরিবর্তে) তাহলে সেশনগুলি NULL হবে৷
এখন, ওয়েব অ্যাপে ফিরে আসুন এবং লগইন পৃষ্ঠায় নেভিগেট করুন এবং নতুন আইপিএড্রেস “10.202.174.84” লক্ষ্য করুন। (আপনার ক্ষেত্রে, প্রাথমিকভাবে আপনি আগের মতো একই আইপিএড্রেস দেখতে পাবেন। পৃষ্ঠাটি রিফ্রেশ করলে আইপিএড্রেস পরিবর্তন হবে। আমার ক্ষেত্রে, নীচে দেখানো হিসাবে নতুন আইপিএড্রেস পেতে আমি পৃষ্ঠাটি দুবার রিফ্রেশ করেছি।)

লগইন বোতামে ক্লিক করলে ফর্মটি 10.202.174.84-এ পোস্ট করা হবে এমন নিশ্চয়তা দেবে না। এটি অন্য সার্ভারে ডেটা পোস্ট করতে পারে যা আমার ক্ষেত্রে "10.202.116.91"।
আমার ক্ষেত্রে, আমি উপরের স্ক্রীন ক্যাপচারের "লগইন" বোতামে ক্লিক করলে, এটি আমাকে নিম্নোক্ত মান সহ ডিফল্ট পৃষ্ঠায় নিয়ে যায়।

- আইপি ঠিকানা হল 10.202.174.84 (এটি আমার লগইন পৃষ্ঠায় একই)।
- সেশনটি শূন্য। কারণ হল, যখন লগইন ক্লিক করা হয়, অনুরোধটি হয়ত অন্য ইন্সট্যান্সে (“10.202.116.91”) যেখানে আমার সেশন সংরক্ষিত হয়েছে।
- পৃষ্ঠাটি কয়েকবার রিফ্রেশ করুন।
অনুগ্রহ করে নিম্নলিখিতগুলি পর্যবেক্ষণ করুন৷
৷- সেশনের কিছু মান "অ্যাডমিন" আছে।
- IPAddress হল 10.202.116.91।
সুতরাং, এখানে উপসংহার হল "সেশনগুলি" Azure অ্যাপ পরিষেবাতে প্রত্যাশিতভাবে কাজ করবে না যখন আপনি স্বয়ংক্রিয়-স্কেলিং বৈশিষ্ট্য ব্যবহার করে লোড ব্যালেন্সার কনফিগার করবেন।
এখানে ত্রাণকর্তা আসে. Redis ক্যাশে প্রদানকারী. নিচে Azure অফিসিয়াল ওয়েব সাইট থেকে সংজ্ঞা দেওয়া হল।
Azure রেডিস ক্যাশে জনপ্রিয় ওপেন সোর্স রেডিস ক্যাশের উপর ভিত্তি করে। এটি আপনাকে একটি নিরাপদ, ডেডিকেটেড রেডিস ক্যাশে অ্যাক্সেস দেয়, মাইক্রোসফ্ট দ্বারা পরিচালিত এবং Azure-এর মধ্যে যেকোনো অ্যাপ্লিকেশন থেকে অ্যাক্সেসযোগ্য৷
আমাদের সেশনগুলিকে প্রত্যাশিতভাবে কাজ করার জন্য প্রয়োজনীয় পদক্ষেপগুলি নীচে দেওয়া হল৷
- অ্যাজুর ম্যানেজমেন্ট পোর্টাল থেকে রেডিস ক্যাশে তৈরি করুন।
- অ্যাজুর রেডিস ক্যাশে ব্যবহার করার জন্য অ্যাপ্লিকেশনটি কনফিগার করুন।
- সেশন ব্যবহার করুন।
Azure ব্যবস্থাপনা পোর্টাল থেকে Redis ক্যাশে তৈরি করুন।
আসুন নীচে দেখানো হিসাবে Azure ব্যবস্থাপনা পোর্টাল ব্যবহার করে Redis ক্যাশে তৈরি করা শুরু করি।
নীচে দেখানো হিসাবে Redis ক্যাশের বিশদ বিবরণ প্রদান করুন।
উপরের স্ক্রীন ক্যাপচারের "তৈরি করুন" বোতামে ক্লিক করুন। রেডিস ক্যাশে তৈরি করতে কয়েক মিনিট সময় লাগবে।
Azure Redis ক্যাশে ব্যবহার করার জন্য অ্যাপ্লিকেশন কনফিগার করুন
আসুন আমরা এইমাত্র তৈরি করা Redis ক্যাশে ব্যবহার করার জন্য অ্যাপ্লিকেশনটি কনফিগার করি।
উপরের স্ক্রীন ক্যাপচারে যেমন দেখানো হয়েছে, প্যাকেজ ম্যানেজার কনসোলে যান এবং "ইনস্টল-প্যাকেজ স্ট্যাকএক্সচেঞ্জ. রেডিস" কমান্ড টাইপ করুন এবং "এন্টার" ক্লিক করুন৷
এখন, আমরা সফলভাবে প্রয়োজনীয় প্যাকেজ ইনস্টল করেছি। (অনুগ্রহ করে মনে রাখবেন যে আপনার .NET ফ্রেমওয়ার্ক 4 বা তার বেশি হওয়া উচিত।)
সমাবেশগুলি ব্যবহার করার জন্য, আমাদের প্রথমে আমাদের Login.aspx পৃষ্ঠা এবং Default.aspx পৃষ্ঠা উভয়েই নিম্নলিখিত নামস্থান যোগ করতে হবে৷
StackExchange.Redis ব্যবহার করা;
প্রজেক্টে "RedisConnection" নামে একটি নতুন ক্লাস যোগ করা যাক। অনুগ্রহ করে সংযুক্ত প্রকল্প দেখুন৷
Redis ক্যাশে সংযোগ করার জন্য, আমাদের নিম্নলিখিত তথ্য 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 পৃষ্ঠায় নিয়ে যাওয়া হবে।
লক্ষ্য করুন যে উপরের স্ক্রিন ক্যাপচারে, যদিও আইপিএড্রেস ভিন্ন, তবুও আমরা ব্যবহারকারীর নাম "অ্যাডমিন" দেখতে পাচ্ছি কারণ সেশনগুলি এখন একটি বিতরণ করা অবস্থান "রেডিস ক্যাশে" এ সংরক্ষণ করা হয়েছে যা উভয় ক্ষেত্রেই অ্যাক্সেসযোগ্য৷
এখন, পৃষ্ঠাটি একাধিকবার রিফ্রেশ করতে থাকুন। আপনি লক্ষ্য করবেন যে IP ঠিকানাগুলি পরিবর্তন হচ্ছে কিন্তু ব্যবহারকারীর নামের মান নয়৷
এটাই। আমরা শিখেছি কিভাবে সেশনগুলিকে লোড ব্যালেন্সিং এনভায়রনমেন্টে সংরক্ষণ করতে হয়। আপনি রেডিস ক্যাশে যেকোন ধরনের ডেটা সংরক্ষণ করতে পারেন।
আশা করি আপনি নিবন্ধটি পড়ে উপভোগ করেছেন। আপনার প্রতিক্রিয়া সত্যিই প্রশংসা করা হয়.