রাষ্ট্রহীন প্রোগ্রামিং এর সুবিধা?


132

আমি সম্প্রতি ফাংশনাল প্রোগ্রামিং সম্পর্কে শিখছি (বিশেষত হাস্কেল, তবে আমি লিস্প এবং এরলং-তেও টিউটোরিয়াল করেছি)। যদিও আমি ধারণাগুলি খুব আলোকিত করেছিলাম, তবুও আমি "কোনও পার্শ্ব প্রতিক্রিয়া" ধারণার ব্যবহারিক দিকটি দেখতে পাচ্ছি না। এর ব্যবহারিক সুবিধা কী কী? আমি কার্যকরী মানসিকতায় চিন্তা করার চেষ্টা করছি, তবে কিছু পরিস্থিতি রয়েছে যা সহজ উপায়ে রাষ্ট্র বাঁচানোর ক্ষমতা ছাড়াই মাত্রাতিরিক্ত জটিল বলে মনে হয় (আমি হাস্কেলের মনাদদের 'সহজ' বিবেচনা করি না)।

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

আমি উত্পাদনশীলতার চেয়ে পারফরম্যান্স সম্পর্কে কম যত্ন করি। সুতরাং আমি প্রধানত জিজ্ঞাসা করছি যে আমি একটি পদ্ধতিগত / অবজেক্ট-ভিত্তিক / যাই হোক না কেন কার্যকরী ভাষায় আরও উত্পাদনশীল হব।

উত্তর:


168

সংক্ষেপে ফাংশনাল প্রোগ্রামিং পড়ুন ।

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

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


5
আমিও একমত! আমি বিশ্বাস করি যে সমান্তরাল প্রোগ্রামিংয়ের উপযুক্ততার কারণে ভবিষ্যতে ফাংশনাল প্রোগ্রামিংটি আরও বেশি ব্যবহৃত হবে।
রায় হিদায়াত

@ রায়: আমি বিতরণ প্রোগ্রামিং যোগ করব!
আন্তন টিখই

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

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

2
স্টেটলেসকে এফপির সাথে সমান করা পছন্দ নয়। অনেক এফপি প্রোগ্রাম রাজ্যে ভরা হয়, এটি কেবল কোনও অবজেক্টের চেয়ে ক্লোজারে বিদ্যমান।
মাইকমেকানা

46

আপনার প্রোগ্রামের যত বেশি টুকরো রাষ্ট্রহীন, আরও কিছু উপায় রয়েছে যাতে কিছু বিরতি না দিয়ে টুকরো টুকরো করে রাখা যায় । রাষ্ট্রবিহীন দৃষ্টান্তের শক্তি নিখরচায় রাজ্যহীনতা (বা বিশুদ্ধতা) এর মধ্যে নেই , তবে ক্ষমতা আপনাকে পুনরায় ব্যবহারযোগ্য ফাংশন লিখতে এবং তাদের একত্রিত করার ক্ষমতা দেয় ।

জন হিউজের কাগজে কেন ফাংশনাল প্রোগ্রামিং ম্যাটারস (পিডিএফ) -এ প্রচুর উদাহরণ সহ আপনি একটি ভাল টিউটোরিয়াল খুঁজে পেতে পারেন ।

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


মিশ্রিনগুলি ওওপির সাথে একইভাবে পুনরায় ব্যবহারযোগ্য কোডটি সরবরাহ করবে না? ওওপি-র পক্ষের পক্ষে পরামর্শ না দিয়ে কেবল জিনিসগুলি নিজেই বোঝার চেষ্টা করছি।
মাইকমেকানা

20

অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি কার্যকরী প্রোগ্রামিংয়ের পারফরম্যান্স (সমান্তরালতা) দিকে মনোনিবেশ করেছে, যা আমি বিশ্বাস করি যে এটি খুব গুরুত্বপূর্ণ। তবে, আপনি উত্পাদনশীলতা সম্পর্কে বিশেষত জিজ্ঞাসা করেছিলেন, যেমন হিসাবে, আপনি একটি অপরিহার্য দৃষ্টান্তের চেয়ে কার্যকরী দৃষ্টান্তে একই জিনিসটি আরও দ্রুত প্রোগ্রাম করতে পারেন?

আমি আসলে খুঁজে পেয়েছি (ব্যক্তিগত অভিজ্ঞতা থেকে) যে F # তে প্রোগ্রামিং আমার আরও ভালভাবে মনে হয় তার সাথে মেলে এবং তাই এটি আরও সহজ। আমি মনে করি এটিই সবচেয়ে বড় পার্থক্য। আমি এফ # এবং সি # উভয় ক্ষেত্রেই প্রোগ্রাম করেছি এবং এফ # তে "ভাষা নিয়ে লড়াই" করা অনেক কম, যা আমি ভালোবাসি। এফ # তে আপনাকে বিশদ সম্পর্কে চিন্তা করতে হবে না। আমি যা পেয়েছি তা সত্যই উপভোগ করেছি তার কয়েকটি উদাহরণ এখানে।

উদাহরণস্বরূপ, এফ # স্ট্যাটিকালি টাইপ করা থাকলেও (সমস্ত ধরণের সংকলন সময়ে সমাধান করা হয়), টাইপ অনুমানটি কী ধরণের আপনার রয়েছে তা নির্ধারণ করে, তাই আপনাকে এটি বলতে হবে না। এবং যদি এটি সনাক্ত করতে না পারে তবে এটি স্বয়ংক্রিয়ভাবে আপনার ফাংশন / শ্রেণি / যাই হোক না কেন জেনেরিক করে তোলে। সুতরাং আপনাকে কোনও জেনেরিক যাই লিখতে হবে তা সবই স্বয়ংক্রিয়। আমি এর অর্থ খুঁজে পেলাম যে আমি সমস্যাটি নিয়ে আরও বেশি সময় ব্যয় করছি এবং কীভাবে এটি বাস্তবায়ন করা যায়। আসলে, যখনই আমি সি # তে ফিরে আসি, আমি দেখতে পাই যে আমি এই ধরণের অনুমানটি সত্যিই মিস করছি, আপনি কখনই বুঝতে পারবেন না যে এটির আর আর করার দরকার নেই যতক্ষণ না এটি বিরক্তিকর।

এফ # তেও লুপ লেখার পরিবর্তে আপনি ফাংশনগুলিকে কল করেন। এটি একটি সূক্ষ্ম পরিবর্তন, তবে তাৎপর্যপূর্ণ, কারণ আপনাকে লুপের নির্মাণের বিষয়ে আর ভাবতে হবে না। উদাহরণস্বরূপ, এখানে কোডের একটি টুকরো যা কিছু দিয়ে যায় এবং কোনওটির সাথে মেলে (আমি কী মনে করতে পারি না, এটি একটি প্রকল্পের এলিউর ধাঁধা থেকে এসেছে):

let matchingFactors =
    factors
    |> Seq.filter (fun x -> largestPalindrome % x = 0)
    |> Seq.map (fun x -> (x, largestPalindrome / x))

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

আমি |> অপারেটরটিকেও পছন্দ করি, যা আমি মনে করি এফ # কে অকামল এবং সম্ভবত অন্যান্য কার্যকরী ভাষা থেকে পৃথক করে। এটি পাইপ অপারেটর, এটি আপনাকে একটি এক্সপ্রেশনের আউটপুটটিকে "এক্সপাইজ" করতে দেয় অন্য অভিব্যক্তির ইনপুটটিতে। কোডটি আমি কীভাবে আরও বেশি মনে করি তা অনুসরণ করে। উপরের কোড স্নিপেটের মতো এটিও বলছে, "ফ্যাক্টর সিকোয়েন্সটি নিন, এটিকে ফিল্টার করুন, তারপরে এটি ম্যাপ করুন।" এটি একটি উচ্চ স্তরের চিন্তাভাবনা, যা আপনি অত্যাবশ্যক প্রোগ্রামিং ভাষায় পাবেন না কারণ আপনি লুপটি লেখার পক্ষে এবং বিবৃতিগুলি লেখার পক্ষে এতটাই ব্যস্ত। আমি যখনই অন্য ভাষায় যাই তখন এটিই আমি সবচেয়ে বেশি অনুভব করি।

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

সম্পাদনা : আমি একটি মন্তব্যে দেখেছি যে আপনি একটি কার্যনির্বাহী প্রোগ্রামিং ভাষায় "রাষ্ট্র" এর উদাহরণ চেয়েছিলেন। F # অপরিহার্যভাবে লেখা যেতে পারে, সুতরাং আপনি কীভাবে এফ # তে পরিবর্তনীয় অবস্থা থাকতে পারেন তার প্রত্যক্ষ উদাহরণ এখানে:

let mutable x = 5
for i in 1..10 do
    x <- x + i

1
আমি সাধারণত আপনার পোস্টের সাথে একমত, তবে |> এর প্রতি কার্যনির্বাহী প্রোগ্রামিংয়ের সাথে কিছুই করার নেই। আসলে, এর a |> b (p1, p2)জন্য কেবল সিনট্যাকটিক চিনি b (a, p1, p2)। এটি ডান-অ্যাসোসিয়েটিভিটির সাথে কাপল করুন এবং আপনি এটি পেয়ে গেছেন।
আন্তন টিখই

2
সত্য, আমার স্বীকার করা উচিত যে সম্ভবত আমার # F এর সাথে ইতিবাচক অভিজ্ঞতাকে ফাংশনাল প্রোগ্রামিংয়ের চেয়ে এফ # এর সাথে আরও অনেক কিছু করার রয়েছে। তবে এখনও, উভয়ের মধ্যে একটি দৃ between় সম্পর্ক রয়েছে, এবং টাইপ ইনফারেন্স এবং |> এর মতো জিনিসগুলি যদিও প্রতি সেফ ফাংশনাল প্রোগ্রামিং নয়, অবশ্যই আমি দাবি করব যে তারা "অঞ্চলটিতে যান"। কমপক্ষে সাধারণভাবে।
রায় হিদায়াত

|> এটি অন্য একটি উচ্চতর-আদেশের ইনফিক্স ফাংশন, এক্ষেত্রে একটি ফাংশন-অ্যাপ্লিকেশন অপারেটর। আপনার নিজস্ব উচ্চ-অর্ডার সংজ্ঞায়িত করে, ইনফিক্স অপারেটরগুলি অবশ্যই কার্যকরী প্রোগ্রামিংয়ের একটি অংশ (যদি না আপনি একজন স্কিমার হন)। পাইপলাইনের ডান থেকে বামে প্রবাহিত তথ্য বাদে হাস্কেলের রয়েছে যা একই।
নরম্যান রামসে

15

আপনি যে ডিবাগ করতে দীর্ঘ সময় ব্যয় করেছেন সেই সমস্ত জটিল বাগ বিবেচনা করুন।

এখন, সেই প্রোগ্রামগুলির দুটি পৃথক উপাদানগুলির মধ্যে "অনিচ্ছাকৃত ইন্টারঅ্যাকশনগুলির" কারণে সেই বাগগুলির মধ্যে কতটি ছিল? (প্রায় সব থ্রেডিং বাগ এই ফর্মটি আছে: ভাগ করা ডেটা, ডেডলক লেখার জড়িত ঘোড়দৌড়, ... উপরন্তু, এটা /, লাইব্রেরি বিশ্বব্যাপী রাষ্ট্র উপর কিছু অপ্রত্যাশিত প্রভাব প্রয়োগকারী খুঁজে বা পড়তে রেজিস্ট্রি / পরিবেশ লিখতে ইত্যাদি সাধারণ) আমি কমপক্ষে 3'র মধ্যে 1 'হার্ড বাগ' এই বিভাগে চলে আসতে পারে।

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

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


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

8

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

দক্ষতা শুধুমাত্র উদ্বেগ নয়। একটি খাঁটি ফাংশনটি পরীক্ষা করা এবং ডিবাগ করা সহজ কারণ যে কোনও কিছু এতে প্রভাবিত করে তা স্পষ্ট করে বলা হয়েছে। এবং যখন একটি কার্যকরী ভাষায় প্রোগ্রামিং করা হয় তখন একজন খুব কম ফাংশন "নোংরা" (I / O ইত্যাদি সহ) সম্ভব হিসাবে তৈরি করার অভ্যাসে পরিণত হয়। রাষ্ট্রীয় স্টাফগুলি এভাবে আলাদা করা প্রোগ্রামগুলি ডিজাইন করার একটি ভাল উপায়, এমনকি অ-কার্যকরী ভাষায়ও।

কার্যকরী ভাষাগুলি "পেতে" কিছুটা সময় নিতে পারে, এবং যে প্রক্রিয়াটি অতিক্রম করেনি এমন কাউকে ব্যাখ্যা করা মুশকিল। তবে বেশিরভাগ লোকেরা যারা দীর্ঘক্ষণ অধ্যবসায়ী থাকে তারা অবশেষে বুঝতে পারে যে এই ফাস এর পক্ষে মূল্যবান, এমনকি যদি তারা কার্যকরী ভাষা বেশি ব্যবহার না করে।


প্রথম অংশটি একটি সত্যই আকর্ষণীয় বিষয়, আমি এর আগে কখনও ভাবিনি। ধন্যবাদ!
শাশা চেদিগোভ

ধরুন আপনার sin(PI/3)কোডটিতে পিআই যেখানে ধ্রুবক রয়েছে, সংকলক সংকলন সময়ে এই ফাংশনটি মূল্যায়ন করতে পারে এবং উত্পন্ন কোডটিতে ফলাফল এম্বেড করতে পারে।
আর্টেলিয়াস

6

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


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

2
@ মিউজিকফ্রাক, কোনও উত্পাদনশীলতা বোনাস নেই। তবে একটি নোট হিসাবে, আধুনিক এফপি ভাষা এখনও আপনার যদি প্রয়োজন হয় তবে আপনাকে রাষ্ট্র ব্যবহার করতে দেয়।
অজানা

সত্যি? আপনি কি কার্যকরী ভাষায় রাষ্ট্রের উদাহরণ দিতে পারেন, ঠিক কীভাবে আমি এটি দেখতে পেলাম?
সাশা চেদিগোভ


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

6

রাষ্ট্রীয় ওয়েব অ্যাপ্লিকেশনগুলি প্রয়োজনীয় যখন আপনি উচ্চ ট্র্যাফিক শুরু করেন।

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

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

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


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