একাধিক ওয়েব সার্ভারগুলিতে সেশন স্টিকিনেস কীভাবে অর্জিত হয়?


23

স্ট্যাকওভারফ্লো / সার্ভারফল্টের কতটি ওয়েব সার্ভার রয়েছে?

যদি উত্তরটি 'একের বেশি' হয় তবে ডিএনএসের ভোটগ্রহণের সময় কী এটি সেশন স্টিকিনেস অর্জন করতে পারে ?


আসলেই নয়, তবে যদি এটি আলাদাভাবে বর্ণিত হয় তবে এটি একটি আকর্ষণীয় প্রশ্ন তৈরি করতে পারে।

আপনার প্রশ্নটি পুনঃব্যবহার করা উচিত। শিরোনামটি "একাধিক ওয়েব সার্ভারগুলিতে সেশন স্টিকিনেস কীভাবে অর্জন করা যায়" তে পরিবর্তন করুন? বা এরকম কিছু ...
উইলিয়াম ব্রেন্ডেল

আমাকে সঠিক বাক্যাংশটি দেখানোর জন্য আপনি কি আমাকে অনুগ্রহ করতে পারেন?

1
এই ধারণাটি যে একাধিক সার্ভার থাকা চটচটে সেশনগুলি বোঝায় - এটি একটি ঘৃণা - আমাকে ব্যথা করে।
দোলা

উত্তর:


42

বড় ওয়েবসাইটগুলি একাধিক মেশিন জুড়ে "লোড ভারসাম্য" হতে পারে। অনেকগুলি ভারসাম্যপূর্ণ সেটআপগুলিতে কোনও ব্যবহারকারী একটি অধিবেশন চলাকালীন যে কোনও ব্যাকএন্ড মেশিনে আঘাত করতে পারে। এর কারণে, অনেকগুলি মেশিনকে ব্যবহার করে ব্যবহারকারীদের সেশনগুলি ভাগ করে নিতে দেয়।

নির্বাচিত পদ্ধতিটি নিযুক্ত লোড ব্যালেন্সিংয়ের শৈলীর উপর নির্ভর করবে, পাশাপাশি ব্যাকএন্ড স্টোরেজের উপলব্ধতা / ক্ষমতা:

সেশনের তথ্য কেবল কুকিগুলিতে সঞ্চিত : সেশন তথ্য (কেবল একটি সেশন সনাক্তকারী নয়) ব্যবহারকারীর কুকিতে সংরক্ষণ করা হয়। উদাহরণস্বরূপ, ব্যবহারকারীর কুকিতে তাদের শপিংয়ের ঝুড়ির সামগ্রী থাকতে পারে। সেশন ডেটা নিয়ে ব্যবহারকারীদের হস্তক্ষেপ রোধ করতে কুকির সাথে একটি এইচএমএসি সরবরাহ করা যেতে পারে। এই পদ্ধতিটি বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য সম্ভবত কমপক্ষে উপযুক্ত:

  • কোনও ব্যাকএন্ড স্টোরেজ প্রয়োজন হয় না
  • ব্যবহারকারীর প্রতিবার একই মেশিনটি আঘাত করার দরকার নেই, সুতরাং ডিএনএস লোড ব্যালেন্সিংটি কাজে লাগানো যেতে পারে
  • কোনও ডাটাবেস মেশিন থেকে সেশন তথ্য পুনরুদ্ধার করার সাথে কোনও বিলম্ব নেই (যেমন এটি HTTP অনুরোধের সাথে সরবরাহ করা হয়েছে)। যদি আপনার সাইটটি বিভিন্ন মহাদেশের মেশিনগুলির দ্বারা ভারসাম্যপূর্ণ হয় তবে দরকারী।
  • সেশনে সংরক্ষণ করা যায় এমন পরিমাণের পরিমাণ সীমাবদ্ধ (4K কুকি আকারের সীমা দ্বারা)
  • কোনও ব্যবহারকারী যদি তাদের সেশনের বিষয়বস্তু দেখতে না পান তবে এনক্রিপশনটি নিয়োগ করতে হবে
  • সেশন ডেটা ব্যবহারকারীর ছদ্মবেশ রোধে এইচএমএসি (বা অনুরূপ) নিয়োগ করতে হবে
  • যেহেতু সেশন ডেটা সার্ভারের পাশে সংরক্ষণ করা হয়নি তাই বিকাশকারীদের পক্ষে ডিবাগ করা আরও কঠিন

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

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

ভাগ করা ব্যাকএন্ড ডাটাবেস বা কী / মান স্টোর : সেশন তথ্য একটি ব্যাকএন্ড ডাটাবেসে সংরক্ষণ করা হয়, যা সমস্ত ওয়েবসার্সের কাছে ক্যোয়ারী এবং আপডেটের অ্যাক্সেস রয়েছে। ব্যবহারকারীর ব্রাউজারটি একটি সনাক্তকারী (যেমন সেশন আইডি) সম্বলিত একটি কুকি সংরক্ষণ করে, সেশনের তথ্যের দিকে ইঙ্গিত করে। এটি সম্ভবত তিনটির মধ্যে সবচেয়ে পরিষ্কার পদ্ধতি:

  • ব্যবহারকারীকে কখনই সঞ্চিত অধিবেশন তথ্য প্রকাশের প্রয়োজন হবে না।
  • ব্যবহারকারীর প্রতিবার একই মেশিনটি আঘাত করার দরকার নেই, সুতরাং ডিএনএস লোড ব্যালেন্সিংটি কাজে লাগানো যেতে পারে
  • একটি অসুবিধা হ'ল বাধা যা যা ব্যাকএন্ড স্টোরেজ সিস্টেমে নিযুক্ত করা যেতে পারে।
  • সেশন তথ্য মেয়াদোত্তীর্ণ হতে পারে এবং ধারাবাহিকভাবে ব্যাক আপ করা যেতে পারে।

সামগ্রিকভাবে, বেশিরভাগ গতিশীল ওয়েব অ্যাপ্লিকেশনগুলি বেশ কয়েকটি ডাটাবেস প্রশ্ন বা কী / মান স্টোরের অনুরোধ সম্পাদন করে, তাই ডাটাবেস বা কী / মান স্টোরটি সেশন ডেটার লজিক্যাল স্টোরেজ অবস্থান location


2
+1 মোটামুটি বিস্তৃত উত্তর এবং এটি লিখতে আমার সংরক্ষণ করে। :) যতক্ষণ না ডিবি স্টোরেজ চলে যায়, কোনও রিলেশনাল ডাটাবেস সম্ভবত ভুল জিনিস। একটানা মেমক্যাচড কাঁটাচামড়ার মতো কিছু ভাল। মেমচেচিব উপযুক্ত হতে পারে। আপনি সার্ভারের মধ্যে সেশন তথ্য প্রতিলিপি থেকে বাদ। এটি সর্বোত্তম পদ্ধতি নয়, তবে টমক্যাটের মতো জিনিস এটি করে, তাই ডকুমেন্টিংয়ের পক্ষে মূল্যবান।
ডেভিড প্যাশলে

গুগল, টুইটার বা ফেসবুক কোন অ্যাপ্রোচ ব্যবহার করে?
ড্যানিবয়

1
গুগল, টুইটার বা ফেসবুক সম্পর্কে নিশ্চিত নয়, তবে রেডিস একটি সেশন স্টোরের জন্য দুর্দান্ত fit এটির মূলত "অবিচ্ছিন্ন মেমক্যাচড" ডেভিড পাশলি ২০০৯ সালে সুপারিশ করছিলেন, যখন রেডিস ভ্রূণ ছিলেন।
বেন আর

4

যদি আপনার প্রশ্নটি হয় কীভাবে একাধিক ফ্রন্ট-এন্ড ওয়েব সার্ভারগুলিতে সেশনগুলি বজায় রাখা যায় তবে উত্তরটি সাধারণত কেন্দ্রীয়ীকৃত ডেটাবেস ব্যবহার করা হয়। স্থানীয় ফাইল সিস্টেমে সেশন ফাইলগুলি ট্র্যাক করার জন্য ওয়েব সার্ভারের উদাহরণগুলির উপর নির্ভর করার পরিবর্তে আপনি সেশন আইডিস এবং ডেটা একটি কেন্দ্রীয় ডিবিতে লিখবেন এবং তার পরিবর্তে সমস্ত ওয়েব সার্ভারগুলি সেখান থেকে ডেটা পুনরুদ্ধার করবে।


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

2
রিলেশনাল ডাটাবেসে সেশনস সংরক্ষণ করা সবসময় খারাপ ধারণা is ক্ষণস্থায়ী ডেটা সঞ্চয় করার জন্য আপনার ডাটাবেসগুলি ব্যবহার করা উচিত নয়।
ডেভিড প্যাশলে

2

নিম্যাচড ব্যবহার করা একটি ভাল সমাধান বলে মনে হচ্ছে @ ডেভিড পাশলে যেমন উল্লেখ করেননি

এর অর্থ সমস্ত সার্ভারের দ্বারা একটি রিমোট মেমক্যাচ করা দৃষ্টান্তটি ভাগ করা এবং মেমক্যাস পিইসিএল এক্সটেনশন ব্যবহার করা যা এর নিজস্ব সেশন হ্যান্ডলার সরবরাহ করে।

এটি কেবল পিএইচপি কনফিগারেশনে দুটি পরামিতি পরিবর্তন করতে হবে!

এখানে একটি ভাল টিউটোরিয়াল http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-used-memcached/


তবে একাধিক ডাটাসেন্টার কী আছে?
ড্যানিবয়


0

আপনি একটি কুকি সেট করতে পারেন।

আপনি দূরবর্তী আইপি এর একটি হ্যাশ গণনা করতে পারেন (এর সর্বাধিকতম, বিজোড় সংখ্যাযুক্ত দূরবর্তী হোস্টগুলি সার্ভার এ যায়, এমনকি সংখ্যাযুক্ত হোস্টগুলি সার্ভার বিতে যায়)।

দেখে মনে হচ্ছে আপনি কিছু মানের মাধ্যমে এটি করতে পারেন যা উত্স সিস্টেমের সাথে থাকে যদি আপনি একটি এসএসএল টানেল ব্যবহার করেন।

সাধারণত উপরের প্রতিটি ব্যবস্থার জন্য একটি "বিপরীত প্রক্সি" সার্ভার বা কোনও ধরণের লোড ব্যালেন্সার প্রয়োজন। এই লোড ব্যালেন্সারটি ট্র্যাফিক গ্রহণ করে এবং তারপরে উপরের কোনও মানদণ্ডের উপর ভিত্তি করে যেকোনো সার্ভারে সেশন শুরুতে এটি পরিচালনা করে।

"ডিএনএস পোলিং" বলতে আপনি কী বোঝাতে চেয়েছেন তা অবশ্য আমি নিশ্চিত নই


0

ক) আপনি ব্যবহারকারীর কুকিতে সেশন তথ্য সংরক্ষণ করতে পারেন। স্টেটলেস কঠোর কুকি দেখুন, যা সার্ভারের পাশে কোনও ডেটা সঞ্চয় করে না, তবে সেশন স্টেটটি সংরক্ষণ করে http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf । খ) আপনি সেশন ব্যাকএন্ড স্টোরেজটি ডাটাবেস বা ম্যাকচেডে পরিবর্তন করতে পারেন। ব্যর্থতার একক পয়েন্টটি অপসারণ করতে, আপনি ডাটাবেস প্রতিলিপি বা একাধিক মেমক্যাচ নোড সেট করতে পারেন। দ্রষ্টব্য, মেমক্যাচ করা এমন সেটআপগুলিতে সুপারিশ করা হয় যেখানে সেশনে ব্যবহারকারীর রাজ্য হারাতে বড় ত্রুটি নয় এবং তাকে খুব অসন্তুষ্ট করে না। যেসব ক্ষেত্রে রাষ্ট্র সংরক্ষণ সংরক্ষণ জরুরি, ডাটাবেসগুলি ব্যবহার করুন। পিএইচপি, জাজঙ্গো এবং রেল উভয়ই বিকাশকারীকে কাস্টম সেশন ব্যাকএন্ড লেখার অনুমতি দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.