অনেকগুলি ব্লকিং ভিএস সিঙ্গল অ-ব্লকিং শ্রমিক


9

ধরে নিন যে কোনও এইচটিপি সার্ভার রয়েছে যা সংযোগগুলি গ্রহণ করে এবং তারপরে এটি কোনওভাবে হেডারের সম্পূর্ণ প্রেরণের জন্য অপেক্ষা করতে পারে I আমি কেবল এগুলি সম্পর্কে ভাবতে পারি:

অনেক অবরুদ্ধ কর্মী ভাল কারণ:

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

একক অবরুদ্ধ কর্মী ভাল কারণ:

  • স্মৃতিশক্তি কম ব্যবহার করে।
  • অলস ক্লায়েন্টদের কাছে কম দুর্বল (যা সার্ভারের সাথে সংযুক্ত হয় এবং আস্তে আস্তে শিরোনাম পাঠায় বা একেবারেই পাঠায় না)।

আপনি সম্ভবত দেখতে পাচ্ছেন, আমার মতে একাধিক কর্মী-থ্রেড সামগ্রিকভাবে কিছুটা আরও ভাল সমাধান বলে মনে হচ্ছে। এটির সাথে একমাত্র সমস্যা হ'ল এই জাতীয় সার্ভারটিকে আক্রমণ করা আরও সহজ।

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

PS এই কাজের জন্য কিছু লাইব্রেরি বা অ্যাপ্লিকেশন ব্যবহার করার পরামর্শ দিবেন না। এটি আসলে কীভাবে কাজ করে বা এটি কাজ করার পরিবর্তে কীভাবে কাজ করতে পারে তা জানতে আমি আগ্রহী।

পিএসএসে আমি যুক্তিগুলি একাধিক অংশে বিভক্ত করেছি এবং এটি কেবলমাত্র HTTP শিরোনাম গ্রহণ করে accepting তাদের প্রক্রিয়া করে না।


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

উত্তর:


4

সিলভার বুলেট নেই

অনুশীলনে এটি নির্ভর করে ...

tl; dr - সহজ সমাধান, nginx ব্যবহার করুন ...

ব্লকিং:

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

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

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

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

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

অ-অবরোধ:

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

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

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

এমনকি এমন একটি সার্ভারেও যেখানে কেবল একটি নোড রয়েছে, সেটআপটির মাধ্যমে প্রসেসরের মূল্যে একটি সার্ভার অন্তর্ভুক্ত করা সর্বাধিক করা সম্ভব very

উভয়:

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

আপনার ক্ষেত্রে:

যদি আপনি কেবল শিরোনাম পরীক্ষা করে থাকেন তবে অনুরোধগুলি বাস্তবে প্রসেস না করে থাকেন তবে আপনি যা মূলত বর্ণনা করছেন তা একটি বিপরীত প্রক্সি। এই ক্ষেত্রে আমি অবশ্যই একটি অ্যাসিঙ্ক পদ্ধতির সাথে যেতে চাই।

আমি অন্তর্নির্মিত বিপরীত প্রক্সি nginx জন্য ডকুমেন্টেশন চেক আউট পরামর্শ দিতে চাই ।

একপাশে:

আপনার প্রদত্ত লিঙ্কটি থেকে আমি লেখার বিষয়টি পড়েছি এবং এটি বোঝা যায় যে অ্যাসিঙ্ক তাদের নির্দিষ্ট প্রয়োগের জন্য একটি দুর্বল পছন্দ ছিল। একটি বিবৃতিতে ইস্যুটি সংক্ষিপ্ত করা যেতে পারে।

পাওয়া গেছে যে ক্লায়েন্টদের মধ্যে স্যুইচ করার সময়, মান / রাষ্ট্র সংরক্ষণ এবং পুনরুদ্ধারের কোডটি কঠিন ছিল

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

দেখে মনে হচ্ছে যে তারা অ্যাসিঙ্ক সম্পর্কে খুব খারাপ ধারণা করেছিল এবং ফলস্বরূপ, অনেক খারাপ অনুমান করেছিল।

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