Saya memiliki server dengan beberapa domain dan aplikasi yang berjalan, semua melalui Apache. Semua baik-baik saja saat ini tetapi saya memiliki rencana untuk mengembangkan beberapa aplikasi web yang sangat intensif (menggunakan C ++ dengan CPPCMS), dimulai dengan server saya untuk pengujian, mungkin mendapatkan server terpisah hanya untuk aplikasi ini setelah siap.
Bagaimanapun, saya telah mendengar banyak tentang NGinx, yang tampaknya lebih berkinerja daripada Apache, jadi saya bertanya pada diri sendiri apakah layak bekerja dengannya untuk proyek baru itu. Itu tidak jelas dalam pikiran saya karena saya tidak tahu apa jenis bottleneck kinerja yang diperbaiki NGinx sebenarnya.
Saya bukan pengguna daya Apache, saya admin linux yang buruk dan saya tidak banyak mengembangkan aplikasi web (tapi saya punya gagasan). Saya sebagian besar didedikasikan untuk menulis perangkat lunak sehingga bagian server web kadang-kadang sangat tidak jelas bagi saya. Setiap kali saya harus mengkonfigurasi situs web melalui apach, saya perlu banyak waktu menjelajah dokumen untuk memastikan saya tidak merusak semuanya.
Yang sedang berkata, saya pikir saya menjadi jauh lebih baik di sisi ini tetapi masih membutuhkan saran. Saya telah melihat beberapa file konfigurasi nginx, dan itu tampaknya jauh lebih dapat dipahami daripada yang Apache, tapi mungkin saya salah?
Dari informasi yang saya kumpulkan, NGinx akan menjadi pilihan terbaik ketika Anda ingin load-balancing, jadi jika Anda memiliki aplikasi Anda tersebar di beberapa mesin, kan? Saat saya sedang memikirkan aplikasi saya untuk scalling (dan kinerja), sepertinya itu yang saya butuhkan, tapi mungkin saya perlu tahu lebih banyak tentang kapan itu menarik untuk pindah dari Apache ke NGinx. Apakah perlu juga beralih ke NGinx untuk semua aplikasi saya saat ini? Berapa biayanya? (Maksud saya, apakah mahal pada waktunya untuk beralih dari satu ke yang lain?) Dapatkah saya menggunakan Apache dan NGinx keduanya pada mesin yang sama tanpa masalah?
Catatan : Tolong jangan mendesak saya untuk menggunakan bahasa yang ditafsirkan alih-alih C ++, itu tidak terkait dengan pertanyaan. Lihat halaman alasan CPPCSM untuk melihat jenis aplikasi apa yang bisa mendapat manfaat darinya. Saya sangat memahami kekurangannya (dibandingkan dengan aplikasi di Ruby dan Python, yang sudah saya gunakan untuk webapp yang lebih haus daya) dan saya baik-baik saja dengan itu.
sumber
Nginx, berbicara sangat ( sangat ) pada umumnya, dapat memperoleh throughput yang jauh lebih tinggi daripada Apache berkat pendekatan arsitektur yang berbeda untuk masalah melayani halaman ke web. Nginx juga dibangun terutama sebagai proksi terbalik, dan mengisi peran itu dengan sangat baik (ini adalah bit penyeimbang beban yang Anda singgung); Apache, di sisi lain, dibangun untuk melayani halaman web, dan kemudian memperoleh kemampuan proxy.
Yang mengatakan, ada hampir pasti daerah Apache akan secara konsisten mengungguli Nginx, sementara ada yang lain di mana Nginx akan secara konsisten mengungguli Apache.
Jawaban singkatnya adalah jika Apache berfungsi untuk Anda, tidak perlu beralih. (Dan saya mengatakan ini sebagai mantan pengguna Apache yang telah menjadi murid Nginx yang sepenuhnya dikonversi.) Hanya ketika lalu lintas ke server Anda mulai mencapai tingkat di mana Apache menjadi hambatan Anda (ini ada di urutan beberapa ribu koneksi simultan, tetapi akan sangat bervariasi berdasarkan spesifikasi server Anda dan beban server lainnya), atau jika Anda mencoba menjalankan Apache di lingkungan yang miskin sumber daya di tempat yang hampir tidak dapat ditampung, beralih ke Nginx memberi Anda manfaat yang kuat.
Yang mengatakan, jika Anda ingin beralih ke Nginx (yang saya mendorong!), Maka lakukanlah. Apakah Anda akan melihat manfaatnya? 9 kali dari 10: Tidak, Anda tidak akan melakukannya. Tapi Anda menyebutkan bahwa Anda seperti bahasa file konfigurasi dari Nginx lebih baik, jadi jika itu membuat Anda merasa lebih nyaman untuk mengkonfigurasi Nginx dari Apache, baik, yang merupakan manfaat untuk Anda! (Secara pribadi, saya menemukan konfigurasi Apache lebih mudah dibaca secara umum, tetapi itu bisa jadi karena saya menghabiskan bertahun-tahun membacanya, dan hanya beberapa bulan yang dihabiskan untuk Nginx!)
Di samping catatan: Anda menyebutkan keinginan Anda untuk membangun aplikasi web di C ++. Demi kewarasan Anda, saya sangat menyarankan Anda untuk menggunakan bahasa tingkat tinggi seperti PHP, Python, atau bahkan Java. Kemudian profil kode Anda dan pertimbangkan untuk membuat modul berbasis C ++ untuk mengatasi kemacetan tertentu (Python dan PHP keduanya memungkinkan ini lebih mudah; tidak tahu tentang Java). Jika Anda khawatir tentang kinerja keseluruhan, pertimbangkan ini: EVE Online, satu-satunya MMORPG unsharded terbesar di dunia, dibangun di atas varian Python (Stackless Python), dengan hanya komponen kunci (mis. Perpustakaan grafis) yang ditulis dalam C ++. Jika Python bisa mengatasinya, pasti itu bisa menangani aplikasi web Anda?
sumber
Tidak ada yang benar-benar dapat menjawab bagian "kapan saya harus beralih" - itu akan tergantung pada beban Anda, kinerja kode aplikasi Anda sendiri, dll.
nginx menggunakan proses tunggal (atau sejumlah kecil proses pekerja) untuk menangani semua koneksi klien menggunakan I / O yang terjadi. Apache memiliki beberapa "Modul Multi-Pemrosesan" yang tersedia, tetapi mereka semua lebih condong ke banyak proses / banyak utas. Akibatnya, Apache umumnya akan mengkonsumsi lebih banyak RAM dan CPU daripada nginx untuk penanganan koneksi HTTP dasar. Anda bisa mendapatkan gambaran tentang berbagai pendekatan penanganan koneksi pada halaman C10K Kegel .
Saya sangat menyarankan untuk mempertimbangkan melakukan webapp dasar dalam bahasa tingkat yang lebih tinggi (Python, atau mungkin Ruby, Scala), dan menggunakan antrian pesan untuk mengirim tiket kerja ke mesin pekerja yang menangani tugas "intensif kinerja" secara tidak sinkron.
nginx adalah penyeimbang beban yang baik; tetapi ada banyak opsi di ruang itu .
Iya. Jalankan saja pada berbagai nomor port IP dan / atau alamat IP.
sumber