ক্লাস্টার এবং ফর্ম মোড পার্থক্য পিএম 2 এ difference


92

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

পিএম 2 এর পাবলিক সাইট ক্লাস্টার মোড এই বৈশিষ্ট্যগুলি করতে পারে তা ব্যাখ্যা করে কিন্তু কেউ কাঁটাচামচ মোডের সুবিধা সম্পর্কে বলতে পারে না (সম্ভবত, এটি NODE_APP_INSTANCEপরিবর্তনশীল পেতে পারে)।

আমি মনে করি ক্লাস্টারটি সম্ভবত ফর্কটির অংশ হতে পারে কারণ সাধারণভাবে ফোর্কটি ব্যবহার করা হয় বলে মনে হয়। সুতরাং, আমি অনুমান করি যে কাঁটাচামির অর্থ পিএম 2 এর বিন্দু থেকে কেবল 'কাঁটাচামচ প্রক্রিয়া' এবং ক্লাস্টারের অর্থ 'কাঁটাচামচ প্রক্রিয়া যা ছোট আকারে সক্ষম হতে পারে'। তাহলে, কেন আমি কাঁটাচামচ মোড ব্যবহার করব?

উত্তর:


124

fork_modeএবং এর মধ্যে প্রধান পার্থক্য cluster_modeহ'ল এটি pm_2 কে চাইল্ড_প্রসেস.ফোর্ক এপি বা ক্লাস্টার এপিআই ব্যবহার করার আদেশ দেয় ।

এর অভ্যন্তরীণ অর্থ কী?

কাঁটাচামচ মোড

forkএকটি বেসিক প্রক্রিয়া spawning হিসাবে মোড নিন । এটি এটিকে পরিবর্তন করতে দেয় exec_interpreter, যাতে আপনি পিএম 2 দিয়ে একটি phpবা একটি pythonসার্ভার চালাতে পারেন । হ্যাঁ, exec_interpreterশিশু প্রক্রিয়া শুরু করতে ব্যবহৃত হ'ল "আদেশ"। ডিফল্টরূপে, pm2 ব্যবহার করবে nodeযাতে এটি pm2 start server.jsএমন কিছু করবে:

require('child_process').spawn('node', ['server.js'])

এই মোডটি খুব কার্যকর কারণ এটি অনেকগুলি সম্ভাবনা সক্রিয় করে। উদাহরণস্বরূপ, আপনি প্রাক-প্রতিষ্ঠিত পোর্টগুলিতে একাধিক সার্ভার চালু করতে পারেন যা HAProxy বা Nginx দ্বারা লোড-ভারসাম্য হবে।

ক্লাস্টার মোড

clusterশুধুমাত্র সঙ্গে কাজ করবে nodeযেমন এটা exec_interpreter(: যেমন, কারণ এটি nodejs ক্লাস্টার মডিউল অ্যাক্সেস হবে isMaster, forkপদ্ধতি ইত্যাদি)। এটি শূন্য-কনফিগারেশন প্রক্রিয়া পরিচালনার জন্য দুর্দান্ত কারণ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে একাধিক ক্ষেত্রে গঠন করা হবে। উদাহরণস্বরূপ pm2 start -i 4 server.js4 টি ইনস্ট্যান্স চালু হবে server.jsএবং ক্লাস্টার মডিউলটিকে লোড ভারসাম্য হ্যান্ডেল করতে দিন।


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

4
আমি কাঁটাচামচায় 30 টি প্রক্রিয়া আরম্ভ করার জন্য পিএম 2 প্রোগ্রাম্যাটিক এপিআই ব্যবহার করব এবং 30 পোর্টের মধ্যে লোড ব্যালান্সার হিসাবে অন্য কিছু ব্যবহার করব। আপনি pm2 start -i 30 app.jsনোডেজ ক্লাস্টারটি কাজ করতে এবং ব্যবহার করতে পারেন ।
soyuka

11
দ্রষ্টব্য: cluster modeমাস্টার প্রক্রিয়া ব্যর্থতার একক পয়েন্ট।
কার্ল পোকাস

42

নোড.জেএস একক থ্রেড।

তার মানে আপনার ইন্টেল কোয়াড-কোর সিপিইউয়ের কেবল 1 টিই নোড অ্যাপ্লিকেশনটি কার্যকর করতে পারে।

এটা তোলে ডাকলেন fork_mode

আমরা এটি স্থানীয় দেবের জন্য ব্যবহার করি ।

pm2 start server.js -i 0 আপনাকে আপনার সিপিইউর প্রতিটি কোরে 1 টি নোড থ্রেড চালাতে সহায়তা করে।

এবং রাষ্ট্রবিহীন আসার অনুরোধগুলি স্বয়ংক্রিয়-লোড-ব্যালেন্স করে।

উপর একই বন্দর

আমরা একে বলতে: cluster_mode

যা উত্পাদনে পারফরম্যান্সের স্বার্থে ব্যবহৃত হয়

আপনি যদি নিজের পিসি পরীক্ষা করার চাপ দিতে চান তবে আপনি স্থানীয় দেব এও করতে বেছে নিতে পারেন :)


4
thaks, এটা তো কতো কিছুই আমার মনের মধ্যে nodejs সম্পর্কে মুছে ফেলা হবে
Rishabh আগরওয়াল

4
দুর্দান্ত ব্যাখ্যা !!
Piqué

4
নোড.জেএস একক থ্রেডেড নয়, বর্তমানে একটি ইউজারল্যান্ড থ্রেড রয়েছে তবে এটি অবশ্যই একটি লাইবভ থ্রেডপুল দ্বারা সমর্থিত।
বেনজামিন গ্রুয়েনবুম

4
@ বেঞ্জামিনগ্রুয়ানবাউম আপনার সাথে একমত আমার বক্তব্যটি এই ধারণায় বোঝা উচিত যে আমি লিবুভ স্তরের খুব গভীরভাবে উল্লেখ করছি না
হাওতাং

16

ডকুমেন্টেশন এবং উত্সগুলি এখানে সত্যই বিভ্রান্ত করছে।

উত্সগুলিতে এটি পড়ার পরে, কেবলমাত্র পার্থক্যগুলি মনে হয়, তারা নোড clusterবা child_processএপিআই ব্যবহার করে । যেহেতু clusterপরেরটি ব্যবহার করে আপনি প্রকৃতপক্ষে একই করছেন। stdioসরাইনে ঘুরে বেড়াতে আরও অনেক কাস্টম রয়েছে fork_mode। এছাড়াও clusterকেবল স্ট্রিংগুলির মাধ্যমে যোগাযোগ করা যেতে পারে, বস্তু নয়।

ডিফল্টরূপে আপনি ব্যবহার করছেন fork_mode। আপনি যদি -i [number]বিভাগটি পাস করেন তবে আপনি যাচ্ছেন cluster_mode, যা আপনি সাধারণত ডাব্লু / এর জন্য লক্ষ্য করেন pm2

এছাড়াও fork_modeউদাহরণস্বরূপ সম্ভবত কারণে একই পোর্টে শ্রবণ করতে পারে না EADDRINUSEcluster_modeকরতে পারা. এইভাবে আপনি একই পোর্টে স্বয়ংক্রিয়ভাবে ভারসাম্যপূর্ণ ভারসাম্যপূর্ণ হওয়া চালানোর জন্য আপনার অ্যাপ্লিকেশনটিকেও কাঠামো করতে পারেন। আপনাকে রাষ্ট্র ছাড়াই অ্যাপস তৈরি করতে হবে যদিও সেশনস, ডিবিএস হিসাবে।


4
আমি এখনও বিভ্রান্ত clusterঅন্তর্নির্মিত মডিউল ব্যবহার child_processকরে? এবং আপনার পরামর্শটি হ'ল যদি আমার নমনীয়তা প্রয়োজন তবে আমাকে stdioফর্ক-মোডটি ব্যবহার করতে হবে?
জিনিয়ং কিম

এই stdioবিষয়টি pm2বাস্তবায়নের একটি বিষয়। এই সম্পর্কে চিন্তা করবেন না। আপনি cluster_modeউত্পাদন ব্যবহার করতে চান কারণ এটি আপনার উদাহরণটিকে শক্ত করে তুলছে কারণ এটি -i [number]পটভূমিতে উদাহরণস্বরূপ চলছে । fork_modeশক্ত করার প্রয়োজন না হলে ব্যবহার করুন বা আপনি আরও ভাল লগ এবং স্টাফ চান।
eljefedelrodeodeljefe

4
স্পষ্টতই cluster_modeআপনার সিস্টেমের আরও সংস্থান ব্যবহার করে কারণ আপনি -i [number]প্রক্রিয়াগুলি চালাচ্ছেন ।
eljefedelrodeodeljefe

যদিও আমি আপনার উত্তরটি আন্তরিকভাবে প্রশংসা করেছি, এখন পর্যন্ত আমি বিষয়টিটি ধরিনি। আপনার ব্যাখ্যা অধিকাংশই প্রাকৃতিক জিনিস ধরনের (এর উদাঃ CLI ব্যবহার cluster_mode, লোড ভারসাম্য cluster_mode, cluster_modeআরও রিসোর্স ব্যবহার ..)। আমি ভোট না দেওয়ার কারণেই। আপনি উভয় সহজ ব্যবহারের কেস ব্যাখ্যা করতে পারেন? প্রতিটি ক্ষেত্রে এটি কেন মোডে নিয়েছে তা যুক্তিসঙ্গত থাকতে হবে।
জিনয়ং কিম

@eljefedelrodeodeljefe আপনি "স্টেট ছাড়াই অ্যাপস বানাতে হবে যেমন সেশন, ডিবিএস?" অ্যাপ্লিকেশনটি রাজ্য ছাড়াই হওয়া উচিত কেন?
স্টেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.