Kelompokkan Aplikasi Node.js Anda untuk Prestasi Lebih Baik

DDD
Lepaskan: 2024-09-19 14:30:09
asal
262 orang telah melayarinya

Node.js terkenal dengan kelajuan dan kecekapan, menjadikannya pilihan popular untuk membina aplikasi berprestasi tinggi dan berskala.
Walau bagaimanapun, di luar kotak, Node.js adalah satu-benang, bermakna ia berjalan pada satu teras CPU, yang boleh mengehadkan dalam persekitaran pelayan berbilang teras. Jika aplikasi anda intensif sumber atau anda menjangkakan trafik yang tinggi, anda perlu memaksimumkan penggunaan teras CPU pelayan anda.
Di situlah pengelompokan Node.js masuk.

Dalam siaran ini, kami akan menyelami apa itu pengelompokan Node.js, mengapa ia penting dan cara anda boleh menggunakannya untuk meningkatkan prestasi aplikasi anda.

Apakah Pengelompokan Node.js?

Pengkelompokan Node.js ialah teknik yang membolehkan anda menggunakan semua teras CPU dengan menghasilkan berbilang kejadian (pekerja) aplikasi Node.js anda.
Pekerja ini berkongsi pelabuhan yang sama dan diuruskan oleh proses induk. Setiap pekerja boleh mengendalikan permintaan masuk secara bebas, membenarkan permohonan anda mengagihkan beban kerja dan memproses permintaan secara selari.

Dengan mengelompokkan aplikasi Node.js anda, anda boleh:

  • Gunakan berbilang teras CPU
  • Tingkatkan prestasi aplikasi
  • Berikan toleransi kesalahan sekiranya seorang pekerja terhempas
  • Skalakan secara mendatar tanpa terlalu merumitkan pangkalan kod

Bagaimana Pengelompokan Berfungsi?

Dalam gugusan Node.js, terdapat proses induk yang mengawal beberapa proses pekerja.
Proses induk tidak mengendalikan permintaan HTTP secara langsung tetapi mengurus pekerja yang melakukannya. Permintaan daripada pelanggan diedarkan ke seluruh pekerja ini, mengimbangi beban dengan cekap.

Jika proses pekerja ranap atas sebab tertentu, proses induk boleh melahirkan proses baharu, memastikan masa henti yang minimum.

Bilakah Anda Harus Menggunakan Pengelompokan?

Pengelompokkan amat berguna apabila aplikasi anda:

  • Mengalami trafik yang tinggi dan perlu mengendalikan banyak permintaan serentak
  • Melaksanakan tugas terikat CPU seperti pengekodan video, pemprosesan imej atau penghuraian data berskala besar.
  • Berjalan pada pemproses berbilang teras yang tidak digunakan sepenuhnya Jika aplikasi anda menghabiskan banyak masa menunggu operasi I/O, seperti pertanyaan pangkalan data atau panggilan API, pengelompokan mungkin tidak meningkatkan prestasi dengan ketara.

Dalam kes di atas, anda boleh meningkatkan melalui menggunakan teknik pengaturcaraan tak segerak.

Cara Melaksanakan Pengelompokan dalam Node.js

Node.js menyediakan modul kluster terbina dalam untuk mencipta kluster dengan mudah. Mari kita lihat contoh mudah cara mengelompokkan aplikasi Node.js anda.

Langkah 1: Sediakan Aplikasi Anda
Sebelum menambah pengelompokan, anggap anda mempunyai pelayan HTTP yang mudah (server.js):

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('Hello World\n');
});

server.listen(3000, () => {
  console.log(`Worker process ID: ${process.pid} is listening on port 3000`);
});

Salin selepas log masuk

Aplikasi ini berjalan pada satu teras. Mari ubah suai untuk menggunakan pengelompokan.

Langkah 2: Menggunakan Modul kluster
Modul kluster membolehkan kami menukar proses semasa ke dalam berbilang proses pekerja. Begini cara melaksanakan pengelompokan:

const cluster = require('cluster');
const http = require('http');
const os = require('os');

// Get the number of CPU cores
const numCPUs = os.cpus().length;

if (cluster.isMaster) {
  console.log(`Master process ID: ${process.pid}`);

  // Fork workers for each CPU core
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  // Listen for worker exit and replace it with a new one
  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died. Spawning a new one...`);
    cluster.fork();
  });
} else {
  // Workers share the same TCP connection
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello from worker ' + process.pid + '\n');
  }).listen(3000);

  console.log(`Worker process ID: ${process.pid}`);
}

Salin selepas log masuk

Penjelasan:
1. Proses Induk: Apabila proses bermula, ia menyemak sama ada ia adalah proses induk (cluster.isMaster). Tuan bertanggungjawab untuk membuat proses pekerja, satu untuk setiap teras CPU. Kaedah os.cpus() digunakan untuk mendapatkan semula bilangan teras CPU yang tersedia.

2. Proses Pekerja: Untuk setiap teras CPU, pekerja baharu dicabang (cluster.fork()). Proses pekerja ini menjalankan pelayan HTTP dan mengendalikan permintaan masuk.

3. Toleransi Kesalahan: Jika proses pekerja ranap, peristiwa cluster.on('exit') akan dicetuskan dan pekerja baharu akan muncul untuk menggantikan yang mati.

Langkah 3: Menguji Aplikasi Berkelompok Anda
Sekarang, jika anda menjalankan aplikasi:

node server.js
Salin selepas log masuk

Cluster Your Node.js Application for Better Performance

Anda akan perasan bahawa berbilang pekerja dibuat, masing-masing dengan ID proses yang unik. Setiap permintaan dikendalikan oleh pekerja yang berbeza, mengimbangi beban dengan berkesan.

Anda boleh menguji cara pengelompokan meningkatkan prestasi aplikasi anda dengan menghantar berbilang permintaan dan memerhatikan cara beban kerja diagihkan di kalangan pekerja.

Jadi, pada kali seterusnya anda membina aplikasi Node.js berprestasi tinggi, ingat untuk mempertimbangkan pengelompokan!

Itu sahaja untuk blog ini! Nantikan lebih banyak kemas kini dan teruskan membina apl yang menakjubkan! ?✨
Selamat mengekod! ?

Atas ialah kandungan terperinci Kelompokkan Aplikasi Node.js Anda untuk Prestasi Lebih Baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!