মাল্টি-কোর মেশিনে নোড.জেএস


605

Node.js আকর্ষণীয় দেখায়, কিন্তু আমি কিছু মিস্ করতে হবে - node.js একটি একক প্রক্রিয়া এবং থ্রেডে চলে একমাত্র টিউন করা হয় না?

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

এই ছবিতে নোড.জেএস কীভাবে খাপ খায়? এর ধারণাটি কোনওভাবে একাধিক উদাহরণ বিতরণ করা বা কী?


4
দেখে মনে হচ্ছে রিয় নোডে বিল্ট-ইন মাল্টি-কোর সমর্থন অন্তর্ভুক্ত করার বিষয়ে গুরুতর হতে শুরু করেছে: github.com/joyent/node/commit/…
ব্রুফা

2
পিএম 2 প্রসেস ম্যানেজার আপনার নোডজেএস অ্যাপ্লিকেশনগুলি সমস্ত করে উপলব্ধ করার জন্য অভ্যন্তরীণভাবে ক্লাস্টার মডিউল ব্যবহার করুন: github.com/Unitech/pm2
ইউনিটেক

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

উত্তর:


696

[ এই পোস্টটি 2012-09-02 (উপরের চেয়ে নতুন) হিসাবে আপ-টু-ডেট। ]

নোড.জেএস পুরোপুরি মাল্টি-কোর মেশিনগুলিতে স্কেল করে।

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

তাহলে আমি কীভাবে আমার 16 কোর বাক্সটি গ্রহণ করব?

দুটি উপায়:

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

একটি ওয়েব সার্ভিসে স্কেলিং থ্রুপুট

যেহেতু v6.0.X নোড.জেএস ক্লাস্টার মডিউলটি সরাসরি বাক্সের বাইরে অন্তর্ভুক্ত করেছে , যা একক বন্দরে শুনতে পারে এমন একাধিক নোড কর্মীদের সেটআপ করা সহজ করে তোলে। নোট যে এই পুরোনো learnboost "ক্লাস্টার" মাধ্যমে উপলব্ধ মডিউল হিসাবে একই নয় npm

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  http.Server(function(req, res) { ... }).listen(8000);
}

শ্রমিকরা নতুন সংযোগ গ্রহণের জন্য প্রতিযোগিতা করবে এবং সর্বনিম্ন বোঝা প্রক্রিয়াটি জয়ের সম্ভাবনা সবচেয়ে বেশি। এটি বেশ ভাল কাজ করে এবং একটি মাল্টি-কোর বক্সে বেশ ভাল মাধ্যমে থ্রুপুট স্কেল করতে পারে।

আপনার যদি একাধিক কোরগুলির যত্ন নেওয়ার জন্য যথেষ্ট পরিমাণ চাপ থাকে তবে আপনি আরও কয়েকটি জিনিস করতে চাইবেন:

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

  2. পর্যায়ক্রমে আপনার কর্মী প্রক্রিয়াগুলি পুনর্ব্যবহার করুন। দীর্ঘ-চলমান প্রক্রিয়াটির জন্য, এমনকি একটি ছোট মেমরি ফুটোও শেষ পর্যন্ত যুক্ত হবে।

  3. লগ সংগ্রহ / পর্যবেক্ষণ সেটআপ করুন


পিএস: আরোন এবং ক্রিস্টোফারের মধ্যে অন্য একটি পোস্টের মন্তব্যে আলোচনা হয়েছে (এই লেখার হিসাবে এটি এর শীর্ষ পোস্ট)। সে সম্পর্কে কয়েকটি মন্তব্য:

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

ভাগ করা বন্দর: nginx (port 80) --> Node_workers x N (sharing port 3000 w/ Cluster)

বনাম

পৃথক বন্দর: nginx (port 80) --> {Node_worker (port 3000), Node_worker (port 3001), Node_worker (port 3002), Node_worker (port 3003) ...}

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


1
আপনি একটি বাক্সে বিভিন্ন নোডেজ ভিত্তিক পরিষেবা পরিচালনার জন্য কোনও পরামর্শ দিতে পারেন? উদাহরণস্বরূপ বলুন আমার 1 টি সার্ভার রয়েছে এবং আমি সিপুকোর 1 এ myservice1.js এবং সিপুকোর 2 এ myservice2.js চালাতে চাই। আমি কি এর জন্য গুচ্ছ ব্যবহার করতে পারি? বা এটি কি কেবল ক্লোন করা পরিষেবা তৈরির জন্য কার্যকর?
আপক্রিক

6
আপনি যে জন্য একটি প্রশ্ন পোস্ট করা উচিত! (এবং আমি এই মন্তব্যটি আপনার প্রথম উত্তর হিসাবে অনুলিপি করব)। আপনি যা করতে চাইছেন তা আসলেই খুব সহজ। আপনার সত্যই "ক্লাস্টার" লাগবে না, আপনি কেবল দুটি ভিন্ন নোড পরিষেবা চালাবেন। দুটি স্ক্রিপ্ট, দুটি প্রক্রিয়া, দুটি বন্দর। উদাহরণস্বরূপ, আপনি পরিষেবা পেতে পারেন 3000 এ এবং সার্ভিস 3001-এ শুনতে পারেন those এই পরিষেবাগুলির প্রত্যেকটিতে "ক্লাস্টার" ব্যবহার করা যেতে পারে 1+ কর্মী রাখার জন্য এবং পর্যায়ক্রমে পুনরায় তাদের পুনর্ব্যবহার করা ইত্যাদি Then আগত "হোস্ট" শিরোনাম এবং / অথবা URL পাথের উপর ভিত্তি করে সঠিক পরিষেবা।
ডেভ ডপসন

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

দুর্দান্ত উত্তর ddopson। দুটি নোড প্রক্রিয়া একই মেশিনে একে অপরের সাথে যোগাযোগ করার সর্বোত্তম উপায় কী? টিসিপি-র চেয়ে দ্রুত প্রোটোকল যখন তারা একই মেশিনে থাকে তখন কি?
উইন্ডোপটোয়

1
@ সরব_বি - ভাল, হ্যাঁ একাধিক মেশিনে নোড.জেএস অ্যাপ চালানো খুব সাধারণ বিষয়। এটি করার মতো কোনও গ্রন্থাগার নেই। আপনি কেবল একাধিক মেশিনে আপনার কোড চালনা করুন এবং তাদের মধ্যে লোড বিতরণ করুন। আপনার সফ্টওয়্যারটি আর্কিটেকিং করা যাতে এটি স্কেল করে (যেমন, এটি মেমরিতে রাষ্ট্র রাখার পরিবর্তে কোনও ধরণের বাহ্যিক ডেটা পরিষেবাতে স্টেট রাখে) - এটি আপনার কাজ।
ডেভ ডপসন

44

একটি পদ্ধতি হ'ল সার্ভারে নোড.জেএস এর একাধিক ইনস্ট্যান্স চালানো এবং তারপরে একটি লোড ব্যালেন্সার (পছন্দ হিসাবে একটি নন-ব্লকিং এনজিঙ্ক্সের মতো) তাদের সামনে রাখা put


36
node.js প্রায় nginx হিসাবে দ্রুত,
আপনিও

26
রায়ান বিশেষভাবে বলেছিল যে নোড আরও স্থিতিশীল না হওয়া পর্যন্ত এটি না করা। নোডের সামনে এনগিনেক্স চালানো সেরা উপায়।
পুনঃপ্রবর্তন

2
নোডের সামনে এনগিনেক্সের মতো এটি কোনও নির্দিষ্ট সমস্যার সমাধান করবে না যদি আপনার মেমরির সারি থাকে। 2 টি নোড উদাহরণ একে অপরের সারি অ্যাক্সেস করতে সক্ষম হবে না।
পুনরায় প্রত্যাবর্তন

5
পাশাপাশি, এনজিনেক্স এইচটিটিপি 1.1 পুরোপুরি সমর্থন করে না, তাই ওয়েবসকেটের মতো জিনিসগুলি প্রক্স করা যায় না।
অ্যাশক্রিস্টোফার

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

30

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

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

আপডেট - 10/11/11 : নোড সম্প্রদায়ের মধ্যে sensকমত্য বলে মনে হচ্ছে যে ক্লাস্টার এখন মেশিনে একাধিক নোড ইনস্ট্যান্স পরিচালনার জন্য পছন্দসই মডিউল। চিরকালও এক নজর দেখার মতো।


8
চিরকাল এবং ক্লাস্টার খুব আলাদা জিনিস করে। আপনি এমনকি উভয় ব্যবহার করতে পারেন। যখন মারা যায় তখন চিরকাল কোনও প্রক্রিয়া পুনরায় চালু করে। ক্লাস্টার একাধিক কর্মী পরিচালনা করে। আপনি আপনার মাস্টার প্রক্রিয়া পরিচালনা করতে সর্বদা ব্যবহার করবেন ...
ডেভ ডপসন

4
এছাড়াও, শিখনোস্ট মডিউলটি নোড v0.6.x এ বেকড ক্লাস্টারের সংস্করণ দ্বারা মূলত পরিবেশন করা হয়েছে (সতর্কতা: এপিআই পৃষ্ঠটি পৃথক করে)
ডেভ ডপসন

@ ব্রুফা রেডিস বা মেমক্যাচ ওয়াইল ব্যবহার করে কেবল প্রক্রিয়াগুলির মধ্যে স্ট্রিং / ডেটা / অ্যারে প্রেরণ করার তুলনায় ডিফল্ট আইপিসি কীভাবে হয়? কোন পথে দ্রুত হবে?
নিকক নিউম্যান

1
@ ব্রোফা, বাস্তব ভাগ করা মেমরির তুলনায় আইপিসির বিশাল ওভারহেড রয়েছে যা জাভা এবং সি করতে সক্ষম।
পেসারিয়ার

@ পেসিয়ার ট্রু, তবে শেয়ার্ড মেমরি কেবলমাত্র একটি হোস্টের প্রসঙ্গে স্কেল করার সমস্যাটি সমাধান করে, বহু হোস্ট জুড়ে স্কেল করার জন্য প্রয়োজনীয় ম্যাক্রো ইস্যুগুলিকে সম্বোধন না করে। অর্থাৎ মেঘে কীভাবে চালানো যায়।
ব্রুফা

20

আপনি ক্লাস্টার মডিউল ব্যবহার করতে পারেন । পরীক্ষা করে দেখুন এই

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {
    // Workers can share any TCP connection
    // In this case its a HTTP server
    http.createServer(function(req, res) {
        res.writeHead(200);
        res.end("hello world\n");
    }).listen(8000);
}

13

আপনার কাছে থাকা সমস্ত কোরকে মাল্টি-নোড জোর করে।
কটাক্ষপাত আছে http://github.com/kriszyp/multi-node

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


12

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

নোড.জেজে ক্লাস্টারিং আপনাকে পৃথক প্রক্রিয়া তৈরি করতে দেয় যা একই সার্ভার পোর্টটি ভাগ করতে পারে। উদাহরণস্বরূপ, আমরা যদি 3000 পোর্টে একটি এইচটিটিপি সার্ভার চালাই তবে এটি প্রসেসরের একক কোরতে একা থ্রেডে চলমান একটি সার্ভার।

নীচে প্রদর্শিত কোড আপনাকে আপনার অ্যাপ্লিকেশনটি ক্লাস্টার করার অনুমতি দেয়। এই কোডটি নোড.জেএস দ্বারা প্রতিনিধিত্ব করা সরকারী কোড is

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    Object.keys(cluster.workers).forEach(function(id) {
        console.log("I am running with ID : " + cluster.workers[id].process.pid);
    });

    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {

    //Do further processing.
}

সম্পূর্ণ টিউটোরিয়াল জন্য এই নিবন্ধটি পরীক্ষা করুন


11

উপরে উল্লিখিত হিসাবে, ক্লাস্টার সমস্ত কোরে আপনার অ্যাপ্লিকেশনটিকে স্কেল এবং লোড-ব্যালেন্স করবে।

মত কিছু যোগ

cluster.on('exit', function () {
  cluster.fork();
});

যে কোনও ব্যর্থ কর্মী পুনরায় চালু করবে।

আজকাল, প্রচুর লোকেরা পিএম 2 কেও পছন্দ করে , যা আপনার জন্য ক্লাস্টারিং পরিচালনা করে এবং কিছু শীতল পর্যবেক্ষণ বৈশিষ্ট্যও সরবরাহ করে

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


3
পিএম 2 উত্পাদন ব্যবহারের জন্য দুর্দান্ত। পর্যবেক্ষণের সরঞ্জামগুলি আমাকে অ্যাপ্লিকেশনগুলির সাথে মেমরির সমস্যাগুলি সমাধান করতে সহায়তা করেছে।
এমবোকিল

7

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

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


7

স্পার্ক 2 স্পার্কের ভিত্তিতে তৈরি যা এখন আর রক্ষণাবেক্ষণ করা হয় না। ক্লাস্টার এর উত্তরসূরি, এবং এর কিছু দুর্দান্ত বৈশিষ্ট্য রয়েছে, যেমন সিপিইউ কোর প্রতি এক শ্রমিক প্রক্রিয়া তৈরি এবং মৃত শ্রমিকদের শ্বাস ফেলা।


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

5

আমি আমার মূল প্রক্রিয়াটি থেকে একটি সহজ পদ্ধতিতে প্রক্রিয়া চালাতে নোড কর্মী ব্যবহার করছি । আমরা অফিসিয়াল উপায়টি প্রায় আসার অপেক্ষার সময় দুর্দান্ত কাজ করছে বলে মনে হচ্ছে।


1
কেন নোড কর্মী উদাহরণ.জেএস চলতে পারে না, আমার নোডটি 0.3.3 পূর্ব সংস্করণ
桂林

5

এখানের ব্লকের নতুন বাচ্চা হ'ল লাইন বুস্টের "আপ"

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

এটি নতুন, তবে এটি বেশ স্থিতিশীল বলে মনে হচ্ছে এবং আমি আমার বর্তমান প্রকল্পগুলির মধ্যে একটিতে এটি আনন্দের সাথে ব্যবহার করছি।


5

ক্লাস্টার মডিউলটি আপনাকে মেশিনের সব কোর ভোগ করতে পারবে। প্রকৃতপক্ষে আপনি কেবল 2 টি কমান্ডে এবং কোনও জনপ্রিয় প্রক্রিয়া ব্যবস্থাপক পিএম 2 ব্যবহার করে আপনার কোডটি স্পর্শ না করে এর সুবিধা নিতে পারেন ।

npm i -g pm2
pm2 start app.js -i max

4

আপনি আপনার নোড.জেএস অ্যাপ্লিকেশনটি ওএস মডিউলের সাথে সংমিশ্রণে ক্লাস্টার মডিউলটি ব্যবহার করে একাধিক কোরগুলিতে চালাতে পারেন যা আপনার কতগুলি সিপিইউ রয়েছে তা সনাক্ত করতে ব্যবহৃত হতে পারে।

উদাহরণস্বরূপ কল্পনা করা যাক আপনার একটি serverমডিউল রয়েছে যা ব্যাকএন্ডে সাধারণ HTTP সার্ভারটি চালায় এবং আপনি এটি বেশ কয়েকটি সিপিইউতে চালাতে চান:

// Dependencies.
const server = require('./lib/server'); // This is our custom server module.
const cluster = require('cluster');
const os = require('os');

 // If we're on the master thread start the forks.
if (cluster.isMaster) {
  // Fork the process.
  for (let i = 0; i < os.cpus().length; i++) {
    cluster.fork();
  }
} else {
  // If we're not on the master thread start the server.
  server.init();
}


0

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

এটি বেশিরভাগ স্ক্র্যাপটিং / ডাটাবেস ওয়েব সার্ভারের আর্কিটেকচারের মতো যেখানে একটি সিজি প্রক্রিয়া ব্যবসায়ের যুক্তি পরিচালনা করে এবং তারপরে একটি ইউনিক্স সকেটের মাধ্যমে ডেটাবেসে ডেটা পুশ করে এবং টান দেয়।

পার্থক্যটি হ'ল ডেটা প্রসেসিং কোনও বন্দরে শোনার নোড ওয়েবসভার হিসাবে লেখা হয়।

এটি আরও জটিল তবে শেষ পর্যন্ত মাল্টি-কোর ডেভেলপমেন্টটি যেতে হবে। প্রতিটি ওয়েব অনুরোধের জন্য একাধিক উপাদান ব্যবহার করে একটি মাল্টিপ্রসেস আর্কিটেকচার।


0

প্রতিটি নোডেজেএস প্রক্রিয়া চলমান একাধিক বাক্সের সামনে খাঁটি টিসিপি লোড ব্যালেন্সার (এইচপি প্রক্সি) ব্যবহার করে একাধিক বাক্সে নোডজেএস স্কেল করা সম্ভব।

তারপরে আপনার যদি সমস্ত রেডিস স্টোর বা এর অনুরূপ কোনও কেন্দ্রীয় রেডিস স্টোর ব্যবহার করতে পারে তার মধ্যে ভাগ করার জন্য কিছু সাধারণ জ্ঞান থাকে যা পরে সমস্ত প্রক্রিয়া দৃষ্টান্ত থেকে অ্যাক্সেস করা যায় (যেমন সমস্ত বাক্স থেকে)


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