Bisakah saya mengganti Apache dengan Node.js?

151

Saya memiliki situs web yang berjalan di CentOS menggunakan tersangka biasa (Apache, MySQL, dan PHP). Sejak pertama kali situs web ini diluncurkan, situs ini telah berkembang sedikit dan sekarang saya ingin melakukan hal yang lebih menarik dengannya — yaitu pemberitahuan waktu nyata. Dari apa yang saya baca, Apache menangani ini dengan buruk. Saya bertanya-tanya apakah saya bisa mengganti hanya Apache dengan Node.js (jadi alih-alih " LAMP ", itu akan "LNMP").

Saya sudah mencoba mencari solusi di internet, tetapi belum menemukannya. Jika saya benar menafsirkan hal-hal yang telah saya baca, tampaknya kebanyakan orang mengatakan bahwa Node.js dapat menggantikan Apache dan PHP secara bersamaan. Saya punya banyak kode PHP, jadi saya lebih suka menyimpannya.

Jika belum jelas, saya cukup bingung dan bisa menggunakan beberapa pencerahan. Terima kasih banyak!

Rick
sumber
Server kera mungkin layak untuk dilihat.
TryHarder

Jawaban:

86

Jika Anda siap untuk menulis ulang PHP dalam JavaScript, maka ya, Node.js dapat menggantikan Apache Anda.

Jika Anda menempatkan instance Apache atau NGINX berjalan dalam mode proxy-terbalik antara server Anda dan klien Anda, Anda bisa menangani beberapa permintaan dalam JavaScript di Node.js dan beberapa permintaan di PHP yang di-hosting oleh Apache, hingga Anda dapat sepenuhnya mengganti semua PHP Anda. dengan kode JavaScript. Ini mungkin media yang menyenangkan: apakah WebSockets Anda berfungsi di Node.js, lebih banyak pekerjaan biasa di Apache + PHP.

sarnold
sumber
1
Saya menghargai tanggapan cepat! Apakah nginx jauh lebih unggul daripada Apache? Saya sudah memiliki file .htaccess di tempatnya dan akan menyenangkan untuk menyimpannya. Juga, saya telah membaca bahwa tidak ada gunanya meminta permintaan penerusan Apache ke Node.js karena Anda kehilangan keunggulan Node.js karena Anda masih melalui Apache. Akankah lebih baik jika Node.js mendengarkan pada port 80 untuk apa pun dalam subfolder bernama "nodejs" dan kemudian apa pun yang tidak ada dalam subfolder itu dapat diteruskan ke Apache oleh Node.js? Apache dapat mendengarkan di beberapa port lain seperti 8000.
Rick
21
@ Rick, saya hampir menghapus jawaban saya sendiri; Node dapat digunakansendfile , dan ada modul untuk dukungan FastCGI yang mungkin membuatnya mudah untuk melayani PHP Anda melalui Node juga. Adapun nginx vs Apache, saya selalu menjadi pengisap untuk server async-style di atas threaded atau server multiproses :) tetapi saya telah menemukan dokumentasi Apache lebih mudah untuk menemukan dan membaca. Saya akan menyebutnya preferensi pribadi kecuali Anda perlu skala ke nomor luar biasa. :)
sarnold
3
@Rick Anda tidak ingin memigrasi barang-barang produksi ke Node sebelum memahami apa itu dan cara kerjanya. Node bukan pil ajaib untuk membuat barang lebih cepat. Paradigma event driven / async bukanlah hal baru, dan ada alasan mengapa itu tidak digunakan untuk semuanya. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar
1
@ Rick Daripada berpikir bahwa Anda harus mengganti apa yang Anda miliki, mungkin lebih baik menjalankan Node sebagai tambahan. Jangan berpikir ada alasan untuk melewati semuanya melalui simpul (?), Terdengar seperti ide yang buruk. Jalankan saja node di port atau host lain.
Øyvind Skaar
2
@ Øyvind Skaar saya setuju. Juga, untuk sebagian besar situs web (misalnya Wordpress), hambatan sebenarnya adalah database dan bukan akses file. Dan, jika akses file adalah masalah maka cache selalu merupakan solusi yang layak. Bagaimanapun, untuk kinerja nyata, PHP-APC adalah trik yang sangat murah.
magallanes
26

Node.js mungkin lebih cepat daripada Apache berkat arsitektur yang terjadi / non-pemblokiran, tetapi Anda mungkin memiliki masalah menemukan modul / pustaka yang menggantikan beberapa fungsi Apache.

Node.js sendiri adalah kerangka kerja tingkat rendah yang ringan yang memungkinkan Anda untuk secara relatif cepat membangun hal-hal sisi server dan bagian waktu-nyata dari aplikasi web Anda, tetapi Apache menawarkan opsi konfigurasi yang lebih luas dan fitur berorientasi server web "klasik".

Saya akan mengatakan bahwa kecuali Anda ingin mengganti PHP dengan kerangka aplikasi web berbasis node.js seperti express.js maka Anda harus tetap menggunakan Apache (atau berpikir tentang migrasi ke Nginx jika Anda memiliki masalah kinerja).

yojimbo87
sumber
11

Saya percaya Node.js adalah masa depan dalam penyajian web, tetapi jika Anda memiliki banyak kode PHP yang ada, Apache / MySQL adalah taruhan terbaik Anda. Apache dapat dikonfigurasikan ke permintaan proxy ke Node.js, atau Node.js dapat mem-proxy permintaan ke Apache, tetapi saya percaya beberapa kinerja hilang dalam kedua kasus, terutama pada yang pertama. Bukan masalah besar jika Anda tidak menjalankan situs web lalu lintas yang sangat tinggi.

Saya baru saja mendaftar ke stackoverflow, dan saya belum bisa mengomentari jawaban yang diterima, tetapi hari ini saya membuat skrip Node.js sederhana yang benar-benar menggunakan sendfile () untuk melayani file melalui protokol HTTP. (Contoh yang ada bahwa tautan jawaban yang diterima hanya menggunakan protokol TCP kosong untuk mengirim file, dan saya tidak dapat menemukan contoh untuk HTTP, jadi saya menulisnya sendiri.)

Jadi saya pikir seseorang mungkin menganggap ini berguna. Melayani file melalui sendfile () OS call tidak selalu lebih cepat daripada ketika data disalin melalui "user land", tetapi akhirnya menggunakan CPU dan RAM lebih sedikit, sehingga mampu menangani jumlah koneksi yang lebih besar daripada cara klasik.

Tautan: https://gist.github.com/1350901

Youayayy
sumber
2
Meskipun sangat benar, saya masih percaya jika Anda menanggalkan apache melakukan apa yang Anda gambarkan, itu akan berjalan secepat, dan jika tidak, lebih cepat dari node.js. Apache melakukan banyak hal yang orang tidak melihat atau benar-benar mengerti dan jika Anda menambahkan semua fungsi server web ini ke node.js, itu akan berjalan lambat seperti mereka. Sebagai contoh sederhana mungkin, mynode.js / getfile? File = / etc / shadow
Rahly
8

Posting SO sebelumnya yang menjelaskan apa yang saya katakan (php + socket.io + node)

Saya pikir Anda bisa memasang server node di somehost: 8000 dengan socket.io dan menampar kode klien socket.io ke dalam tag dan dengan pekerjaan minimal dapatkan aplikasi yang ada goyang dengan socket.io (bayi realtime) tanpa banyak pekerjaan.

Sementara node dapat menjadi satu-satunya server backend Anda ingat bahwa node suka mengharumkan namanya dan menjadi sebuah node. Saya memeriksa pembicaraan beberapa waktu lalu yang diberikan Ryan Dahl kepada grup Pengguna PHP dan dia menyebutkan nama simpul yang berkaitan dengan visi beberapa proses simpul yang bekerja dan berbicara satu sama lain.

Richard Holland
sumber
2

LAMP versus MAKNA saat ini. Untuk perbandingan langsung lihat http://tamas.io/what-is-the-mean-stack .

Tentu saja M, E dan A agak bervariasi. Sebagai contoh, koa yang lebih baru dapat menggantikan (E) xpress.

Namun, hanya mengganti Apache dengan Node.js mungkin bukan cara yang tepat untuk memodernisasi tumpukan web Anda.

Wolfgang Kuehn
sumber