Mengapa Saya Menggunakan Node.js? Tutorial Kasus per Kasus

Diterbitkan: 2022-03-11

pengantar

Popularitas JavaScript yang meningkat telah membawa banyak perubahan, dan wajah pengembangan web saat ini sangat berbeda. Hal-hal yang dapat kita lakukan di web saat ini dengan JavaScript yang berjalan di server, serta di browser, sulit dibayangkan beberapa tahun yang lalu, atau dikemas dalam lingkungan kotak pasir seperti Flash atau Java Applet.

Sebelum menggali solusi Node.js, Anda mungkin ingin membaca tentang manfaat menggunakan JavaScript di seluruh tumpukan yang menyatukan bahasa dan format data (JSON), memungkinkan Anda untuk menggunakan kembali sumber daya pengembang secara optimal. Karena ini lebih merupakan manfaat JavaScript daripada Node.js secara khusus, kami tidak akan membahasnya banyak di sini. Tapi itu adalah keuntungan utama untuk memasukkan Node ke dalam tumpukan Anda.

Seperti yang dinyatakan Wikipedia: “Node.js adalah kompilasi paket mesin JavaScript V8 Google, lapisan abstraksi platform libuv, dan pustaka inti, yang utamanya ditulis dalam JavaScript.” Selain itu, perlu dicatat bahwa Ryan Dahl, pencipta Node.js, bertujuan untuk membuat situs web waktu nyata dengan kemampuan push , “terinspirasi oleh aplikasi seperti Gmail”. Di Node.js, dia memberi pengembang alat untuk bekerja dalam paradigma I/O yang tidak memblokir dan digerakkan oleh peristiwa.

Setelah lebih dari 20 tahun web tanpa kewarganegaraan berdasarkan paradigma permintaan-tanggapan tanpa kewarganegaraan, kami akhirnya memiliki aplikasi web dengan koneksi dua arah waktu nyata.

Dalam satu kalimat: Node.js bersinar dalam aplikasi web waktu nyata yang menggunakan teknologi push melalui soket web. Apa yang begitu revolusioner tentang itu? Nah, setelah lebih dari 20 tahun stateless-web berdasarkan paradigma request-response stateless, kami akhirnya memiliki aplikasi web dengan koneksi dua arah real-time, di mana klien dan server dapat memulai komunikasi, memungkinkan mereka untuk bertukar data secara bebas. . Ini sangat kontras dengan paradigma respons web pada umumnya, di mana klien selalu memulai komunikasi. Selain itu, semuanya didasarkan pada tumpukan web terbuka (HTML, CSS, dan JS) yang berjalan di atas port standar 80.

Orang mungkin berpendapat bahwa kami telah memiliki ini selama bertahun-tahun dalam bentuk Flash dan Java Applet—tetapi pada kenyataannya, itu hanyalah lingkungan kotak pasir yang menggunakan web sebagai protokol transport untuk dikirimkan ke klien. Plus, mereka dijalankan secara terpisah dan sering dioperasikan melalui port non-standar, yang mungkin memerlukan izin tambahan dan semacamnya.

Dengan semua kelebihannya, Node.js sekarang memainkan peran penting dalam tumpukan teknologi banyak perusahaan terkenal yang bergantung pada manfaat uniknya. Yayasan Node.js telah mengkonsolidasikan semua pemikiran terbaik tentang mengapa perusahaan harus mempertimbangkan Node.js dalam presentasi singkat yang dapat ditemukan di halaman Studi Kasus Yayasan Node.js.

Dalam panduan Node.js ini, saya tidak hanya akan membahas bagaimana keunggulan ini dicapai, tetapi juga mengapa Anda mungkin ingin menggunakan Node.js—dan mengapa tidak— menggunakan beberapa model aplikasi web klasik sebagai contoh.

Bagaimana cara kerjanya?

Ide utama dari Node.js: gunakan I/O non-blocking, event-driven agar tetap ringan dan efisien dalam menghadapi aplikasi real-time intensif data yang berjalan di seluruh perangkat terdistribusi.

Itu seteguk.

Artinya, Node.js bukanlah platform baru yang akan mendominasi dunia pengembangan web. Sebaliknya, ini adalah platform yang memenuhi kebutuhan tertentu.
Menciak

Artinya, Node.js bukanlah platform baru yang akan mendominasi dunia pengembangan web. Sebaliknya, ini adalah platform yang memenuhi kebutuhan tertentu . Dan memahami ini sangat penting. Anda pasti tidak ingin menggunakan Node.js untuk operasi intensif CPU; pada kenyataannya, menggunakannya untuk perhitungan berat akan membatalkan hampir semua keuntungannya. Di mana Node benar-benar bersinar adalah dalam membangun aplikasi jaringan yang cepat dan skalabel, karena ia mampu menangani sejumlah besar koneksi simultan dengan throughput tinggi, yang setara dengan skalabilitas tinggi.

Cara kerjanya di bawah tenda cukup menarik. Dibandingkan dengan teknik layanan web tradisional di mana setiap koneksi (permintaan) memunculkan utas baru, mengambil RAM sistem dan akhirnya memaksimalkan jumlah RAM yang tersedia, Node.js beroperasi pada utas tunggal, menggunakan I/ non-pemblokiran Panggilan O, memungkinkannya untuk mendukung puluhan ribu koneksi bersamaan yang diadakan di loop acara.

Diagram utas server tradisional vs. Node.js

Perhitungan cepat: dengan asumsi bahwa setiap utas berpotensi memiliki memori 2 MB yang menyertainya, berjalan pada sistem dengan RAM 8 GB menempatkan kami pada maksimum teoritis 4.000 koneksi bersamaan (perhitungan diambil dari artikel Michael Abernethy “Just what is Node .js?”, Diterbitkan di IBM developerWorks pada tahun 2011; sayangnya, artikel tersebut tidak tersedia lagi) , ditambah biaya pengalihan konteks antar utas. Itulah skenario yang biasanya Anda hadapi dalam teknik layanan web tradisional. Dengan menghindari semua itu, Node.js mencapai tingkat skalabilitas lebih dari 1 juta koneksi bersamaan, dan lebih dari 600 ribu koneksi websockets bersamaan.

Tentu saja ada pertanyaan tentang berbagi satu utas di antara semua permintaan klien, dan ini merupakan potensi jebakan dalam menulis aplikasi Node.js. Pertama, komputasi yang berat dapat mencekik utas tunggal Node dan menyebabkan masalah bagi semua klien (lebih lanjut tentang ini nanti) karena permintaan yang masuk akan diblokir hingga komputasi tersebut selesai. Kedua, pengembang harus sangat berhati-hati untuk tidak membiarkan pengecualian menggelegak hingga loop peristiwa Node.js inti (paling atas), yang akan menyebabkan instance Node.js berhenti (secara efektif membuat program mogok).

Teknik yang digunakan untuk menghindari pengecualian yang menggelegak ke permukaan adalah meneruskan kesalahan kembali ke pemanggil sebagai parameter panggilan balik (alih-alih membuangnya, seperti di lingkungan lain). Bahkan jika beberapa pengecualian yang tidak tertangani berhasil muncul, alat telah dikembangkan untuk memantau proses Node.js dan melakukan pemulihan yang diperlukan dari instance yang mogok (walaupun Anda mungkin tidak akan dapat memulihkan status sesi pengguna saat ini), yang paling umum adalah modul Selamanya, atau menggunakan pendekatan berbeda dengan alat sistem eksternal pemula dan monit , atau bahkan baru pemula.

NPM: Manajer Paket Node

Saat membahas Node.js, satu hal yang pasti tidak boleh diabaikan adalah dukungan bawaan untuk manajemen paket menggunakan NPM, alat yang datang secara default dengan setiap instalasi Node.js. Ide modul NPM sangat mirip dengan Ruby Gems : satu set komponen yang tersedia untuk umum dan dapat digunakan kembali, tersedia melalui instalasi yang mudah melalui repositori online, dengan versi dan manajemen ketergantungan.

Daftar lengkap modul paket dapat ditemukan di situs web npm, atau diakses menggunakan alat npm CLI yang secara otomatis diinstal dengan Node.js. Ekosistem modul terbuka untuk semua, dan siapa pun dapat memublikasikan modul mereka sendiri yang akan dicantumkan di repositori npm.

Beberapa modul npm yang paling berguna saat ini adalah:

  • express - Express.js—atau hanya Express—kerangka kerja pengembangan web yang terinspirasi Sinatra untuk Node.js, dan standar de-facto untuk sebagian besar aplikasi Node.js di luar sana saat ini.
  • hapi - kerangka kerja konfigurasi-sentris yang sangat modular dan mudah digunakan untuk membangun aplikasi web dan layanan
  • connect - Connect adalah kerangka kerja server HTTP yang dapat diperluas untuk Node.js, menyediakan kumpulan "plugin" berkinerja tinggi yang dikenal sebagai middleware; berfungsi sebagai fondasi dasar untuk Express.
  • socket.io dan sockjs - Komponen sisi server dari dua komponen soket web paling umum di luar sana saat ini.
  • pug (sebelumnya Jade ) - Salah satu mesin templating populer, terinspirasi oleh HAML, default di Express.js.
  • mongodb dan mongojs - Pembungkus MongoDB untuk menyediakan API untuk database objek MongoDB di Node.js.
  • redis - Pustaka klien Redis.
  • lodash (garis bawah, lazy.js) - Sabuk utilitas JavaScript. Underscore memulai permainan, tetapi digulingkan oleh salah satu dari dua rekannya, terutama karena kinerja yang lebih baik dan implementasi modular.
  • selamanya - Mungkin utilitas paling umum untuk memastikan bahwa skrip node tertentu berjalan terus menerus. Menjaga proses Node.js Anda tetap dalam produksi dalam menghadapi kegagalan tak terduga.
  • bluebird - Implementasi Promises/A+ berfitur lengkap dengan kinerja yang sangat baik
  • moment - Pustaka tanggal JavaScript untuk mem-parsing, memvalidasi, memanipulasi, dan memformat tanggal.

Daftarnya terus berlanjut. Ada banyak sekali paket yang sangat berguna di luar sana, tersedia untuk semua (jangan tersinggung dengan yang saya hilangkan di sini).

Contoh Dimana Node.js Harus Digunakan

MENGOBROL

Obrolan adalah aplikasi multi-pengguna real-time yang paling umum. Dari IRC (dulu), melalui banyak protokol berpemilik dan terbuka yang berjalan pada port non-standar, hingga kemampuan untuk mengimplementasikan semuanya hari ini di Node.js dengan soket web yang berjalan di atas port standar 80.

Aplikasi obrolan benar-benar contoh terbaik untuk Node.js: ini adalah aplikasi yang ringan, lalu lintas tinggi, intensif data (tetapi pemrosesan/komputasi rendah) yang berjalan di seluruh perangkat terdistribusi. Ini juga merupakan kasus penggunaan yang bagus untuk belajar juga, karena sederhana, namun mencakup sebagian besar paradigma yang pernah Anda gunakan dalam aplikasi Node.js yang khas.

Mari kita coba menggambarkan cara kerjanya.

Dalam contoh paling sederhana, kami memiliki satu ruang obrolan di situs web kami tempat orang-orang datang dan dapat bertukar pesan dengan cara satu-ke-banyak (sebenarnya semua). Misalnya, katakanlah kami memiliki tiga orang di situs web yang semuanya terhubung ke papan pesan kami.

Di sisi server, kami memiliki aplikasi Express.js sederhana yang mengimplementasikan dua hal:

  1. Handler GET / request yang melayani halaman web yang berisi papan pesan dan tombol 'Kirim' untuk menginisialisasi input pesan baru, dan
  2. Server websocket yang mendengarkan pesan baru yang dipancarkan oleh klien websocket.

Di sisi klien, kami memiliki halaman HTML dengan beberapa pengaturan penangan, satu untuk acara klik tombol 'Kirim', yang mengambil pesan input dan mengirimkannya ke soket web, dan satu lagi yang mendengarkan pesan masuk baru pada klien soket web (yaitu, pesan yang dikirim oleh pengguna lain, yang sekarang diinginkan server untuk ditampilkan oleh klien).

Saat salah satu klien memposting pesan, inilah yang terjadi:

  1. Browser menangkap klik tombol 'Kirim' melalui pengendali JavaScript, mengambil nilai dari bidang input (yaitu, teks pesan), dan memancarkan pesan websocket menggunakan klien websocket yang terhubung ke server kami (diinisialisasi pada inisialisasi halaman web).
  2. Komponen sisi server dari koneksi soket web menerima pesan dan meneruskannya ke semua klien lain yang terhubung menggunakan metode siaran.
  3. Semua klien menerima pesan baru sebagai pesan push melalui komponen sisi klien soket web yang berjalan di dalam halaman web. Mereka kemudian mengambil konten pesan dan memperbarui halaman web di tempat dengan menambahkan pesan baru ke papan tulis.

Diagram soket web klien dan server dalam aplikasi Node.js

Ini adalah contoh paling sederhana. Untuk solusi yang lebih kuat, Anda dapat menggunakan cache sederhana berdasarkan toko Redis. Atau dalam solusi yang lebih canggih, antrian pesan untuk menangani perutean pesan ke klien dan mekanisme pengiriman yang lebih kuat yang dapat menutupi kehilangan koneksi sementara atau menyimpan pesan untuk klien terdaftar saat mereka offline. Namun terlepas dari peningkatan yang Anda buat, Node.js akan tetap beroperasi di bawah prinsip dasar yang sama: bereaksi terhadap peristiwa, menangani banyak koneksi bersamaan, dan mempertahankan fluiditas dalam pengalaman pengguna.

API DI ATAS OBJEK DB

Meskipun Node.js benar-benar bersinar dengan aplikasi waktu nyata, ini cukup cocok untuk mengekspos data dari DB objek (misalnya MongoDB). Data tersimpan JSON memungkinkan Node.js berfungsi tanpa ketidakcocokan impedansi dan konversi data.

Misalnya, jika Anda menggunakan Rails, Anda akan mengonversi dari JSON ke model biner, lalu mengeksposnya kembali sebagai JSON melalui HTTP saat data dikonsumsi oleh Backbone.js, Angular.js, dll., atau bahkan jQuery AJAX biasa. panggilan. Dengan Node.js, Anda cukup mengekspos objek JSON Anda dengan REST API untuk dikonsumsi klien. Selain itu, Anda tidak perlu khawatir tentang konversi antara JSON dan apa pun saat membaca atau menulis dari database Anda (jika Anda menggunakan MongoDB). Singkatnya, Anda dapat menghindari kebutuhan untuk beberapa konversi dengan menggunakan format serialisasi data yang seragam di seluruh klien, server, dan database.

INPUT ANTRIAN

Jika Anda menerima sejumlah besar data bersamaan, database Anda bisa menjadi hambatan. Seperti yang digambarkan di atas, Node.js dapat dengan mudah menangani sendiri koneksi konkuren. Tetapi karena akses basis data adalah operasi pemblokiran (dalam hal ini), kami mengalami masalah. Solusinya adalah dengan mengakui perilaku klien sebelum data benar-benar ditulis ke database.

Dengan pendekatan itu, sistem mempertahankan daya tanggapnya di bawah beban berat, yang sangat berguna ketika klien tidak memerlukan konfirmasi tegas tentang penulisan data yang berhasil. Contoh umum meliputi: pencatatan atau penulisan data pelacakan pengguna, diproses dalam kelompok dan tidak digunakan sampai waktu berikutnya; serta operasi yang tidak perlu direfleksikan secara instan (seperti memperbarui jumlah 'Suka' di Facebook) di mana konsistensi akhirnya (begitu sering digunakan di dunia NoSQL) dapat diterima.

Data diantrekan melalui semacam caching atau infrastruktur antrian pesan—seperti RabbitMQ atau ZeroMQ—dan dicerna oleh proses batch-write database terpisah, atau layanan backend pemrosesan intensif komputasi, yang ditulis dalam platform berkinerja lebih baik untuk tugas-tugas semacam itu. Perilaku serupa dapat diimplementasikan dengan bahasa/kerangka kerja lain, tetapi tidak pada perangkat keras yang sama, dengan throughput yang dipertahankan dan tinggi yang sama.

Diagram batch-tulis database di Node.js dengan antrian pesan

Singkatnya: dengan Node, Anda dapat mendorong penghapusan database ke samping dan menanganinya nanti, melanjutkan seolah-olah mereka berhasil.

STREAMING DATA

Dalam platform web yang lebih tradisional, permintaan dan tanggapan HTTP diperlakukan seperti peristiwa yang terisolasi; pada kenyataannya, mereka sebenarnya aliran. Pengamatan ini dapat digunakan di Node.js untuk membangun beberapa fitur keren. Misalnya, dimungkinkan untuk memproses file saat masih diunggah, karena data masuk melalui aliran dan kami dapat memprosesnya secara online. Ini dapat dilakukan untuk penyandian audio atau video waktu-nyata, dan proksi antara sumber data yang berbeda (lihat bagian berikutnya).

PROKSI

Node.js mudah digunakan sebagai proxy sisi server di mana ia dapat menangani sejumlah besar koneksi simultan dengan cara yang tidak memblokir. Ini sangat berguna untuk mem-proxy layanan yang berbeda dengan waktu respons yang berbeda, atau mengumpulkan data dari berbagai titik sumber.

Contoh: pertimbangkan aplikasi sisi server berkomunikasi dengan sumber daya pihak ketiga, menarik data dari sumber yang berbeda, atau menyimpan aset seperti gambar dan video ke layanan awan pihak ketiga.

Meskipun server proxy khusus memang ada, menggunakan Node sebagai gantinya mungkin bisa membantu jika infrastruktur proxy Anda tidak ada atau jika Anda memerlukan solusi untuk pengembangan lokal. Maksud saya, Anda dapat membangun aplikasi sisi klien dengan server pengembangan Node.js untuk aset dan permintaan API proxy/stubbing, sementara dalam produksi Anda akan menangani interaksi semacam itu dengan layanan proxy khusus (nginx, HAProxy, dll. .).

BROKERAGE - DASBOR PEDAGANG SAHAM

Mari kembali ke level aplikasi. Contoh lain di mana perangkat lunak desktop mendominasi, tetapi dapat dengan mudah diganti dengan solusi web waktu nyata adalah perangkat lunak perdagangan pialang, yang digunakan untuk melacak harga saham, melakukan perhitungan/analisis teknis, dan membuat grafik/grafik.

Beralih ke solusi berbasis web real-time akan memungkinkan broker untuk dengan mudah berpindah tempat kerja atau tempat kerja. Segera, kita mungkin mulai melihat mereka di pantai di Florida.. atau Ibiza.. atau Bali.

DASHBOARD PEMANTAUAN APLIKASI

Kasus penggunaan umum lainnya di mana Node-with-web-socket sangat cocok: melacak pengunjung situs web dan memvisualisasikan interaksi mereka secara real-time.

Anda dapat mengumpulkan statistik waktu nyata dari pengguna Anda, atau bahkan memindahkannya ke tingkat berikutnya dengan memperkenalkan interaksi yang ditargetkan dengan pengunjung Anda dengan membuka saluran komunikasi ketika mereka mencapai titik tertentu di corong Anda. (Jika Anda tertarik, ide ini sudah diproduksi oleh CANDDi.)

Bayangkan bagaimana Anda dapat meningkatkan bisnis Anda jika Anda tahu apa yang dilakukan pengunjung Anda secara real-time—jika Anda dapat memvisualisasikan interaksi mereka. Dengan soket dua arah Node.js real-time, sekarang Anda bisa.

DASBOR PEMANTAUAN SISTEM

Sekarang, mari kita mengunjungi sisi infrastruktur. Bayangkan, misalnya, penyedia SaaS yang ingin menawarkan halaman pemantauan layanan kepada penggunanya, seperti halaman status GitHub. Dengan loop peristiwa Node.js, kita dapat membuat dasbor berbasis web yang kuat yang memeriksa status layanan secara asinkron dan mendorong data ke klien menggunakan soket web.

Baik status internal (intra-perusahaan) dan layanan publik dapat dilaporkan secara langsung dan real-time menggunakan teknologi ini. Dorong ide itu sedikit lebih jauh dan coba bayangkan aplikasi pemantauan Network Operations Center (NOC) di operator telekomunikasi, penyedia cloud/jaringan/hosting, atau beberapa lembaga keuangan, semuanya berjalan di tumpukan web terbuka yang didukung oleh Node.js dan soket web alih-alih Java dan/atau Java Applet.

Catatan: Jangan mencoba membangun sistem hard real-time di Node (yaitu, sistem yang membutuhkan waktu respons yang konsisten). Erlang mungkin merupakan pilihan yang lebih baik untuk kelas aplikasi itu.

Dimana Node.js Dapat Digunakan

APLIKASI WEB SISI SERVER

Node.js dengan Express.js juga dapat digunakan untuk membuat aplikasi web klasik di sisi server. Namun, meskipun memungkinkan, paradigma permintaan-tanggapan di mana Node.js akan membawa HTML yang dirender bukanlah kasus penggunaan yang paling umum. Ada argumen yang dibuat untuk mendukung dan menentang pendekatan ini. Berikut adalah beberapa fakta yang perlu dipertimbangkan:

Kelebihan:

  • Jika aplikasi Anda tidak memiliki komputasi intensif CPU, Anda dapat membuatnya dalam Javascript top-to-bottom, bahkan hingga ke tingkat database jika Anda menggunakan penyimpanan JSON Object DB seperti MongoDB. Ini memudahkan pengembangan (termasuk perekrutan) secara signifikan.
  • Perayap menerima respons HTML yang dirender sepenuhnya, yang jauh lebih ramah SEO daripada, katakanlah, Aplikasi Halaman Tunggal atau aplikasi soket web yang berjalan di atas Node.js.

Kontra:

  • Komputasi intensif CPU apa pun akan memblokir respons Node.js, jadi platform berulir adalah pendekatan yang lebih baik. Atau, Anda dapat mencoba menskalakan perhitungan [*].
  • Menggunakan Node.js dengan database relasional masih cukup merepotkan (lihat di bawah untuk detail lebih lanjut). Bantulah diri Anda sendiri dan ambil lingkungan lain seperti Rails, Django, atau ASP.Net MVC jika Anda mencoba melakukan operasi relasional.
[*] Alternatif untuk komputasi intensif CPU ini adalah menciptakan lingkungan yang didukung MQ yang sangat skalabel dengan pemrosesan back-end untuk menjaga Node sebagai 'petugas' yang menghadap ke depan untuk menangani permintaan klien secara asinkron.

Dimana Node.js Seharusnya Tidak Digunakan

APLIKASI WEB SISI SERVER DENGAN DB RELASIONAL DI BALIK

Membandingkan Node.js dengan Express.js dengan Ruby on Rails, misalnya, dulu ada keputusan bersih yang mendukung yang terakhir ketika datang untuk mengakses database relasional seperti PostgreSQL, MySQL, dan Microsoft SQL Server.

Alat DB relasional untuk Node.js masih dalam tahap awal. Di sisi lain, Rails secara otomatis menyediakan pengaturan akses data langsung dari kotak bersama dengan alat pendukung migrasi skema DB dan Permata lainnya (pun intended). Rails dan kerangka kerjanya memiliki implementasi lapisan akses data Active Record atau Data Mapper yang matang dan terbukti.[*]

Tapi hal-hal telah berubah. Sequelize, TypeORM, dan Bookshelf telah menjadi solusi ORM yang matang. Mungkin juga layak untuk dicoba Bergabung dengan Monster jika Anda ingin menghasilkan SQL dari kueri GraphQL.

[*] Adalah mungkin dan tidak jarang untuk menggunakan Node semata-mata sebagai front-end, sambil menjaga back-end Rails Anda dan akses mudahnya ke DB relasional.
Terkait: Bagian Belakang: Menggunakan Gatsby.js dan Node.js untuk Pembaruan Situs Statis

KOMPUTASI/PENGOLAHAN SISI SERVER BERAT

Dalam hal komputasi yang berat, Node.js bukanlah platform terbaik. Tidak, Anda pasti tidak ingin membangun server komputasi Fibonacci di Node.js. Secara umum, setiap operasi intensif CPU membatalkan semua manfaat throughput yang ditawarkan Node dengan model I/O non-pemblokiran yang digerakkan oleh peristiwa karena setiap permintaan yang masuk akan diblokir saat utas diisi dengan pemrosesan angka Anda—dengan asumsi Anda mencoba untuk menjalankan komputasi Anda dalam instance Node yang sama dengan saat Anda merespons permintaan.

Seperti yang dinyatakan sebelumnya, Node.js adalah single-threaded dan hanya menggunakan satu inti CPU. Ketika datang untuk menambahkan konkurensi pada server multi-core, ada beberapa pekerjaan yang dilakukan oleh tim inti Node dalam bentuk modul cluster [ref: http://nodejs.org/api/cluster.html]. Anda juga dapat menjalankan beberapa instance server Node.js dengan cukup mudah di belakang proxy terbalik melalui nginx.

Dengan pengelompokan, Anda masih harus memindahkan semua komputasi berat ke proses latar belakang yang ditulis dalam lingkungan yang lebih tepat untuk itu, dan membuat mereka berkomunikasi melalui server antrian pesan seperti RabbitMQ.

Meskipun pemrosesan latar belakang Anda mungkin dijalankan pada server yang sama pada awalnya, pendekatan semacam itu memiliki potensi skalabilitas yang sangat tinggi. Layanan pemrosesan latar belakang tersebut dapat dengan mudah didistribusikan ke server pekerja yang terpisah tanpa perlu mengonfigurasi banyak server web yang menghadap ke depan.

Tentu saja, Anda juga akan menggunakan pendekatan yang sama pada platform lain, tetapi dengan Node.js Anda mendapatkan throughput reqs/sec yang tinggi seperti yang telah kita bicarakan, karena setiap permintaan adalah tugas kecil yang ditangani dengan sangat cepat dan efisien.

Kesimpulan

Kami telah membahas Node.js dari teori hingga praktik, dimulai dengan tujuan dan ambisinya, dan diakhiri dengan titik manis dan perangkapnya. Ketika orang mengalami masalah dengan Node, hampir selalu bermuara pada fakta bahwa operasi pemblokiran adalah akar dari semua kejahatan —99% penyalahgunaan Node datang sebagai konsekuensi langsung.

Di Node, operasi pemblokiran adalah akar dari semua kejahatan—99% penyalahgunaan Node datang sebagai akibat langsung.
Menciak

Ingat: Node.js tidak pernah dibuat untuk memecahkan masalah penskalaan komputasi. Itu dibuat untuk memecahkan masalah penskalaan I/O, yang dilakukan dengan sangat baik.

Mengapa menggunakan Node.js? Jika kasus penggunaan Anda tidak berisi operasi intensif CPU atau mengakses sumber daya pemblokiran apa pun, Anda dapat memanfaatkan manfaat Node.js dan menikmati aplikasi jaringan yang cepat dan skalabel. Selamat datang di web waktu nyata.