Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >pengedaran permintaan nodejs
Dengan perkembangan pesat Internet dan populariti peranti mudah alih, kepentingan aplikasi Web menjadi semakin menonjol. Sebagai persekitaran JavaScript sisi pelayan sumber terbuka, Node.js telah digemari oleh semakin ramai pembangun dan perusahaan kerana ciri I/O tak segerak dan dipacu peristiwanya. Walau bagaimanapun, apabila skala aplikasi yang kami bangunkan meningkat secara beransur-ansur, kami mungkin menghadapi beberapa masalah kesesakan prestasi dan pengimbangan beban. Oleh itu, menggunakan Request Dispatch dalam aplikasi Node.js untuk meningkatkan prestasi ialah penyelesaian yang baik.
Apakah itu pengedaran permintaan?
Pengagihan permintaan merujuk kepada proses pengagihan permintaan daripada pelanggan kepada pelayan yang berbeza untuk diproses. Ia boleh membantu kami mengendalikan sejumlah besar permintaan pada masa yang sama dan meningkatkan prestasi dan kebolehskalaan sistem.
Skim pengedaran permintaan yang biasa digunakan?
Dalam aplikasi Node.js, terdapat penyelesaian pengedaran permintaan biasa berikut:
Pengimbangan beban ialah Permintaan yang paling asas dan biasa kaedah pengedaran, yang boleh mengedarkan permintaan kepada pelayan yang berbeza untuk diproses. Seperti yang ditunjukkan dalam rajah di bawah, pengimbangan beban boleh mempunyai berbilang nod, dan setiap nod mempunyai alamat IP yang unik Selepas pelanggan menghantar permintaan kepada nod ini, permintaan akan dihantar ke salah satu kejadian.
Perisian pengimbangan beban yang biasa digunakan termasuk Nginx, HAProxy, dsb., yang boleh menyokong pelbagai algoritma pengimbangan beban, seperti undian, bilangan sambungan minimum, IP Hash, dll.
Proksi songsang memajukan permintaan pelanggan melalui pelayan proksi ke pelayan belakang untuk diproses, dan kemudian mengembalikan respons daripada pelayan belakang kepada proses klien. Seperti yang ditunjukkan dalam rajah di bawah, pelayan proksi terbalik bertanggungjawab untuk menerima permintaan pelanggan dan memajukan permintaan ke pelayan hujung belakang mengikut alamat yang diminta Pelanggan hanya boleh melihat alamat IP dan nombor port pelayan proksi terbalik .
Perisian proksi terbalik yang biasa digunakan termasuk Nginx, Apache, dsb., yang boleh melakukan penulisan semula URL, caching dan penyulitan SSL atas permintaan.
Cache teragih mencache respons pada berbilang nod supaya data respons boleh digunakan semula. Seperti yang ditunjukkan dalam rajah di bawah, sebelum pengedaran permintaan, kami boleh cache data tindak balas ke dalam cache yang diedarkan, yang boleh mengurangkan beban pada pelayan bahagian belakang dan meningkatkan kelajuan tindak balas.
Perisian cache teragih yang biasa digunakan termasuk Redis, Memcached, dsb., yang boleh menyokong masa tamat tempoh data, strategi kemas kini cache, penempatan kluster, dsb.
Bagaimana untuk melaksanakan pengedaran permintaan dalam Node.js?
Terdapat banyak cara untuk melaksanakan pengedaran permintaan dalam Node.js Berikut ialah beberapa kaedah yang biasa digunakan.
Dalam Node.js, anda boleh menggunakan modul http-proksi untuk melaksanakan pengimbangan beban berdasarkan protokol HTTP. Modul http-proksi boleh mengedarkan permintaan HTTP kepada berbilang pelayan untuk pemprosesan dan menyokong algoritma pengimbangan beban. Berikut ialah contoh kod yang menggunakan http-proxy untuk melaksanakan pengimbangan beban:
var http = require('http'); var httpProxy = require('http-proxy'); var proxy = httpProxy.createProxyServer({}); var server = http.createServer(function(req, res) { proxy.web(req, res, { target: 'http://localhost:3000' }); }); server.listen(8080); console.log('Server running on port 8080');
Kod di atas mula-mula mencipta perkhidmatan http dan menggunakan modul httpProxy untuk mencipta pelayan proksi terbalik. Permintaan itu kemudiannya dimajukan ke localhost:3000 untuk diproses.
WebSocket ialah protokol komunikasi dua hala masa nyata Dalam Node.js, socket.io boleh digunakan untuk melaksanakan fungsi WebSocket. socket.io boleh mengedarkan permintaan sambungan kepada berbilang pelayan untuk pemprosesan dan menyokong algoritma pengimbangan beban. Berikut ialah contoh kod yang menggunakan socket.io untuk melaksanakan pengimbangan beban:
var http = require('http'); var server = http.createServer(); var io = require('socket.io')(server); var redisAdapter = require('socket.io-redis'); io.adapter(redisAdapter({ host: 'localhost', port: 6379 })); io.on('connection', function(socket) { console.log('a user connected'); socket.on('disconnect', function() { console.log('user disconnected'); }); }); server.listen(8080); console.log('Server running on port 8080');
Kod di atas mencipta perkhidmatan WebSocket dan menggunakan penyesuai socket.io-redis untuk menyimpan maklumat sambungan ke dalam Redis. Permintaan itu kemudiannya boleh diedarkan kepada berbilang pelayan untuk diproses.
Modul kluster boleh digunakan dalam Node.js untuk menghantar berbilang proses aplikasi ke berbilang teras CPU untuk pemprosesan. Dengan memisahkan proses utama dan proses pekerja, anda boleh meningkatkan prestasi dan kebolehskalaan aplikasi Node.js anda. Berikut ialah contoh kod yang menggunakan modul kluster untuk mencapai pengimbangan beban berbilang proses:
var cluster = require('cluster'); var os = require('os'); if (cluster.isMaster) { var numCPUs = os.cpus().length; console.log('Master cluster setting up ' + numCPUs + ' workers...'); for (var i = 0; i <p>Kod di atas terlebih dahulu menentukan sama ada proses semasa adalah proses utama, mencipta pelbagai proses pekerja dalam proses utama dan memantau status mereka; Buat pelayan HTTP dalam proses dan dengar pada port 3000. </p><p>Ringkasan</p><p>Menggunakan pengedaran permintaan dalam aplikasi Node.js boleh membantu kami meningkatkan prestasi dan kebolehskalaan aplikasi Penyelesaian pengedaran permintaan biasa termasuk pengimbangan beban, proksi terbalik dan cache yang diedarkan. Terdapat banyak cara untuk melaksanakan pengedaran permintaan dalam Node.js, seperti pengimbangan beban berasaskan HTTP, pengimbangan beban berasaskan WebSocket dan penggunaan modul kluster untuk mencapai pengimbangan beban berbilang proses. Kaedah pelaksanaan yang berbeza mempunyai kelebihan dan kekurangannya sendiri, dan kita perlu memilih berdasarkan senario perniagaan kita sendiri. </p>
Atas ialah kandungan terperinci pengedaran permintaan nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!