Perkenalan
Jika Anda pernah mendengar tentang Node, atau membaca beberapa artikel yang mengklaim betapa hebatnya Node, Anda mungkin berpikir, "Apa sebenarnya Node?" Meskipun tidak untuk semua orang, Node mungkin merupakan pilihan yang tepat untuk beberapa orang.
Untuk mencoba menjelaskan apa itu Node.js, artikel ini mengeksplorasi masalah yang dapat dipecahkannya, cara kerjanya, cara menjalankan aplikasi sederhana, dan akhirnya, kapan node dan kapan bukan solusi yang baik. Artikel ini tidak mencakup cara menulis aplikasi simpul yang kompleks, juga bukan tutorial simpul yang komprehensif. Membaca artikel ini harus membantu Anda memutuskan apakah Anda harus mempelajari Node untuk menggunakannya untuk bisnis Anda.
Apa node yang dirancang untuk dipecahkan?
Tujuan Node yang diklaim secara publik adalah "untuk memberikan cara sederhana untuk membangun program jaringan yang dapat diskalakan." Apa masalah dengan program server saat ini? Mari kita lakukan masalah matematika. Dalam bahasa seperti Java ™ dan PHP, setiap koneksi menghasilkan utas baru, yang mungkin memerlukan 2 MB memori pendamping per utas baru. Pada sistem dengan 8 GB RAM, jumlah maksimum yang maksimum dari koneksi bersamaan adalah 4.000 pengguna. Saat basis klien Anda tumbuh, Anda ingin aplikasi web Anda mendukung lebih banyak pengguna, jadi Anda harus menambahkan lebih banyak server. Tentu saja, ini meningkatkan biaya bisnis, terutama biaya server, biaya pengiriman dan biaya tenaga kerja. Selain kenaikan biaya ini, ada masalah teknis: pengguna dapat menggunakan server yang berbeda untuk setiap permintaan, sehingga sumber daya bersama apa pun harus dibagikan di antara semua server. Misalnya, di Java, variabel statis dan cache perlu dibagi antara JVM di setiap server. Ini adalah hambatan di seluruh arsitektur aplikasi web: jumlah maksimum koneksi bersamaan yang dapat ditangani oleh server.
Solusi Node untuk masalah ini adalah mengubah cara koneksi terhubung ke server. Setiap koneksi menciptakan proses yang tidak memerlukan blok memori pendamping, alih -alih menghasilkan utas OS baru untuk setiap koneksi (dan mengalokasikan beberapa memori pendamping untuk itu). Node mengklaim bahwa itu tidak akan pernah menemui jalan buntu karena tidak mengizinkan kunci sama sekali, dan tidak akan memblokir panggilan I/O secara langsung. Node juga mengklaim bahwa server yang menjalankannya dapat mendukung puluhan ribu koneksi bersamaan. Faktanya, Node mengubah wajah server dengan mengubah kemacetan di seluruh sistem dari jumlah maksimum koneksi ke lalu lintas untuk satu sistem.
Sekarang setelah Anda memiliki program yang dapat menangani puluhan ribu koneksi bersamaan, apa yang bisa Anda bangun dengan node? Jika Anda memiliki aplikasi web yang perlu menangani begitu banyak koneksi, itu akan menjadi hal yang "mengerikan"! Itu adalah "jika Anda memiliki masalah ini, itu sama sekali bukan masalah". Sebelum menjawab pertanyaan di atas, mari kita lihat bagaimana node bekerja dan bagaimana cara kerjanya.
Node jelas tidak
Ya, Node adalah program server. Namun, itu tentu tidak terlihat seperti Apache atau Tomcat. Server tersebut adalah produk server mandiri yang memungkinkan aplikasi diinstal dan digunakan segera. Dengan produk -produk ini, Anda bisa mendapatkan server dan berjalan dalam satu menit. Node tentu bukan jenis produk ini. Apache dapat menambahkan modul PHP untuk memungkinkan pengembang membuat halaman web yang dinamis, dan pemrogram yang menggunakan TomCat dapat menggunakan JSP untuk membuat halaman web yang dinamis. Node tentu bukan tipe ini.
Pada tahap awal Node (saat ini versi 0.4.6), itu bukan program server "Run-Ready", dan Anda tidak dapat menginstalnya, menempatkan file ke dalamnya, dan memiliki server web yang berfungsi penuh. Bahkan jika Anda ingin mengimplementasikan fungsi dasar server web dan berjalan setelah instalasi selesai, banyak pekerjaan masih diperlukan.
Bagaimana Node Bekerja
Node sendiri menjalankan V8 JavaScript. Tunggu, JavaScript di server? Benar, Anda membacanya dengan benar. JavaScript sisi server adalah konsep yang relatif baru yang disebutkan sekitar dua tahun yang lalu ketika membahas produk Aptana Jaxer di DeveloperWorks (lihat sumber daya). Meskipun Jaxer tidak pernah benar -benar populer, konsep itu sendiri tidak di luar jangkauan - mengapa kita tidak bisa menggunakan bahasa pemrograman yang digunakan pada klien di server?
Apa yang Membuat V8? Mesin JavaScript V8 adalah mesin JavaScript yang mendasari yang digunakan Google untuk browser Chrome mereka. Hanya sedikit orang yang berpikir tentang apa yang sebenarnya dilakukan JavaScript pada klien? Faktanya, mesin JavaScript bertanggung jawab untuk menafsirkan dan melaksanakan kode. Menggunakan V8, Google membuat interpreter superfast yang ditulis dalam C ++ yang memiliki fitur unik lainnya; Anda dapat mengunduh mesin dan menyematkannya ke dalam aplikasi apa pun. Tidak terbatas untuk berjalan di satu browser. Jadi, Node sebenarnya menggunakan mesin V8 JavaScript yang ditulis oleh Google dan membangunnya untuk digunakan di server. Terlalu sempurna! Sekarang ada solusi bagus yang tersedia, mengapa membuat bahasa baru?
Pemrograman yang digerakkan oleh acara
Banyak programmer telah mendidik mereka untuk percaya bahwa pemrograman yang berorientasi objek adalah desain pemrograman yang sempurna dan meremehkan metode pemrograman lainnya. Node menggunakan apa yang disebut model pemrograman yang digerakkan oleh acara.
Listing 1. Pemrograman berbasis acara menggunakan jQuery pada klien
Salinan kode adalah sebagai berikut:
// Kode jQuery di sisi klien yang menunjukkan cara kerja pemrograman berbasis acara
// Saat tombol ditekan, suatu peristiwa terjadi - hadapi itu
// langsung di sini dalam fungsi anonim, di mana semua
// variabel yang diperlukan ada dan dapat direferensikan secara langsung
$ ("#myButton"). Klik (function () {
if ($ ("#myTextField"). val ()! = $ (this) .val ())
alert ("Field harus mencocokkan teks tombol");
});
Bahkan, tidak ada perbedaan antara server dan klien. Ya, tidak ada operasi klik tombol, juga tidak ada tindakan untuk mengetik ke dalam bidang teks, tetapi pada tingkat yang lebih tinggi, acara sedang terjadi. Koneksi dibuat - acara! Data diterima melalui koneksi - acara! Data berhenti melalui koneksi - acara!
Mengapa Tipe Pengaturan Ini Ideal untuk Node? JavaScript adalah bahasa pemrograman yang digerakkan oleh acara yang hebat karena memungkinkan fungsi dan penutupan anonim, dan yang lebih penting, siapa pun yang memiliki kode tertulis akrab dengan sintaksnya. Fungsi callback yang disebut ketika suatu peristiwa terjadi dapat ditulis di acara Capture. Dengan cara ini, kode ini mudah ditulis dan dipelihara, tanpa kerangka kerja yang berorientasi objek yang kompleks, tanpa antarmuka, dan tanpa potensi untuk menyusun apa pun di atasnya. Dengarkan saja acara tersebut, tulis fungsi panggilan balik, dan kemudian pemrograman yang digerakkan oleh acara akan mengurus semuanya!
Aplikasi node sampel
Akhirnya, mari kita lihat beberapa kode! Mari kita gabungkan semua yang telah kita bahas dan buat aplikasi simpul pertama kami. Karena kita sudah tahu bahwa Node sangat ideal untuk menangani aplikasi lalu lintas tinggi, kami akan membuat aplikasi web yang sangat sederhana - aplikasi yang dibangun untuk kecepatan maksimum. Berikut adalah persyaratan spesifik untuk aplikasi sampel kami yang dijelaskan oleh "Boss": Buat Generator Nomor Acak API RESTful. Aplikasi ini harus menerima input: parameter bernama "nomor". Aplikasi kemudian mengembalikan nomor acak antara 0 dan parameter dan mengembalikan nomor yang dihasilkan ke penelepon. Karena "Boss" menginginkannya menjadi aplikasi yang sangat populer, ia harus dapat menangani 50.000 pengguna bersamaan. Mari kita lihat kode:
Listing 2. Generator Nomor Node Node
Salinan kode adalah sebagai berikut:
// Modul ini perlu diimpor untuk menggunakannya.
// Node memiliki beberapa modul. Mereka seperti #include
// atau pernyataan impor dalam bahasa lain
var http = membutuhkan ("http");
var url = membutuhkan ("url");
// Baris terpenting dalam file node apa pun. Fungsi ini
// Apakah proses sebenarnya membuat server. Secara teknis
// node memberi tahu sistem operasi yang mendasarinya bahwa setiap kali a
// Koneksi dibuat, fungsi panggilan balik khusus ini seharusnya
// dieksekusi. Karena kami membuat layanan web dengan API REST,
// kami menginginkan server http, yang membutuhkan variabel http
// Kami membuat di baris di atas.
// Akhirnya, Anda dapat melihat bahwa metode callback menerima 'permintaan'
// dan objek 'respons' secara otomatis. Ini harus akrab
// untuk programmer PHP atau Java.
http.createServer (function (request, response) {
// Respons perlu menangani semua header, dan kode pengembalian
// jenis barang ini ditangani secara otomatis dalam program server
// Suka Apache dan Tomcat, tetapi Node mengharuskan segalanya untuk dilakukan sendiri
response.writeHead (200, {"tipe konten": "teks/polos"});
// Berikut ini beberapa kode yang terlihat unik. Begini Node Retrives
// Parameter disahkan dari permintaan klien. Modul URL
// Menangani semua fungsi ini. Fungsi parse
// mendekonstruksi URL, dan menempatkan nilai kunci kueri di
// objek kueri. Kita dapat menemukan nilai untuk kunci "angka"
// Dengan merujuknya secara langsung - keindahan JavaScript.
var params = url.parse (request.url, true) .query;
var input = params.number;
// Ini adalah metode javascript generik yang akan membuat
// nomor acak kami yang diteruskan kembali ke penelepon
var numInput = nomor baru (input);
var numoutput = nomor baru (math.random () * numInput) .tofixed (0);
// Tulis nomor acak untuk ditanggapi
response.write (numoutput);
// Node mengharuskan kita untuk mengakhiri koneksi ini secara eksplisit. hal ini dikarenakan
// node memungkinkan Anda untuk menjaga koneksi tetap terbuka dan melewati data bolak -balik,
// Meskipun topik canggih itu tidak dibahas dalam artikel ini.
response.end ();
// Saat kami membuat server, kami harus secara eksplisit menghubungkan server http ke
// port. Port HTTP standar adalah 80, jadi kami akan menghubungkannya ke yang itu.
}). Dengarkan (80);
// output string ke konsol setelah server dimulai, beri tahu kami segalanya
// Mulai dengan benar
console.log ("Generator nomor acak berjalan ...");
Masukkan kode di atas ke dalam file yang disebut "Random.js". Sekarang, untuk memulai aplikasi dan menjalankannya (dan kemudian membuat server HTTP dan mendengarkan koneksi pada port 80), cukup masukkan perintah berikut di prompt perintah Anda: % node random.js. Inilah yang terlihat ketika server sudah berjalan dan berjalan:
Salinan kode adalah sebagai berikut:
root@ubuntu:/home/moila/ws/mike# node random.js
Generator nomor acak berjalan ...
Mengakses aplikasi
Aplikasi sedang berjalan dan berjalan. Node mendengarkan koneksi apa pun, mari kita mengujinya. Karena kami membuat API Restful sederhana, kami dapat menggunakan browser web kami untuk mengakses aplikasi ini. Ketik alamat berikut (pastikan Anda menyelesaikan langkah -langkah di atas): http: // localhost/? Angka = 27.
Jendela browser Anda akan berubah ke nomor acak antara 0 dan 27. Klik tombol Reload di browser Anda dan Anda akan mendapatkan nomor acak lainnya. Itu saja, ini adalah aplikasi simpul pertama Anda!
Untuk apa node bagus?
Sejauh ini, Anda harus dapat menjawab pertanyaan "Apa itu Node", tetapi Anda mungkin tidak jelas kapan Anda harus menggunakannya. Ini adalah pertanyaan penting untuk ditanyakan, karena Node baik untuk beberapa hal, tetapi sebaliknya, Node mungkin bukan solusi yang baik untuk orang lain saat ini. Anda harus berhati -hati untuk memutuskan kapan menggunakan Node, karena menggunakannya dalam situasi yang salah dapat menghasilkan banyak pengkodean yang berlebihan.
Untuk apa itu?
Seperti yang Anda lihat sebelumnya, Node sangat cocok untuk situasi di mana Anda berharap memiliki lalu lintas tinggi, dan logika sisi server dan persyaratan pemrosesan tidak selalu besar sebelum menanggapi klien. Contoh khas kinerja luar biasa Node meliputi:
1. API RESTFUL
Layanan web yang menyediakan API REST menerima beberapa parameter, parsing, menggabungkan respons, dan mengembalikan respons (biasanya lebih sedikit teks) kepada pengguna. Ini adalah situasi yang ideal untuk Node, karena Anda dapat membangunnya untuk menangani puluhan ribu koneksi. Itu belum membutuhkan banyak logika; Itu hanya mencari beberapa nilai dari database dan menggabungkan respons. Karena responsnya adalah sejumlah kecil teks dan sejumlah kecil teks pada permintaan masuk, lalu lintas tidak tinggi, dan mesin dapat menangani bahkan kebutuhan API dari perusahaan tersibuk.
2. Antrian twitter
Bayangkan sebuah perusahaan seperti Twitter, yang harus menerima tweet dan menulisnya ke database. Bahkan, hampir ribuan tweet dicapai per detik, dan tidak mungkin bagi database untuk memproses jumlah penulisan yang diperlukan selama periode puncak secara tepat waktu. Node telah menjadi bagian penting dari solusi untuk masalah ini. Seperti yang Anda lihat, Node dapat menangani puluhan ribu tweet masuk. Dengan cepat dan mudah menulisnya ke mekanisme antrian memori (mis. Memcached) di mana proses lain yang terpisah dapat menulisnya ke database. Peran Node di sini adalah dengan cepat mengumpulkan tweet dan meneruskan informasi ini ke proses lain yang bertanggung jawab untuk menulis. Bayangkan desain lain - server PHP reguler mencoba menangani penulisan ke database itu sendiri - setiap tweet akan menyebabkan penundaan singkat saat menulis ke database, karena panggilan database memblokir saluran. Karena latensi basis data, mesin yang dirancang seperti ini hanya dapat menangani tweet inbound 2000 per detik. 1 juta tweet per detik membutuhkan 500 server. Sebaliknya, Node menangani setiap koneksi tanpa memblokir saluran, sehingga menangkap tweet sebanyak mungkin. Mesin simpul yang dapat menangani 50.000 tweet hanya membutuhkan 20 server.
3. Server File Gambar
Perusahaan dengan situs web terdistribusi besar, seperti Facebook atau Flickr, dapat memutuskan untuk menggunakan semua mesin hanya untuk gambar layanan. Node akan menjadi solusi yang baik untuk masalah ini, karena perusahaan dapat menggunakannya untuk menulis file retriever sederhana dan kemudian memproses puluhan ribu koneksi. Node akan mencari file gambar, mengembalikan file atau kesalahan 404, dan kemudian tidak melakukan apa pun. Pengaturan ini akan memungkinkan situs web terdistribusi tersebut untuk mengurangi jumlah server yang mereka butuhkan untuk melayani file statis seperti gambar, .js dan file .css.
Untuk apa itu buruk?
Tentu saja, dalam beberapa kasus, simpul tidak ideal. Berikut adalah area yang tidak dimiliki Node:
1. Halaman yang dibuat secara dinamis
Saat ini, Node tidak memberikan metode default untuk membuat halaman dinamis. Misalnya, saat menggunakan teknologi JavaServer Pages (JSP), Anda dapat membuat halaman index.jsp yang berisi loop dalam cuplikan kode JSP seperti itu. Node tidak mendukung halaman dinamis, yang digerakkan HTML. Demikian pula, Node tidak terlalu cocok sebagai server web seperti Apache dan Tomcat. Oleh karena itu, jika Anda ingin memberikan solusi sisi server di Node, Anda harus menulis seluruh solusi sendiri. Pemrogram PHP tidak ingin menulis konverter PHP untuk Apache setiap kali mereka menggunakan aplikasi web, dan sejauh ini adalah apa yang diminta Node untuk Anda lakukan.
2. Database Relasional Aplikasi Berat
Tujuan node cepat, asinkron dan tidak blokir. Basis data tidak harus berbagi tujuan ini. Mereka sinkron dan memblokir, karena panggilan ke database selama membaca dan menulis akan memblokir saluran sampai hasilnya dihasilkan. Oleh karena itu, aplikasi web yang membutuhkan banyak panggilan basis data, banyak bacaan, banyak penulisan per permintaan sangat tidak cocok untuk node, karena database relasional itu sendiri dapat mengimbangi banyak keuntungan node. (Basis data NoSQL baru lebih cocok untuk Node, tapi itu topik lain sama sekali.)
Kesimpulan
Pertanyaannya adalah "Apa itu Node.js?" seharusnya dijawab. Setelah membaca artikel ini, Anda harus dapat menjawab pertanyaan ini dalam beberapa kalimat yang jelas dan ringkas. Jika demikian, Anda berada di garis depan dari banyak pembuat kode dan pemrogram. Saya telah berbicara tentang Node dengan banyak orang, tetapi mereka bingung tentang apa sebenarnya Node. Maklum, mereka memiliki pola pikir Apache - server adalah aplikasi yang memasukkan file HTML ke dalamnya dan semuanya akan berfungsi dengan baik. Dan node didorong oleh tujuan. Ini adalah program perangkat lunak yang menggunakan JavaScript untuk memungkinkan pemrogram untuk dengan mudah dan cepat membuat server web yang cepat dan dapat diskalakan. Apache siap dijalankan, sementara Node encoding siap berjalan.
Node mencapai tujuannya untuk menyediakan server yang sangat diskalakan. Alih -alih mengalokasikan model "satu utas per koneksi", ia menggunakan model "satu proses per koneksi" untuk membuat hanya memori yang diperlukan untuk setiap koneksi. Ini menggunakan mesin JavaScript yang sangat cepat dari Google: mesin V8. Ini menggunakan desain yang digerakkan oleh acara untuk menjaga kode tetap minim dan mudah dibaca. Semua faktor ini berkontribusi pada tujuan ideal Node - lebih mudah untuk menulis solusi yang sangat terukur.
Sama pentingnya memahami apa itu Node, memahami apa yang bukan. Node bukan pengganti Apache, yang dirancang untuk membuat aplikasi Web PHP lebih diskalakan. Memang demikian masalahnya. Pada tahap awal node ini, tidak mungkin bahwa sejumlah besar programmer akan menggunakannya, tetapi dalam skenario tempat ia bekerja, kinerjanya sangat baik.
Apa yang harus saya harapkan dari Node di masa depan? Ini mungkin pertanyaan terpenting yang diajukan artikel ini. Sekarang setelah Anda tahu apa yang terjadi sekarang, Anda harus bertanya -tanya apa yang akan dilakukan selanjutnya. Selama tahun berikutnya, saya berharap untuk Node memberikan integrasi yang lebih baik dengan perpustakaan pendukung pihak ketiga yang ada. Banyak programmer pihak ketiga sekarang telah mengembangkan plug-in untuk node, termasuk menambahkan dukungan server file dan dukungan MySQL. Semoga Node mulai mengintegrasikannya ke dalam fungsi intinya. Akhirnya, saya juga ingin Node mendukung semacam modul halaman dinamis sehingga Anda dapat melakukan apa yang Anda lakukan di PHP dan JSP (mungkin NSP, halaman server node) dalam file HTML. Akhirnya, semoga suatu hari server simpul "siap pakai" akan muncul, yang dapat diunduh dan diinstal, cukup masukkan file HTML Anda di dalamnya, seperti menggunakan Apache atau Tomcat. Node masih dalam tahap awal, tetapi berkembang dengan sangat cepat dan mungkin segera dalam visi Anda.