Bagaimana cara mengkonfigurasi Netty untuk menangani volume permintaan yang tinggi?

Dalam aplikasi kita, kita perlu membangun server HTTP di mana, saat startup, sekitar 1.600 koneksi HTTP persisten dibuka oleh berbagai server jarak jauh, dan aliran ribuan permintaan HTTP POST dikirim ke setiap koneksi secara berurutan selama sekitar 30 detik - kita hanya perlu beberapa milidetik untuk merespons tiap detik. Setelah 30 detik, koneksi ditutup dan koneksi lainnya dibuka.

Kami memilih Netty karena menurut sebagian besar akun, Netty sangat cocok untuk membangun server HTTP yang efisien.

Dalam mengimplementasikan server HTTP kami, kami mengikuti Mengintip contoh server HTTP Netty.

Sayangnya kami mengalami masalah yang mungkin disebabkan oleh kelebihan beban Netty, sehingga kami mempertimbangkan kembali apakah Netty sudah dikonfigurasi dengan benar, khususnya dalam cara penanganan thread. Kami mengkonfigurasi server sebagai berikut:

ServerBootstrap bootstrap = new ServerBootstrap(
   new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool()));

Saat kami menerima permintaan, kami menanganinya dalam thread yang sama yang memanggil messageReceived() di SimpleChannelUpstreamHandler kami.

Haruskah pendekatan ini berhasil dalam aplikasi kita?

edit: Rata-rata beban pada kotak saat kegagalan terjadi adalah 0,05, sehingga sangat rendah. Saya telah mengalokasikan 4GB untuk proses Java tetapi hampir tidak menggunakan semua itu. Jadi, pada dasarnya, kotak tersebut kekurangan muatan.


person sanity    schedule 20.12.2012    source sumber
comment
Bisakah Anda memposting beberapa angka penggunaan CPU/ram?   -  person uldall    schedule 21.12.2012
comment
Ditanggapi sesuai permintaan Anda, kotaknya tidak kelebihan beban.   -  person sanity    schedule 21.12.2012
comment
Kesalahan apa yang terjadi?   -  person Enno Shioji    schedule 21.12.2012
comment
Layanan lain melaporkan bahwa ia tidak menerima respons HTTP kami setelah batas waktu 100 ms, namun pencatatan kami menunjukkan bahwa kami merespons dengan banyak waktu luang.   -  person sanity    schedule 22.12.2012
comment
Komentar terakhir Anda sepertinya menunjukkan masalah di sisi jaringan, bukan? Apakah bandwidthnya cukup besar? Sebenarnya saya sedang mengerjakan aplikasi serupa dan saya mengalami masalah yang sama.   -  person Pixou    schedule 23.12.2012
comment
Hanya ingin tahu, apakah Anda mencoba membangun server rtb?   -  person Ole Gooner    schedule 02.12.2015


Jawaban (1)


Sudahkah Anda menonaktifkan Nagle dengan menyetel "child.nodelay" di ServerBootstrap Anda?

(Lihat http://static.netty.io/3.5/api/org/jboss/netty/bootstrap/ServerBootstrap.html)

person GamingBuck    schedule 28.12.2012