Rumah hujung hadapan web tutorial js Menskalakan Aplikasi Node.js dengan NGINX dan Pengimbangan Beban

Menskalakan Aplikasi Node.js dengan NGINX dan Pengimbangan Beban

Oct 08, 2024 am 06:19 AM

Scaling Node.js Applications with NGINX and Load Balancing

Apabila aplikasi Node.js anda berkembang dan menerima lebih banyak trafik, penskalaan menjadi penting untuk mengekalkan prestasi dan kestabilan. Dalam artikel ini, kami akan menyelami teknik dan alatan utama yang membantu menskalakan aplikasi Node.js anda, memfokuskan pada NGINX sebagai proksi terbalik dan pengimbang beban, serta kaedah lain untuk mengendalikan trafik dan permintaan yang tinggi.

Dalam artikel ini, kami akan membincangkan:

  1. Apakah NGINX dan mengapa ia penting?
  2. Menyediakan NGINX sebagai proksi terbalik untuk Node.js.
  3. Imbangan beban dengan NGINX.
  4. Caching kandungan statik dengan NGINX.
  5. Strategi penskalaan untuk aplikasi Node.js.
  6. Kes penggunaan dunia sebenar untuk penskalaan.

Apakah NGINX dan Mengapa Ia Penting?

NGINX ialah pelayan web berprestasi tinggi yang terkenal dengan keupayaannya sebagai proksi terbalik, pengimbang beban dan cache HTTP. Ia mengendalikan volum besar sambungan serentak dengan cekap, menjadikannya alat yang sangat baik untuk menskalakan aplikasi Node.js.

Ciri-ciri Utama NGINX:

  • Proksi Songsang: Ia mengarahkan permintaan pelanggan masuk ke pelayan akhir, membantu mengagihkan beban merentas berbilang pelayan.
  • Pengimbangan Beban: NGINX mengimbangi trafik masuk merentas berbilang kejadian pelayan, memastikan tiada pelayan tunggal yang terharu.
  • Caching: Ia menyimpan cache kandungan statik seperti imej, helaian gaya dan skrip, mengurangkan keperluan untuk menjana respons yang sama berulang kali.

Menyediakan NGINX sebagai Proksi Songsang untuk Node.js

Satu proksi terbalik mengarahkan permintaan pelanggan ke satu atau lebih pelayan bahagian belakang. Menggunakan NGINX sebagai proksi terbalik untuk aplikasi Node.js anda boleh memunggah tugas seperti penamatan SSL, caching dan pengimbangan beban daripada aplikasi anda.

Persediaan Langkah demi Langkah:

  1. Pasang NGINX:
    Mula-mula, pasang NGINX pada pelayan anda. Di Ubuntu, ini boleh dilakukan menggunakan:

    sudo apt update
    sudo apt install nginx
    
    Salin selepas log masuk
  2. Konfigurasikan NGINX:
    Cipta fail konfigurasi baharu untuk apl Node.js anda dalam direktori /etc/nginx/sites-available/.

Berikut ialah contoh fail konfigurasi:

   server {
       listen 80;
       server_name yourdomain.com;

       location / {
           proxy_pass http://localhost:3000; # Your Node.js app
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_cache_bypass $http_upgrade;
       }
   }
Salin selepas log masuk
  1. Dayakan Konfigurasi:
    Buat pautan simbolik daripada tapak-tersedia kepada tapak-didayakan untuk mendayakan konfigurasi:

    sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
    
    Salin selepas log masuk
  2. Mulakan semula NGINX:
    Mulakan semula NGINX untuk menggunakan perubahan:

    sudo systemctl restart nginx
    
    Salin selepas log masuk

Kini, NGINX akan memajukan sebarang permintaan masuk ke aplikasi Node.js anda yang dijalankan pada port 3000. Persediaan proksi terbalik memastikan apl Node.js anda diasingkan daripada akses pelanggan langsung, menambahkan lapisan keselamatan.

Pengimbangan Beban dengan NGINX

Apabila trafik meningkat, satu contoh Node.js mungkin bergelut untuk mengendalikan semua permintaan masuk. Pengimbangan beban membolehkan trafik diagihkan secara sama rata merentas berbilang contoh aplikasi anda, meningkatkan kebolehpercayaan dan prestasi.

Persediaan Pengimbang Beban NGINX:

  1. Ubah suai Konfigurasi NGINX: Dalam fail konfigurasi NGINX, tentukan pelayan bahagian belakang yang NGINX akan mengimbangi permintaan merentas: ```nginx apl node huluan { pelayan localhost:3000; pelayan localhost:3001; pelayan localhost:3002; }

pelayan {
dengar 80;
server_name yourdomain.com;

   location / {
       proxy_pass http://node_app;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
   }
Salin selepas log masuk

}

2. **Explanation**:
   - The `upstream` block defines a pool of Node.js servers running on different ports.
   - NGINX will distribute incoming requests evenly among these servers.

3. **Load Balancing Algorithms**:
   By default, NGINX uses a round-robin algorithm to balance traffic. You can specify other load balancing methods such as:
   - **Least Connections**: Sends requests to the server with the fewest active connections.
     ```nginx
     upstream node_app {
         least_conn;
         server localhost:3000;
         server localhost:3001;
     }
     ```

4. **Test and Scale**:
   You can now test the setup by running multiple instances of your Node.js app on different ports (3000, 3001, 3002, etc.) and monitor how NGINX balances the traffic.

## Caching Static Content with NGINX
Caching static content such as images, CSS, and JavaScript files can significantly reduce the load on your Node.js application by serving cached versions of these assets directly from NGINX.

### Caching Setup in NGINX:
1. **Modify Configuration for Caching**:
   Add caching rules to your server block:
   ```nginx
   server {
       listen 80;
       server_name yourdomain.com;

       location / {
           proxy_pass http://localhost:3000;
           proxy_set_header Host $host;
           proxy_cache_bypass $http_upgrade;
       }

       # Caching static content
       location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
           expires 30d;
           add_header Cache-Control "public, no-transform";
       }
   }
Salin selepas log masuk
  1. Penjelasan:
    • Tamat tempoh 30h; arahan memberitahu NGINX untuk cache fail statik selama 30 hari.
    • Ini meningkatkan dengan ketara masa tindak balas untuk aset ini kerana ia disampaikan terus daripada NGINX tanpa menyentuh aplikasi Node.js.

Strategi Penskalaan untuk Aplikasi Node.js

Menskalakan aplikasi Node.js bukan sekadar menggunakan NGINX. Di bawah ialah beberapa lagi teknik untuk memastikan aplikasi anda berskala dengan berkesan:

Penskalaan Menegak

Penskalaan menegak bermaksud menaik taraf sumber perkakasan pelayan, seperti menambah bilangan CPU atau menambah lebih banyak memori. Walaupun ini boleh meningkatkan prestasi dalam jangka pendek, ia terhad oleh keupayaan fizikal mesin.

Penskalaan Mendatar

Penskalaan mendatar melibatkan menjalankan berbilang kejadian aplikasi anda merentas pelayan yang berbeza dan mengimbangi trafik antaranya menggunakan alatan seperti NGINX atau pengimbang beban awan. Kaedah ini membenarkan penskalaan hampir tanpa had dengan menambahkan lebih banyak kejadian.

Clustering in Node.js

Node.js can run on multiple cores by using the built-in cluster module. This allows you to utilize all the available CPU cores on a server, increasing throughput.

Example:

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

if (cluster.isMaster) {
    const numCPUs = os.cpus().length;

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

    cluster.on('exit', (worker, code, signal) => {
        console.log(`Worker ${worker.process.pid} died`);
    });
} else {
    // Workers can share any TCP connection
    http.createServer((req, res) => {
        res.writeHead(200);
        res.end('Hello, world!\n');
    }).listen(8000);
}
Salin selepas log masuk

This example shows how to use all CPU cores available on a machine by forking worker processes.

Real-World Use Case: Scaling an E-commerce Website

Problem: An e-commerce website is experiencing high traffic during sales events, leading to slow response times and occasional server crashes.

Solution:

  • Use NGINX to distribute traffic across multiple Node.js servers running different instances of the application.
  • Cache static assets like product images and JavaScript files with NGINX to reduce load on the server.
  • Implement Node.js Clustering to fully utilize the server’s CPU resources.

Outcome: The e-commerce website can now handle thousands of concurrent users without slowdowns, ensuring a smooth user experience during peak traffic times.

Why SSL, Encryption, and Security Matter?

When scaling applications, security should not be overlooked. Implementing SSL (Secure Sockets Layer) ensures that data transmitted between the client and server is encrypted and protected from attacks.

Steps to Enable SSL:

  1. Obtain an SSL Certificate from a trusted Certificate Authority (CA) like Let's Encrypt.
  2. Configure NGINX to use SSL:

    server {
       listen 443 ssl;
       server_name yourdomain.com;
    
       ssl_certificate /etc/ssl/certs/yourdomain.crt;
       ssl_certificate_key /etc/ssl/private/yourdomain.key;
    
       location / {
           proxy_pass http://localhost:3000;
       }
    }
    
    Salin selepas log masuk
  3. Redirect HTTP to HTTPS to ensure all traffic is secure:

    server {
       listen 80;
       server_name yourdomain.com;
       return 301 https://$host$request_uri;
    }
    
    Salin selepas log masuk

Conclusion

Scaling a Node.js application is essential as traffic and demand grow. By utilizing NGINX as a reverse proxy and load balancer, you can distribute traffic effectively, cache static assets, and ensure high availability. Combining these techniques with horizontal scaling and Node.js clustering enables your applications to handle massive traffic loads while maintaining performance and stability.

Implement these strategies in your projects to achieve better scalability, improved user experience, and increased uptime.

Atas ialah kandungan terperinci Menskalakan Aplikasi Node.js dengan NGINX dan Pengimbangan Beban. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1672
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Peranan C/C dalam JavaScript Jurubah dan Penyusun Peranan C/C dalam JavaScript Jurubah dan Penyusun Apr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

See all articles