Cara Mengoptimalkan Infrastruktur Produksi Node.js: Praktik Terbaik

Panduan optimasi performa Node.js

Kata Pengantar

Di Forward Email, kami telah menghabiskan bertahun-tahun menyempurnakan pengaturan lingkungan produksi Node.js kami. Panduan komprehensif ini membagikan praktik terbaik deployment produksi Node.js yang telah teruji, dengan fokus pada optimasi kinerja, pemantauan, dan pelajaran yang kami pelajari dalam menskalakan aplikasi Node.js untuk menangani jutaan transaksi harian.

Revolusi Optimasi Performa Single Core 573% Kami

Ketika kami bermigrasi dari prosesor Intel ke AMD Ryzen, kami mencapai peningkatan performa 573% pada aplikasi Node.js kami. Ini bukan hanya optimasi kecil—ini secara fundamental mengubah bagaimana aplikasi Node.js kami berperforma di produksi dan menunjukkan pentingnya optimasi performa single core untuk aplikasi Node.js mana pun.

Tip

Untuk praktik terbaik deployment produksi Node.js, pilihan perangkat keras sangat penting. Kami secara khusus memilih hosting DataPacket karena ketersediaan AMD Ryzen mereka karena performa single-core sangat krusial untuk aplikasi Node.js karena eksekusi JavaScript bersifat single-threaded.

Mengapa Optimasi Performa Single Core Penting untuk Node.js

Migrasi kami dari Intel ke AMD Ryzen menghasilkan:

  • Peningkatan performa 573% dalam pemrosesan permintaan (dokumentasi di GitHub Issue #1519 pada halaman status kami)
  • Menghilangkan keterlambatan pemrosesan hingga respons hampir instan (disebutkan di GitHub Issue #298)
  • Rasio harga-ke-performa yang lebih baik untuk lingkungan produksi Node.js
  • Waktu respons yang lebih baik di semua endpoint aplikasi kami

Peningkatan performa ini sangat signifikan sehingga kami sekarang menganggap prosesor AMD Ryzen sebagai hal yang esensial untuk deployment produksi Node.js yang serius, baik Anda menjalankan aplikasi web, API, microservices, atau beban kerja Node.js lainnya.

Untuk detail lebih lanjut tentang pilihan infrastruktur kami, lihat:

Pengaturan Lingkungan Produksi Node.js: Tumpukan Teknologi Kami

Praktik terbaik deployment produksi Node.js kami mencakup pilihan teknologi yang disengaja berdasarkan pengalaman produksi bertahun-tahun. Berikut apa yang kami gunakan dan mengapa pilihan ini berlaku untuk aplikasi Node.js mana pun:

Manajer Paket: pnpm untuk Efisiensi Produksi

Yang kami gunakan: pnpm (versi yang dipin)

Kami memilih pnpm dibandingkan npm dan yarn untuk pengaturan lingkungan produksi Node.js kami karena:

  • Waktu instalasi lebih cepat di pipeline CI/CD
  • Efisiensi ruang disk melalui hard linking
  • Resolusi dependensi yang ketat yang mencegah dependensi hantu
  • Performa lebih baik dalam deployment produksi

Note

Sebagai bagian dari praktik terbaik deployment produksi Node.js kami, kami mempin versi tepat alat penting seperti pnpm untuk memastikan perilaku konsisten di semua lingkungan dan mesin anggota tim.

Detail implementasi:

Kerangka Web: Koa untuk Produksi Node.js Modern

Yang kami gunakan:

  • @koa/router
  • @koa/multer
  • @ladjs/koa-simple-ratelimit Kami memilih Koa daripada Express untuk infrastruktur produksi Node.js kami karena dukungan async/await modern dan komposisi middleware yang lebih bersih. Pendiri kami Nick Baugh berkontribusi pada kedua Express dan Koa, memberikan kami wawasan mendalam tentang kedua framework untuk penggunaan produksi.

Pola-pola ini berlaku baik Anda membangun REST API, server GraphQL, aplikasi web, atau mikroservis.

Contoh implementasi kami:

Pemrosesan Pekerjaan Latar Belakang: Bree untuk Keandalan Produksi

Yang kami gunakan: bree scheduler

Kami membuat dan memelihara Bree karena penjadwal pekerjaan yang ada tidak memenuhi kebutuhan kami untuk dukungan worker thread dan fitur JavaScript modern di lingkungan produksi Node.js. Ini berlaku untuk aplikasi Node.js apa pun yang membutuhkan pemrosesan latar belakang, tugas terjadwal, atau worker thread.

Contoh implementasi kami:

Penanganan Kesalahan: @hapi/boom untuk Keandalan Produksi

Yang kami gunakan: @hapi/boom

Kami menggunakan @hapi/boom untuk respons kesalahan terstruktur di seluruh aplikasi produksi Node.js kami. Pola ini bekerja untuk aplikasi Node.js apa pun yang membutuhkan penanganan kesalahan yang konsisten.

Contoh implementasi kami:

Cara Memantau Aplikasi Node.js di Produksi

Pendekatan kami untuk memantau aplikasi Node.js di produksi telah berkembang melalui bertahun-tahun menjalankan aplikasi dalam skala besar. Kami menerapkan pemantauan di beberapa lapisan untuk memastikan keandalan dan kinerja untuk jenis aplikasi Node.js apa pun.

Pemantauan Produksi Node.js Tingkat Sistem

Implementasi inti kami: helpers/monitor-server.js

Yang kami gunakan: node-os-utils

Ambang batas pemantauan produksi kami (dari kode produksi kami yang sebenarnya):

  • Batas ukuran heap 2GB dengan peringatan otomatis
  • Ambang peringatan penggunaan memori 25%
  • Ambang peringatan penggunaan CPU 80%
  • Ambang peringatan penggunaan disk 75%

Warning

Ambang batas ini bekerja untuk konfigurasi perangkat keras spesifik kami. Saat menerapkan pemantauan produksi Node.js, tinjau implementasi monitor-server.js kami untuk memahami logika tepatnya dan sesuaikan nilai untuk pengaturan Anda.

Pemantauan Tingkat Aplikasi untuk Produksi Node.js

Klasifikasi kesalahan kami: helpers/is-code-bug.js

Pembantu ini membedakan antara:

  • Bug kode sebenarnya yang memerlukan perhatian segera
  • Kesalahan pengguna yang merupakan perilaku yang diharapkan
  • Kegagalan layanan eksternal yang tidak dapat kami kendalikan

Pola ini berlaku untuk aplikasi Node.js apa pun - aplikasi web, API, mikroservis, atau layanan latar belakang. Implementasi logging kami: helpers/logger.js

Kami menerapkan redaksi bidang yang komprehensif untuk melindungi informasi sensitif sambil mempertahankan kemampuan debugging yang berguna di lingkungan produksi Node.js kami.

Pemantauan Spesifik Aplikasi

Implementasi server kami:

Pemantauan antrean: Kami menerapkan batas antrean 5GB dan batas waktu 180 detik untuk pemrosesan permintaan guna mencegah kehabisan sumber daya. Pola ini berlaku untuk aplikasi Node.js apa pun dengan antrean atau pemrosesan latar belakang.

Pemantauan Produksi Node.js dengan Pemeriksaan Kesehatan PM2

Kami telah menyempurnakan pengaturan lingkungan produksi Node.js kami dengan PM2 selama bertahun-tahun pengalaman produksi. Pemeriksaan kesehatan PM2 kami sangat penting untuk menjaga keandalan dalam aplikasi Node.js apa pun.

Sistem Pemeriksaan Kesehatan PM2 Kami

Implementasi inti kami: jobs/check-pm2.js

Pemantauan produksi Node.js kami dengan pemeriksaan kesehatan PM2 meliputi:

  • Berjalan setiap 20 menit melalui penjadwalan cron
  • Memerlukan waktu aktif minimum 15 menit sebelum menganggap proses sehat
  • Memvalidasi status proses dan penggunaan memori
  • Secara otomatis memulai ulang proses yang gagal
  • Mencegah loop restart melalui pemeriksaan kesehatan yang cerdas

Caution

Untuk praktik terbaik penerapan produksi Node.js, kami memerlukan waktu aktif 15+ menit sebelum menganggap proses sehat untuk menghindari loop restart. Ini mencegah kegagalan berantai ketika proses mengalami masalah memori atau masalah lainnya.

Konfigurasi Produksi PM2 Kami

Pengaturan ekosistem kami: Pelajari file startup server kami untuk pengaturan lingkungan produksi Node.js:

Pola ini berlaku apakah Anda menjalankan aplikasi Express, server Koa, API GraphQL, atau aplikasi Node.js lainnya.

Penerapan PM2 Otomatis

Penerapan PM2: ansible/playbooks/node.yml

Kami mengotomatisasi seluruh pengaturan PM2 kami melalui Ansible untuk memastikan penerapan produksi Node.js yang konsisten di semua server kami.

Sistem Penanganan dan Klasifikasi Kesalahan Produksi

Salah satu praktik terbaik penerapan produksi Node.js kami yang paling berharga adalah klasifikasi kesalahan cerdas yang berlaku untuk aplikasi Node.js apa pun:

Implementasi isCodeBug Kami untuk Produksi

Sumber: helpers/is-code-bug.js

Helper ini menyediakan klasifikasi kesalahan cerdas untuk aplikasi Node.js di produksi untuk:

  • Memprioritaskan bug nyata dibandingkan kesalahan pengguna
  • Meningkatkan respons insiden kami dengan fokus pada masalah nyata
  • Mengurangi kelelahan pemberitahuan dari kesalahan pengguna yang diharapkan
  • Memahami lebih baik masalah aplikasi vs yang dihasilkan pengguna

Pola ini bekerja untuk aplikasi Node.js apa pun - apakah Anda membangun situs e-commerce, platform SaaS, API, atau mikroservis.

Integrasi dengan Logging Produksi Kami

Integrasi logger kami: helpers/logger.js Logger kami menggunakan isCodeBug untuk menentukan tingkat peringatan dan redaksi bidang, memastikan kami mendapatkan notifikasi tentang masalah nyata sambil menyaring kebisingan di lingkungan produksi Node.js kami.

Pelajari lebih lanjut tentang pola penanganan kesalahan kami:

Debugging Performa Lanjutan dengan v8-profiler-next dan cpupro

Kami menggunakan alat profiling lanjutan untuk menganalisis snapshot heap dan debugging masalah OOM (Out of Memory), hambatan performa, dan masalah memori Node.js di lingkungan produksi kami. Alat-alat ini penting untuk setiap aplikasi Node.js yang mengalami kebocoran memori atau masalah performa.

Pendekatan Profiling Kami untuk Produksi Node.js

Alat yang kami rekomendasikan:

  • v8-profiler-next - Untuk menghasilkan snapshot heap dan profil CPU
  • cpupro - Untuk menganalisis profil CPU dan snapshot heap

Tip

Kami menggunakan v8-profiler-next dan cpupro bersama-sama untuk membuat alur kerja debugging performa lengkap untuk aplikasi Node.js kami. Kombinasi ini membantu kami mengidentifikasi kebocoran memori, hambatan performa, dan mengoptimalkan kode produksi kami.

Cara Kami Menerapkan Analisis Snapshot Heap

Implementasi pemantauan kami: helpers/monitor-server.js

Pemantauan produksi kami mencakup pembuatan snapshot heap otomatis saat ambang batas memori terlampaui. Ini membantu kami debugging masalah OOM sebelum menyebabkan aplikasi crash.

Pola implementasi utama:

  • Snapshot otomatis saat ukuran heap melebihi ambang batas 2GB
  • Profiling berbasis sinyal untuk analisis sesuai permintaan di produksi
  • Kebijakan retensi untuk mengelola penyimpanan snapshot
  • Integrasi dengan pekerjaan pembersihan kami untuk pemeliharaan otomatis

Alur Kerja Debugging Performa

Pelajari implementasi aktual kami:

Untuk analisis snapshot heap:

  1. Pasang v8-profiler-next untuk pembuatan snapshot
  2. Gunakan cpupro untuk menganalisis snapshot yang dihasilkan
  3. Terapkan ambang batas pemantauan serupa dengan monitor-server.js kami
  4. Atur pembersihan otomatis untuk mengelola penyimpanan snapshot
  5. Buat handler sinyal untuk profiling sesuai permintaan di produksi

Untuk profiling CPU:

  1. Buat profil CPU selama periode beban tinggi
  2. Analisis dengan cpupro untuk mengidentifikasi hambatan
  3. Fokus pada jalur panas dan peluang optimasi
  4. Pantau sebelum/sesudah perbaikan performa

Warning

Pembuatan snapshot heap dan profil CPU dapat memengaruhi performa. Kami menyarankan menerapkan throttling dan hanya mengaktifkan profiling saat menyelidiki masalah tertentu atau selama jendela pemeliharaan.

Integrasi dengan Pemantauan Produksi Kami

Alat profiling kami terintegrasi dengan strategi pemantauan yang lebih luas:

  • Pemicu otomatis berdasarkan ambang batas memori/CPU
  • Integrasi peringatan saat masalah performa terdeteksi
  • Analisis historis untuk melacak tren performa dari waktu ke waktu
  • Korelasi dengan metrik aplikasi untuk debugging yang komprehensif Pendekatan ini telah membantu kami mengidentifikasi dan menyelesaikan kebocoran memori, mengoptimalkan jalur kode panas, dan menjaga kinerja yang stabil di lingkungan produksi Node.js kami.

Keamanan Infrastruktur Produksi Node.js

Kami menerapkan keamanan menyeluruh untuk infrastruktur produksi Node.js kami melalui otomatisasi Ansible. Praktik ini berlaku untuk aplikasi Node.js apa pun:

Keamanan Tingkat Sistem untuk Produksi Node.js

Implementasi Ansible kami: ansible/playbooks/security.yml

Langkah keamanan utama kami untuk lingkungan produksi Node.js:

  • Swap dinonaktifkan untuk mencegah data sensitif ditulis ke disk
  • Core dumps dinonaktifkan untuk mencegah dump memori yang berisi informasi sensitif
  • Penyimpanan USB diblokir untuk mencegah akses data yang tidak sah
  • Penyesuaian parameter kernel untuk keamanan dan kinerja

Warning

Saat menerapkan praktik terbaik deployment produksi Node.js, menonaktifkan swap dapat menyebabkan proses dibunuh karena kehabisan memori jika aplikasi Anda melebihi RAM yang tersedia. Kami memantau penggunaan memori dengan cermat dan menyesuaikan ukuran server kami secara tepat.

Keamanan Aplikasi untuk Aplikasi Node.js

Redaksi bidang log kami: helpers/logger.js

Kami menghapus bidang sensitif dari log termasuk kata sandi, token, kunci API, dan informasi pribadi. Ini melindungi privasi pengguna sambil mempertahankan kemampuan debugging di lingkungan produksi Node.js mana pun.

Otomatisasi Keamanan Infrastruktur

Setup Ansible lengkap kami untuk produksi Node.js:

Konten Keamanan Kami

Pelajari lebih lanjut tentang pendekatan keamanan kami:

Arsitektur Database untuk Aplikasi Node.js

Kami menggunakan pendekatan database hibrida yang dioptimalkan untuk aplikasi Node.js kami. Pola ini dapat diadaptasi untuk aplikasi Node.js apa pun:

Implementasi SQLite untuk Produksi Node.js

Yang kami gunakan:

Konfigurasi kami: ansible/playbooks/sqlite.yml

Kami menggunakan SQLite untuk data spesifik pengguna dalam aplikasi Node.js kami karena menyediakan:

  • Isolasi data per pengguna/penyewa
  • Kinerja lebih baik untuk kueri pengguna tunggal
  • Cadangan dan migrasi yang disederhanakan
  • Kompleksitas berkurang dibandingkan database bersama

Pola ini bekerja dengan baik untuk aplikasi SaaS, sistem multi-tenant, atau aplikasi Node.js apa pun yang membutuhkan isolasi data.

Implementasi MongoDB untuk Produksi Node.js

Yang kami gunakan:

Konfigurasi kami: config/mongoose.js

Kami menggunakan MongoDB untuk data aplikasi di lingkungan produksi Node.js kami karena menyediakan:

  • Skema fleksibel untuk struktur data yang berkembang
  • Performa lebih baik untuk kueri kompleks
  • Kemampuan skala horizontal
  • Bahasa kueri yang kaya

Note

Pendekatan hibrida kami mengoptimalkan untuk kasus penggunaan spesifik kami. Pelajari pola penggunaan database kami yang sebenarnya dalam kode untuk memahami apakah pendekatan ini cocok untuk kebutuhan aplikasi Node.js Anda.

Pemrosesan Job Latar Belakang Produksi Node.js

Kami membangun arsitektur job latar belakang kami di sekitar Bree untuk penyebaran produksi Node.js yang andal. Ini berlaku untuk aplikasi Node.js apa pun yang membutuhkan pemrosesan latar belakang:

Setup Server Bree Kami untuk Produksi

Implementasi utama kami: bree.js

Deployment Ansible kami: ansible/playbooks/bree.yml

Contoh Job Produksi

Pemantauan kesehatan: jobs/check-pm2.js

Otomasi pembersihan: jobs/cleanup-tmp.js

Semua job kami: Jelajahi direktori job lengkap kami

Pola-pola ini berlaku untuk aplikasi Node.js apa pun yang membutuhkan:

  • Tugas terjadwal (pemrosesan data, laporan, pembersihan)
  • Pemrosesan latar belakang (pengubahan ukuran gambar, pengiriman email, impor data)
  • Pemantauan kesehatan dan pemeliharaan
  • Pemanfaatan worker thread untuk tugas intensif CPU

Pola Penjadwalan Job Kami untuk Produksi Node.js

Pelajari pola penjadwalan job kami yang sebenarnya di direktori job kami untuk memahami:

  • Bagaimana kami mengimplementasikan penjadwalan seperti cron di produksi Node.js
  • Penanganan error dan logika retry kami
  • Bagaimana kami menggunakan worker thread untuk tugas intensif CPU

Pemeliharaan Otomatis untuk Aplikasi Produksi Node.js

Kami mengimplementasikan pemeliharaan proaktif untuk mencegah masalah umum produksi Node.js. Pola-pola ini berlaku untuk aplikasi Node.js apa pun:

Implementasi Pembersihan Kami

Sumber: jobs/cleanup-tmp.js

Pemeliharaan otomatis kami untuk aplikasi produksi Node.js menargetkan:

  • File sementara yang lebih tua dari 24 jam
  • File log yang melewati batas retensi
  • File cache dan data sementara
  • File yang diunggah yang tidak lagi diperlukan
  • Heap snapshot dari debugging performa

Pola-pola ini berlaku untuk aplikasi Node.js apa pun yang menghasilkan file sementara, log, atau data cache.

Manajemen Ruang Disk untuk Produksi Node.js

Ambang batas pemantauan kami: helpers/monitor-server.js

  • Batas antrean untuk pemrosesan latar belakang
  • Peringatan penggunaan disk 75%
  • Pembersihan otomatis saat ambang batas terlampaui

Otomasi Pemeliharaan Infrastruktur

Otomasi Ansible kami untuk produksi Node.js:

Panduan Implementasi Deployment Produksi Node.js

Pelajari Kode Kami yang Sebenarnya untuk Praktik Terbaik Produksi

Mulailah dengan file-file kunci ini untuk pengaturan lingkungan produksi Node.js:

  1. Konfigurasi: config/index.js
  2. Pemantauan: helpers/monitor-server.js
  3. Penanganan kesalahan: helpers/is-code-bug.js
  4. Pencatatan: helpers/logger.js
  5. Kesehatan proses: jobs/check-pm2.js

Pelajari dari Posting Blog Kami

Panduan implementasi teknis kami untuk produksi Node.js:

Otomatisasi Infrastruktur untuk Produksi Node.js

Playbook Ansible kami untuk dipelajari dalam penyebaran produksi Node.js:

Studi Kasus Kami

Implementasi perusahaan kami:

Kesimpulan: Praktik Terbaik Penyebaran Produksi Node.js

Infrastruktur produksi Node.js kami menunjukkan bahwa aplikasi Node.js dapat mencapai keandalan tingkat perusahaan melalui:

  • Pilihan perangkat keras yang terbukti (AMD Ryzen untuk optimasi performa single core sebesar 573%)
  • Pemantauan produksi Node.js yang telah teruji dengan ambang batas spesifik dan respons otomatis
  • Klasifikasi kesalahan cerdas untuk meningkatkan respons insiden di lingkungan produksi
  • Debugging performa lanjutan dengan v8-profiler-next dan cpupro untuk pencegahan OOM
  • Penguatan keamanan menyeluruh melalui otomatisasi Ansible
  • Arsitektur basis data hibrida yang dioptimalkan untuk kebutuhan aplikasi
  • Pemeliharaan otomatis untuk mencegah masalah umum produksi Node.js

Inti yang dapat diambil: Pelajari file implementasi dan posting blog kami yang sebenarnya daripada mengikuti praktik terbaik generik. Basis kode kami menyediakan pola dunia nyata untuk penyebaran produksi Node.js yang dapat disesuaikan untuk aplikasi Node.js apa pun - aplikasi web, API, mikroservis, atau layanan latar belakang.

Daftar Sumber Lengkap untuk Produksi Node.js

File Implementasi Inti Kami

Implementasi Server Kami

Otomasi Infrastruktur Kami

Posting Blog Teknis Kami

Studi Kasus Perusahaan Kami