প্রশ্ন আমি কিভাবে Apache এমপিএম ব্যবহার করতে নির্বাচন করব?


এটা একটা ক্যানোনিকাল প্রশ্ন সঠিক Apache httpd এমপিএম নির্বাচন সম্পর্কে।

আমি অপাচে প্রস্তাবিত বিভিন্ন এমপিএমগুলির মধ্যে একটু বিভ্রান্ত নই - 'কর্মী', 'ইভেন্ট', 'প্রফার্ক' ইত্যাদি।

তাদের মধ্যে প্রধান পার্থক্য কী, এবং কিভাবে আমি নির্ধারণ করতে পারি যে প্রদত্ত স্থাপনার জন্য কোনটি সেরা হবে?


245
2018-04-26 18:40


উত্স


আপনি mod_php সমর্থন করা হয়, তাহলে আপনি prefork করছেন। - Zoredache
@ জর্ড্যাচঃ? তিনি কখনোই পিএইচপি উল্লেখ করেননি এবং এমনকি যদি তিনি ছিলেন, mod_php শুধুমাত্র ইভেন্টটি বাতিল করবে। অথবা আপনি এখনও 8 বছর আগে আরএল দ্বারা তৈরি একটি মন্তব্য clinging হয়? থ্রেডেড অ্যাপাচের সাথে সম্পর্কিত পিএইচপিতে সর্বশেষ বাগ লগ ইন 2005 ছিল। - symcbean
দুঃখিত - এই বন্ধ করার জন্য ভোট পেয়েছিলাম - এখানে খুব প্রশস্ত একটি প্রশ্নোত্তর উত্তর। - symcbean
@ সিম্যাসিন রে: পিএইচপি এবং থ্রেডস - পিএইচপি এর কোর আজকের দিনগুলোতে থ্রেডফাইফ রয়েছে কিন্তু আপনি যে সমস্ত সামগ্রী সংকলন করছেন তা অনেকগুলি জিনিস নয়। আমি গত বছর হিসাবে সম্প্রতি bitten করা হয়েছে, তাই এটি এখনও "উত্পাদন মধ্যে এটি নির্ভর করার আগে (" ব্যাপকভাবে) একটি পরীক্ষা "পরিস্থিতি এখনও ... - voretaq7
আপনি যে OS ব্যবহার করছেন সেটির উপর নির্ভর করে একটি আদর্শ ইনস্টলেশনের সাথে উপলব্ধ সমস্ত বিকল্পও থাকতে পারে না। - John Gardeniers


উত্তর:


একটি সংখ্যা আছে এমপিএম মডিউল (মাল্টি-প্রসেসিং মডিউল), কিন্তু সর্বাধিক ব্যাপকভাবে ব্যবহৃত (অন্তত * নিক্স প্ল্যাটফর্মগুলিতে) তিনটি প্রধান বিষয়: prefork, worker, এবং event। মূলত, তারা আপাচি ওয়েব সার্ভারের বিবর্তন এবং তার দীর্ঘতর (সফ্টওয়্যার পদ) ইতিহাসের সময়কালের কম্পিউটিং সীমাবদ্ধতার মধ্যে HTTP অনুরোধগুলিকে পরিচালনা করার জন্য সার্ভারটি তৈরি করার বিভিন্ন উপায়গুলি উপস্থাপন করে।


prefork

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

আপনি যদি এমন কোনও মডিউল প্রয়োজন না যা থ্রেড নিরাপদ না থাকে তবে এটি সম্ভবত prefork ব্যবহার করার পরামর্শ দেওয়া হয় না।

ব্যবহার করুন যদি: থ্রেড ব্যবহার করা হয় যখন আপনি বিরতি যে মডিউল প্রয়োজন mod_php। এমনকি তারপর, FastCGI ব্যবহার বিবেচনা করুন php-fpm

ব্যবহার করবেন না যদি: আপনার মডিউল থ্রেডিং বিরতি হবে না।

worker

mpm_worker থ্রেডিং ব্যবহার করে - যা concurrency জন্য একটি বড় সাহায্য। কর্মী কিছু সন্তানের প্রসেস বন্ধ spins, যা ঘুরে শিশু থ্রেড বন্ধ স্পিন; prefork অনুরূপ, কিছু অতিরিক্ত থ্রেড সম্ভব হলে, অন্তর্মুখী সংযোগ সেবা করতে প্রস্তুত রাখা হয়। এই পদ্ধতিটি RAM তে অনেক বেশি প্রযোজ্য, কারণ থ্রেড গণনাটি মেমরি ব্যবহারে সরাসরি বহন করে না, যেমন সার্ভার গণনা prefork তে থাকে। এটি কনকুরেন্সকে আরও সহজে পরিচালনা করে, যেহেতু সংযোগগুলিকে prefork এ একটি অতিরিক্ত সার্ভারের পরিবর্তে একটি মুক্ত থ্রেড (যা সাধারণত পাওয়া যায়) অপেক্ষা করতে হবে।

ব্যবহার করুন যদি: আপনি Apache 2.2, অথবা 2.4 এ আছেন এবং আপনি প্রাথমিকভাবে SSL চালাচ্ছেন।

ব্যবহার করবেন না যদি: যদি আপনি সামঞ্জস্যের জন্য prefork প্রয়োজন না হওয়া পর্যন্ত আপনি সত্যিই ভুল করতে পারেন না।

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

event

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

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

ব্যবহার করুন যদি: আপনি Apache 2.4 এবং থ্রেডের মত, কিন্তু আপনি থ্রেডগুলি নিষ্ক্রিয় সংযোগগুলির জন্য অপেক্ষা করতে পছন্দ করেন না। সবাই থ্রেড পছন্দ!

ব্যবহার করবেন না যদি: আপনি Apache 2.4 তে নন, অথবা আপনার সামঞ্জস্যের জন্য prefork প্রয়োজন।


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


398
2018-04-27 02:27



-1: আইএমই, কর্মী শুধুমাত্র 15% অঞ্চলে httpd footprint এর সাইজ হ্রাস করে (আইআইআরসি লিনাক্সগুলি আরএসএসে Cow দেখায় যা প্রাক-ফর্কটিকে এটির চেয়ে অনেক বেশি মেমরি ব্যবহার করে দেখায়)। একটি প্রক্রিয়া এবং একটি NPTL থ্রেডের জন্য কার্নেল ফুটপ্রিন্টের মধ্যে নগণ্য পার্থক্য রয়েছে। এটা পৃথিবী-বিচ্ছিন্নতা থেকে একটি দীর্ঘ পথ। আমি বুঝতে পারছি না যে কেন আপনি অপেক্ষা করছেন এবং একটি থ্রেড বরাদ্দকরণটি (পূর্ব-ফর্কযুক্ত) প্রক্রিয়ার জন্য অপেক্ষা / সময় নির্ধারণের চেয়ে সময় নির্ধারণে আরও দক্ষ। আর এসএসএসের পুরোটা সে-ব্যাংকে আপনি কী ভাবছেন। - symcbean
@ সিম্যাসিন তাই আপনি বলছেন যে 15% র্যাম ব্যবহার উল্লেখযোগ্য নয়? এটা ঠিক আছে, কিন্তু আমার মতামত অন্যথায় হবে। Concurrency কর্মক্ষমতা দাবি আমার নিজস্ব নয়। দেখ এখানে। এবং এমপিএমের জন্য ডকুমেন্টেশনে এসএসএল পার্থক্য স্পষ্টভাবে বানানো হয়েছে: The improved connection handling does not yet work for certain connection filters, in particular SSL. For SSL connections, this MPM will fall back to the behaviour of the worker MPM and reserve one worker thread per connection. - Shane Madden♦
@ শেন মাদ্দেন 'এবং রিসোর্স ব্যবহার বা স্কেলে' nginx বা lighttpd এর পছন্দগুলির সাথে সামঞ্জস্যপূর্ণ না হলেও 'আমি উভয় সিস্টেমের অপাচে মেঝে করেছি। - Kelly Elton
@ শেন মাদেন এসএসএল এবং ইভেন্ট এমপিএম এর সমস্যা নিয়ে: আপনি কি জানেন যে nginx এ্যাপাএর চেয়ে উল্লেখযোগ্যভাবে এটি পরিচালনা করে? - DASKAjA
মনে হচ্ছে যদি আপনি এমপিএম মডিউল সম্পর্কে জানার ব্যপারে অ্যাপাচি 2.4 কম্পাইল করেন তবে এটি মডিউল নামক ইভেন্ট এমএমপি মডিউল সহ আসে এবং এটি mod_php7 এর সাথে কাজ করে। (এখন আমি এমএমপি অনুসন্ধান করছি কারণ apache2.4 মাইএসকিউএল সংযোগ সীমা অতিক্রম করছে, অপাচি 2.2 একই মাইএসকিউএল সার্ভারের সাথে না) - BioHazard


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

যদি আপনার কোন পছন্দ না থাকে, তবে আমি আপনাকে আপনার OS বিতরণ থেকে পছন্দসই নির্ভরতার সাথে যেতে সুপারিশ করছি। উদাহরণস্বরূপ উবুন্টু আপনি Apache2 ইনস্টল করার সময় ডিফল্টভাবে mpm-worker ইনস্টল করবেন।


5
2018-04-26 19:32





এখানে gifs সঙ্গে কাজ করে কিভাবে একটি ভাল ব্যাখ্যা:

https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/

সংক্ষেপে: আপনি যদি 2.4 এবং আপনি একটি হিসাবে httpd প্রয়োজন বিপরীত প্রক্সি (প্রেরক) তাই আপনার পছন্দ একটি ইভেন্ট এমপিএম


5
2018-06-21 13:10





২014 সালের ফেব্রুয়ারী অনুসারে, ইভেন্ট এমপিএমের জন্য অ্যাপাচি 2.4 ডকুমেন্টেশন বলেছে যে প্রাইক্সির মত অ্যাপাচিটি 2.4.24 থেকে ডিজাইন হিসাবে কাজ করার পরে "উন্নত সংযোগ হ্যান্ডলিং" ব্যবহার করবে। দেখুন সীমাবদ্ধতা অধ্যায়.

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

এই কারণে, মনে হয় যে ওয়ার্কার মডেলটি ব্যবহার করা হলে অ্যাপাচি প্রক্সি হিসাবে ব্যবহৃত হয়। প্রক্সি পরিবেশে ইভেন্ট মডেলের সুবিধা থাকলে আমার কাছে এটি সত্যিই স্পষ্ট নয়, তবে সম্ভবত সেখানে রয়েছে।


3
2018-02-14 15:01