Saya sedang membangun paket analitik, dan persyaratan proyek menyatakan bahwa saya perlu mendukung 1 miliar hit per hari. Yap, "miliar". Dengan kata lain, tidak kurang dari 12.000 hit per detik dipertahankan, dan lebih disukai beberapa ruang untuk meledak. Saya tahu saya akan membutuhkan beberapa server untuk ini, tetapi saya mencoba untuk mendapatkan kinerja maksimal dari setiap node sebelum "melemparkan lebih banyak perangkat keras padanya".
Saat ini, saya telah menyelesaikan bagian pelacakan-pelacakan, dan dioptimalkan dengan baik. Saya cukup banyak hanya menyimpan permintaan langsung ke Redis (untuk diproses nanti dengan Hadoop). Aplikasi ini adalah Python / Django dengan gunicorn untuk gateway.
Server Rackspace 2GB Ubuntu 10,04 saya (bukan mesin produksi) dapat melayani sekitar 1.200 file statis per detik (diperbandingkan menggunakan Apache AB terhadap aset statis tunggal). Sebagai perbandingan, jika saya menukar tautan file statis dengan tautan pelacakan saya, saya masih mendapatkan sekitar 600 permintaan per detik - saya pikir ini berarti pelacak saya dioptimalkan dengan baik, karena itu hanya faktor 2 lebih lambat daripada melayani aset statis yang sama berkali-kali.
Namun, ketika saya melakukan benchmark dengan jutaan hit, saya perhatikan beberapa hal -
- Tidak ada penggunaan disk - ini diharapkan, karena saya telah mematikan semua log Nginx, dan kode khusus saya tidak melakukan apa pun selain menyimpan detail permintaan ke Redis.
- Penggunaan memori yang tidak konstan - Mungkin karena pengelolaan memori Redis, penggunaan memori saya secara bertahap akan naik dan turun kembali, tetapi itu tidak pernah menjadi hambatan saya.
- Beban sistem berkisar sekitar 2-4, sistem ini masih responsif bahkan selama tolok ukur terberat saya, dan saya masih dapat melihat secara manual http://mysite.com/tracking/pixel dengan sedikit keterlambatan yang terlihat sementara server saya (lainnya) melakukan 600 permintaan per kedua.
- Jika saya menjalankan tes singkat, katakan 50.000 hit (membutuhkan sekitar 2m), saya mendapatkan 600 permintaan yang stabil dan dapat diandalkan per detik. Jika saya menjalankan tes yang lebih lama (mencoba sejauh 3,5m sejauh ini), r / s saya menurun menjadi sekitar 250.
Pertanyaan saya --
Sebuah. Apakah sepertinya saya memaksimalkan server ini? Apakah 1.200 / s file statis kinerja nginx sebanding dengan apa yang orang lain alami?
b. Apakah ada penyetelan nginx umum untuk aplikasi volume tinggi seperti itu? Saya memiliki thread pekerja diatur ke 64, dan thread pekerja gunicorn diatur ke 8, tetapi mengutak-atik nilai-nilai ini tampaknya tidak banyak membantu atau membahayakan saya.
c. Apakah ada pengaturan tingkat linux yang dapat membatasi koneksi masuk saya?
d. Apa yang dapat menyebabkan kinerja saya menurun ke 250r / s pada tes yang berjalan lama? Sekali lagi, memori tidak maksimal selama pengujian ini, dan penggunaan HDD tidak ada.
Terima kasih sebelumnya, semua :)
EDIT Ini adalah konfigurasi nginx saya - http://pastie.org/1450749 - sebagian besar adalah vanila, dengan lemak yang jelas dipangkas.