6 tips kecil untuk mempersiapkan NodeJS Anda untuk beban tinggi

Layanan pengenalan wajah Look-A-Like telah melayani ribuan pengguna secara bersamaan.

Berkembang di NodeJS sebagai hobi adalah kesenangan, tetapi ketika menyangkut produksi bagi banyak pengguna, ada beberapa hal yang harus Anda ketahui untuk menghindari respons dan gangguan yang lama.


Sebagai bagian dari pekerjaan kami di MyHeritage, kami mengembangkan layanan doppelgänger untuk Eurovision 2019, yang dengannya, dengan mengunggah foto selfie, Anda dapat mengetahui kontestan mana yang paling mirip dengan Anda.


Selain logika pengenalan wajah, aplikasi memiliki persyaratan yang sangat jelas: harus melayani puluhan ribu pengguna secara bersamaan, karena Eurovision ditonton oleh jutaan orang di seluruh dunia.


Sangat cepat, kami menyadari bahwa penyeimbang beban di depan aplikasi yang dikonfigurasi dengan Penskalaan Otomatis tidak cukup untuk toleransi kesalahan. Berikut ini banyak membantu kami:


  1. Berharap yang terbaik, tetapi bersiaplah untuk yang terburuk: ukur berapa banyak pengguna secara bersamaan yang dapat melayani aplikasi Anda dalam waktu X (dalam satu contoh). Sebagai contoh, dalam kasus kami, pengujian menunjukkan bahwa kami dapat melayani 200 pengguna bersamaan di setiap instance EC2 selama 10 detik, jadi ketika kami mengetahui bahwa kami harus melayani 10.000 pengguna bersamaan, kami hanya harus menyiapkan 50 server untuk penyeimbang. Untuk pengujian, kami menggunakan alat yang sangat baik yang disebut JMeter .

    Dan tutorial ini sangat membantu dalam mempersiapkan pengukuran.
  2. Hindari kunci: memblokir operasi (seperti fs.readSync ) menggoda karena kode terlihat lebih bersih, tetapi mereka benar-benar mematikan kinerja. Sebagai gantinya, gunakan operasi async / await , karena selama operasi asinkron, CPU akan tersedia untuk tugas lain (lihat Loop Kejadian ).

    Sebelum: const res = fs.readSync('file.txt');
    const res = fs.readSync('file.txt');
    Setelah: const res = await fs.readAsync('file.txt');
  3. Tambah batas memori: Node dikonfigurasi secara default ke batas 1 GB. Jika server dapat mengakses, katakanlah, 4 GB khusus untuk aplikasi Anda, Anda harus menetapkan batas memori maksimum secara manual menggunakan CLI dengan tanda berikut: --max-old-space-size
    --max-old-space-size
    Contoh: node --max-old-space-size=4096 server.js
  4. Pastikan Anda menggunakan semua inti prosesor: secara default, Node berjalan di utas yang sama. Jika Anda belum secara khusus mengkonfigurasi konfigurasi yang akan menjalankan beberapa utas, hemat uang dengan memilih server dengan 1 inti.
  5. Kurangi jumlah panggilan ke aplikasi: konfigurasikan HTTPS yang dipaksakan dan semua pengalihan setinggi mungkin (misalnya, di tingkat proksi). Ini akan memungkinkan aplikasi tidak terganggu oleh berlebihan, dan, karenanya, lebih mudah diakses untuk permintaan yang benar-benar penting.
  6. Penanganan kesalahan: gunakan pencatatan, misalnya Logz.io/AWS CloudWatch untuk melacak kesalahan yang dapat menyebabkan kegagalan aplikasi. JANGAN laporkan layanan seperti Slack tentang segalanya, karena pesan biasanya masuk secara massal dan dapat dengan mudah menyumbat saluran. Kami menggunakan perpustakaan luar biasa bernama Winston untuk masuk ke NodeJS.

Dalam kasus kami, kiat-kiat ini mengarah pada peningkatan sepuluh kali lipat dalam produktivitas dan membantu menjaga lingkungan produksi tetap bersih bahkan ketika Anda harus melayani ribuan pengguna secara bersamaan.


Terima kasih sudah membaca.

Source: https://habr.com/ru/post/id456036/


All Articles